hadoop的HA集群搭建过程 hadoop的HA机制原理 集群规划 安装步骤 配置HDFS 安装配置zooekeeper集群
1 hadoop的HA机制原理
HA:为了解决hadoop集群但单点故障问题。
hadoop中namenode单点故障的解决:
- active
- standby
2 前期准备
搭建高可用hadoop集群以前默认已经搭建好的普通的分布式集群,确保如下内容已经完成:
- 1.修改Linux主机名
- 2.修改IP
- 3.修改主机名和IP的映射关系 /etc/hosts
- 4.关闭防火墙
- 5.ssh免登陆
- 6.安装JDK,配置环境变量等
3 集群规划
主机名 | IP | 安装的软件 | 运行的进程 |
---|---|---|---|
hadoop00 | 192.168.1.200 | jdk、hadoop | NameNode、DFSZKFailoverController(zkfc) |
hadoop01 | 192.168.1.201 | jdk、hadoop | NameNode、DFSZKFailoverController(zkfc) |
hadoop02 | 192.168.1.202 | jdk、hadoop | ResourceManager |
hadoop03 | 192.168.1.203 | jdk、hadoop | ResourceManager |
hadoop04 | 192.168.1.204 | jdk、hadoop | DataNode、NodeManager |
hadoop05 | 192.168.1.205 | jdk、hadoop、zookeeper | DataNode、NodeManager、JournalNode、QuorumPeerMain |
hadoop06 | 192.168.1.206 | jdk、hadoop、zookeeper | DataNode、NodeManager、JournalNode、QuorumPeerMain |
hadoop07 | 192.168.1.207 | jdk、hadoop、zookeeper | DataNode、NodeManager、JournalNode、QuorumPeerMain |
说明:
1.在hadoop2.0中通常由两个NameNode组成,一个处于active状态,另一个处于standby状态。Active NameNode对外提供服务,而Standby NameNode则不对外提供服务,仅同步active namenode的状态,以便能够在它失败时快速进行切换。
hadoop2.0官方提供了两种HDFS HA的解决方案,一种是NFS,另一种是QJM。这里我们使用简单的QJM。在该方案中,主备NameNode之间通过一组JournalNode同步元数据信息,一条数据只要成功写入多数JournalNode即认为写入成功。通常配置奇数个JournalNode
这里还配置了一个zookeeper集群,用于ZKFC(DFSZKFailoverController)故障转移,当Active NameNode挂掉了,会自动切换Standby NameNode为standby状态
2.hadoop-2.2.0中依然存在一个问题,就是ResourceManager只有一个,存在单点故障,hadoop-2.6.4解决了这个问题,有两个ResourceManager,一个是Active,一个是Standby,状态由zookeeper进行协调
4 安装配置zooekeeper集群(在hadoop05上)
4.1解压
1 | tar -zxvf zookeeper-3.4.5.tar.gz -C /home/hadoop/app/ |
4.2修改配置
1 | cd /home/hadoop/app/zookeeper-3.4.5/conf/ |
修改:dataDir=/home/hadoop/app/zookeeper-3.4.5/tmp
在最后添加:
1 | server.1=hadoop05:2888:3888 |
保存退出
然后创建一个tmp文件夹
1 | mkdir /home/hadoop/app/zookeeper-3.4.5/tmp |
4.3将配置好的zookeeper拷贝到其他节点
首先分别在hadoop06、hadoop07根目录下创建一个hadoop目录:mkdir /hadoop
1 | scp -r /home/hadoop/app/zookeeper-3.4.5/ hadoop06:/home/hadoop/app/ |
注意:修改hadoop06、hadoop07对应/hadoop/zookeeper-3.4.5/tmp/myid内容
hadoop06:
1 | echo 2 > /home/hadoop/app/zookeeper-3.4.5/tmp/myid |
5 安装配置hadoop集群
(在hadoop00上操作)
5.1解压
1 | tar -zxvf hadoop-2.6.4.tar.gz -C /home/hadoop/app/ |
5.2配置HDFS
(hadoop2.0所有的配置文件都在$HADOOP_HOME/etc/hadoop目录下)
将hadoop添加到环境变量中
1 | vim /etc/profile |
1 | export JAVA_HOME=/usr/java/jdk1.7.0_55 |
hadoop2.0的配置文件全部在$HADOOP_HOME/etc/hadoop下
1 | cd /home/hadoop/app/hadoop-2.6.4/etc/hadoop |
5.2.1修改hadoo-env.sh
1 | export JAVA_HOME=/home/hadoop/app/jdk1.7.0_55 |
5.2.2修改core-site.xml
1 | <configuration> |
5.2.3修改hdfs-site.xml
1 | <configuration> |
5.2.4修改mapred-site.xml
1 | <configuration> |
5.2.5修改yarn-site.xml
1 | <configuration> |
5.2.6修改slaves
slaves是指定子节点的位置,因为要在hadoop01上启动HDFS、在hadoop03启动yarn,所以hadoop01上的slaves文件指定的是datanode的位置,hadoop03上的slaves文件指定的是nodemanager的位置
1 | hadoop05 |
5.2.7配置免密码登陆
首先要配置hadoop00到hadoop01、hadoop02、hadoop03、hadoop04、hadoop05、hadoop06、hadoop07的免密码登陆
在hadoop01上生产一对钥匙
1 | ssh-keygen -t rsa |
将公钥拷贝到其他节点,包括自己
1 | ssh-copy-id hadoop00 |
配置hadoop02到hadoop04、hadoop05、hadoop06、hadoop07的免密码登陆
在hadoop02上生产一对钥匙
1 | ssh-keygen -t rsa |
将公钥拷贝到其他节点
1 | ssh-coyp-id hadoop03 |
注意:两个namenode之间要配置ssh免密码登陆,别忘了配置hadoop01到hadoop00的免登陆
在hadoop01上生产一对钥匙
1 | ssh-keygen -t rsa |
6 将配置好的hadoop拷贝到其他节点
1 | scp -r /hadoop/ hadoop02:/ |
7 启动集群
注意:严格按照下面的步骤!!!!!!!!!
7.1 启动zookeeper集群
(分别在hdp-05、hdp-06、hdp-07上启动zk)
1 | cd /hadoop/zookeeper-3.4.5/bin/ |
查看状态:一个leader,两个follower
1 | ./zkServer.sh status |
7.2 手动启动journalnode
分别在在hdp-05、hdp-06、hdp-07上执行
1 | cd /hadoop/hadoop-2.6.4 |
运行jps命令检验,hadoop05、hadoop06、hadoop07上多了JournalNode进程
7.3 格式化namenode
在hdp-01上执行命令:
1 | hdfs namenode -format |
格式化后会在根据core-site.xml中的hadoop.tmp.dir配置生成个文件,这里我配置的是/hadoop/hadoop-2.6.4/tmp,然后将/hadoop/hadoop-2.6.4/tmp拷贝到hadoop02的/hadoop/hadoop-2.6.4/下。
1 | scp -r tmp/ hadoop02:/home/hadoop/app/hadoop-2.6.4/ |
也可以这样,建议hdfs namenode -bootstrapStandby
7.4 格式化ZKFC
(在hdp-01上执行即可)
1 | hdfs zkfc -formatZK |
7.5 启动HDFS
(在hadoop00上执行)
1 | sbin/start-dfs.sh |
7.6 启动YARN
注意:是在hadoop02上执行start-yarn.sh,把namenode和resourcemanager分开是因为性能问题,因为他们都要占用大量资源,所以把他们分开了,他们分开了就要分别在不同的机器上启动
1 | sbin/start-yarn.sh |
到此,hadoop-2.6.4配置完毕,可以统计浏览器访问:
http://hadoop00:50070
NameNode ‘hadoop01:9000’ (active)
NameNode ‘hadoop02:9000’ (standby)
验证HDFS HA
首先向hdfs上传一个文件
1 | hadoop fs -put /etc/profile /profile |
然后再kill掉active的NameNode
1 | kill -9 <pid of NN> |
通过浏览器访问:http://192.168.1.202:50070
NameNode ‘hadoop02:9000’ (active)
这个时候hadoop02上的NameNode变成了active
在执行命令:
1 | hadoop fs -ls / |
刚才上传的文件依然存在!!!
手动启动那个挂掉的NameNode
1 | sbin/hadoop-daemon.sh start namenode |
通过浏览器访问:http://192.168.1.201:50070
NameNode ‘hadoop01:9000’ (standby)
验证YARN:
运行一下hadoop提供的demo中的WordCount程序:
1 | hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.1.jar wordcount /profile /out |
OK,大功告成!!!
测试集群工作状态的一些指令 :
1 | bin/hdfs dfsadmin -report 查看hdfs的各节点状态信息 |