hadoop高可用集群部署
目录
一、hadoop简介... 2
1.什么是大数据... 2
2.什么是hadoop. 2
3.hdfs整体运行机制... 3
二、安装hadoop集群... 3
1.安装jdk. 4
2.安装hadoop. 4
3.编写core-site.xml配置文件... 4
4.编写hadoop-env.sh配置文件... 5
5.编写hdfs-site.xml配置文件... 6
6.编写mapred-site.xml配置文件... 8
7.编写yarn-site.xml配置文件... 9
8.配置集群节点... 10
9. HA集群初始化步骤... 11
10.单进程启动方式... 11
11.查看NN和RM高可用状态... 11
一、hadoop简介
1.什么是大数据
基本概念
在互联网技术发展到现今阶段,大量日常、工作等事务产生的数据都已经信息化,人类产生的数据量相比以前有了爆炸式的增长,以前的传统的数据处理技术已经无法胜任,需求催生技术,一套用来处理海量数据的软件工具应运而生,这就是大数据!
换个角度说,大数据是:
有海量的数据
有对海量数据进行挖掘的需求
有对海量数据进行挖掘的软件工具(hadoop、spark、storm、flink、tez、impala......)
大数据在现实生活中的具体应用
电商推荐系统:基于海量的浏览行为、购物行为数据,进行大量的算法模型的运算,得出各类推荐结论,以供电商网站页面来为用户进行商品推荐
精准广告推送系统:基于海量的互联网用户的各类数据,统计分析,进行用户画像(得到用户的各种属性标签),然后可以为广告主进行有针对性的精准的广告投放
2.什么是hadoop
hadoop中有3个核心组件:
分布式文件系统:HDFS —— 实现将文件分布式存储在很多的服务器上
分布式运算编程框架:MAPREDUCE —— 实现在很多机器上分布式并行运算
分布式资源调度平台:YARN —— 帮用户调度大量的mapreduce程序,并合理分配运算资源
3.hdfs整体运行机制
hdfs:分布式文件系统
hdfs有着文件系统共同的特征:
有目录结构,顶层目录是: /
系统中存放的就是文件
系统可以提供对文件的:创建、删除、修改、查看、移动等功能
hdfs跟普通的单机文件系统有区别:
单机文件系统中存放的文件,是在一台机器的操作系统中
hdfs的文件系统会横跨N多的机器
单机文件系统中存放的文件,是在一台机器的磁盘上
hdfs文件系统中存放的文件,是落在n多机器的本地单机文件系统中(hdfs是一个基于linux本地文件系统之上的文件系统)
hdfs的工作机制:
客户把一个文件存入hdfs,其实hdfs会把这个文件切块后,分散存储在N台linux机器系统中(负责存储文件块的角色:data node)<准确来说:切块的行为是由客户端决定的>
一旦文件被切块存储,那么,hdfs中就必须有一个机制,来记录用户的每一个文件的切块信息,及每一块的具体存储机器(负责记录块信息的角色是:name node)
3、为了保证数据的安全性,hdfs可以将每一个文件块在集群中存放多个副本(到底存几个副本,是由当时存入该文件的客户端指定的)
综述:一个hdfs系统,由一台运行了namenode的服务器,和N台运行了datanode的服务器组成!
二、安装hadoop集群
1.安装jdk
#tar zxvf jdk-8u171-linux-x64.tar.gz //解压jdk #mv jdk1.8.0_171/ /home/hadoop/app/jdk1.8 //复制文件并重命名jdk1.8 export JAVA_HOME=/home/hadoop/app/jdk1.8 export JRE_HOME=/home/hadoop/app/jdk1.8/jre export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib //jdk环境变量 #java -version //查看jdk版本 |
2.安装hadoop
# tar zxvf hadoop-2.7.6.tar.gz //解压hadoop #mv hadoop-2.7.6 /home/hadoop/app/hadoop2.7 //复制文件并重命名hadoop2.7 export HADOOP_HOME=/home/hadoop/app/hadoop2.7 //hadoop环境变量 export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
|
3.编写core-site.xml配置文件
<configuration> <property> <name>hadoop.temp.dir</name> <value>/home/hadoop/data/tmp</value> </property> <property> <name>fs.defaultFS</name> <value>hdfs://myha01</value> </property> <property> <name>ha.zookeeper.quorum</name> <value>cyjf06:2181,cyjf07:2181,cyjf08:2181</value> </property> <property> <name>ha.zookeeper.session-timeout.ms</name> <value>1000</value> <description>ms</description> </property>
<!-- eclipse连接hive 的配置--> <property> <name>hadoop.proxyuser.root.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.root.groups</name> <value>*</value> </property> </configuration> |
4.编写hadoop-env.sh配置文件
export JAVA_HOME=/home/hadoop/app/jdk1.8 export HADOOP_CONF_DIR=${HADOOP_CONF_DIR:-"/etc/hadoop"}
for f in $HADOOP_HOME/contrib/capacity-scheduler/*.jar; do if [ "$HADOOP_CLASSPATH" ]; then export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$f else export HADOOP_CLASSPATH=$f fi done
export HADOOP_OPTS="$HADOOP_OPTS -Djava.net.preferIPv4Stack=true" export HADOOP_NAMENODE_OPTS="-Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:-INFO,RFAS} -Dhdfs.audit.logger=${HDFS_AUDIT_LOGGER:-INFO,NullAppender} $HADOOP_NAMENODE_OPTS" export HADOOP_DATANODE_OPTS="-Dhadoop.security.logger=ERROR,RFAS $HADOOP_DATANODE_OPTS" export HADOOP_SECONDARYNAMENODE_OPTS="-Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:-INFO,RFAS} -Dhdfs.audit.logger=${HDFS_AUDIT_LOGGER:-INFO,NullAppender} $HADOOP_SECONDARYNAMENODE_OPTS" export HADOOP_NFS3_OPTS="$HADOOP_NFS3_OPTS" export HADOOP_PORTMAP_OPTS="-Xmx512m $HADOOP_PORTMAP_OPTS" export HADOOP_CLIENT_OPTS="-Xmx512m $HADOOP_CLIENT_OPTS" export HADOOP_SECURE_DN_USER=${HADOOP_SECURE_DN_USER} export HADOOP_SECURE_DN_LOG_DIR=${HADOOP_LOG_DIR}/${HADOOP_HDFS_USER} export HADOOP_PID_DIR=${HADOOP_PID_DIR} export HADOOP_SECURE_DN_PID_DIR=${HADOOP_PID_DIR} export HADOOP_IDENT_STRING=$USER |
5.编写hdfs-site.xml配置文件
<configuration> <property> <name>dfs:replication</name> <value>3</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>/home/hadoop/app/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/home/hadoop/app/data</value> </property>
<property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property>
<property> <name>dfs.nameservices</name> <value>myha01</value> </property> <!-- myha01下面有两个NameNode,分别是nn1,nn2 --> <property> <name>dfs.ha.namenodes.myha01</name> <value>nn1,nn2</value> </property>
<!-- nn1的RPC通信地址 --> <property> <name>dfs.namenode.rpc-address.myha01.nn1</name> <value>cyjf01:9000</value> </property>
<!-- nn1的http通信地址 --> <property> <name>dfs.namenode.http-address.myha01.nn1</name> <value>cyjf01:50070</value> </property>
<!-- nn2的RPC通信地址 --> <property> <name>dfs.namenode.rpc-address.myha01.nn2</name> <value>cyjf02:9000</value> </property> <!-- nn2的http通信地址 --> <property> <name>dfs.namenode.http-address.myha01.nn2</name> <value>cyjf02:50070</value> </property>
<property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://cyjf06:8485;cyjf07:8485;cyjf08:8485/myha01</value> </property>
<property> <name>dfs.journalnode.edits.dir</name> <value>/home/hadoop/app/journaldata</value> </property>
<!-- 开启NameNode失败自动切换 --> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <!-- 配置失败自动切换实现方式 --> <property> <name>dfs.client.failover.proxy.provider.myha01</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行 --> <property> <name>dfs.ha.fencing.methods</name> <value> sshfence shell(/bin/true) </value> </property>
<!-- 使用sshfence隔离机制时需要ssh免登陆 --> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/home/hadoop/.ssh/id_rsa</value> </property> <!-- 配置sshfence隔离机制超时时间 --> <property> <name>dfs.ha.fencing.ssh.connect-timeout</name> <value>30000</value> </property>
<property> <name>ha.failover-controller.cli-check.rpc-timeout.ms</name> <value>60000</value> </property> </configuration> |
6.编写mapred-site.xml配置文件
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>cyjf01:10020</value> </property>
<!-- 任务历史服务器的web地址 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>cyjf01:19888</value> </property>
</configuration> |
7.编写yarn-site.xml配置文件
<configuration> <!-- 开启RM高可用 --> <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property>
<!-- 指定RM的cluster id --> <property> <name>yarn.resourcemanager.cluster-id</name> <value>yrc</value> </property>
<!-- 指定RM的名字 --> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> </property> <!-- 分别指定RM的地址 --> <property> <name>yarn.resourcemanager.hostname.rm1</name> <value>cyjf01</value> </property> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>cyjf02</value> </property>
<!-- 指定zk集群地址 --> <property> <name>yarn.resourcemanager.zk-address</name> <value>cyjf06:2181,cyjf07:2181,cyjf08:2181</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property>
<property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property>
<property> <name>yarn.log-aggregation.retain-seconds</name> <value>86400</value> </property> <!-- 启用自动恢复 --> <property> <name>yarn.resourcemanager.recovery.enabled</name> <value>true</value> </property>
<!-- 制定resourcemanager的状态信息存储在zookeeper集群上 --> <property> <name>yarn.resourcemanager.store.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value> </property>
</configuration> |
8.配置集群节点
cyjf03 cyjf04 cyjf05 cyjf06 cyjf07 cyjf08 //修改/home/hadoop/app/hadoop2.7/etc/Hadoop/slaves文件 #scp -r /home/hadoop/app/hadoop2.7 cyjf02-08:/home/hadoop/app/hadoop //将配置hadoop复制到cyjf02-cyjf08
|
9. HA集群初始化步骤
zkServer.sh start 启动zookeeper (在cyjf06,cyjf07,cyjf08) hadoop-daemon.sh start journalnode 启动journalnode (在cyjf06,cyjf07,cyjf08) hadoop namenode -format 格式话hdfs,第一次需要 scp -r /home/name/ slave1:/home/name/ 复制元数据信息到cyjf02节点 hdfs namenode -bootstrapStandby同步master节点元数据信息 (在备用namenode节点) hdfs zkfc -formatZK 格式化高可用(只能在nameonde节点进行) start-dfs.sh 启动HDFS start-yarn.sh 启动YARN yarn-daemon.sh start resourcemanager (备用rm节点单起)
|
10.单进程启动方式
//单个进程启动方式 hadoop-daemon.sh start namenode hadoop-daemon.sh start datanode hadoop-daemon.sh start journalnode hadoop-daemon.sh start zkfc yarn-daemon.sh start resourcemanager |
11.查看NN和RM高可用状态
hdfs haadmin -getServiceState nn1 //查看nn高可用状态
hdfs haadmin -getServiceState nn2
yarn rmadmin -getServiceState rm1 //查看rm高可用状态
yarn rmadmin -getServiceState rm2