前言

上一节学习了HDFS HA的原理,本节来做实验

1.机器环境

主机名 IP 角色
hadoop1 172.18.0.11 NN1 ZK RM
hadoop2 172.18.0.12 NN2 ZK RM JOBHISTORY
hadoop3 172.18.0.13 DN ZK ND
hadoop4 172.18.0.14 DN QJM1 ND
hadoop5 172.18.0.15 DN QJM2 ND
hadoop6 172.18.0.16 DN QJM3 ND

目前已经安装了hdfs yarn zookeeper

2.配置HA

2.1 修改hdfs-site.xml

  1. <property>
  2. <name>dfs.nameservices</name>
  3. <value>dockercluster</value>
  4. </property>
  5. <property>
  6. <name>dfs.ha.namenodes.dockercluster</name>
  7. <value>nn1,nn2</value>
  8. </property>
  9. <property>
  10. <name>dfs.namenode.rpc-address.dockercluster.nn1</name>
  11. <value>hadoop1:8020</value>
  12. </property>
  13. <property>
  14. <name>dfs.namenode.rpc-address.dockercluster.nn2</name>
  15. <value>hadoop2:8020</value>
  16. </property>
  17. <property>
  18. <name>dfs.namenode.http-address.dockercluster.nn1</name>
  19. <value>hadoop1:50070</value>
  20. </property>
  21. <property>
  22. <name>dfs.namenode.http-address.dockercluster.nn2</name>
  23. <value>hadoop2:50070</value>
  24. </property>
  25. <property>
  26. <name>dfs.namenode.shared.edits.dir</name>
  27. <value>qjournal://hadoop4:8485;hadoop5;hadoop6:8485/dockercluster</value>
  28. </property>
  29. <property>
  30. <name>dfs.client.failover.proxy.provider.dockercluster</name>
  31. <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
  32. </property>
  33. <property>
  34. <name>dfs.ha.fencing.methods</name>
  35. <value>sshfence</value>
  36. </property>
  37. <property>
  38. <name>dfs.ha.fencing.ssh.private-key-files</name>
  39. <value>/home/hdfs/.ssh/id_rsa</value>
  40. </property>
  41. <property>
  42. <name>dfs.ha.fencing.ssh.connect-timeout</name>
  43. <value>30000</value>
  44. </property>
  45. <property>
  46. <name>dfs.journalnode.edits.dir</name>
  47. <value>/opt/hadoop/hadoop-2.7.3/JNSdatadir</value>
  48. </property>

2.2 设置core-site.xml

  1. <property>
  2. <name>fs.defaultFS</name>
  3. <value>hdfs://dockercluster</value>
  4. </property>

将以上配置文件分发到各个节点上

3.配置手动HA

3.1 关闭YARN、HDFS

关闭yarn:

  1. resourcemanager上执行:$HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR stop resourcemanager
  2. nodemanager上执行:$HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR stop nodemanager

关闭hdfs:

  1. namenode上执行:$HADOOP_HOME/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs stop namenode
  2. datanode执行:$HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs stop datanode

如果配置了ssh免密码登录:

stop-yarn.sh
stop-dfs.sh

3.2 启动HDFS HA

  1. 启动journal节点
    在hadoop4 5 6上执行:

    hadoop-daemon.sh start journalnode

  2. 在standby namenode上执行初始化

  1. [hdfs@hadoop2 hadoop-2.7.3]$ hdfs namenode -bootstrapStandby
  2. .........
  3. 17/04/1918:24:17 INFO ipc.Client:Retrying connect to server: hadoop1/172.18.0.11:8020.Already tried 9 time(s);retry policy isRetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)
  4. 17/04/1918:24:17 FATAL ha.BootstrapStandby:Unable to fetch namespace information from active NN at hadoop1/172.18.0.11:8020:CallFrom hadoop2/172.18.0.12 to hadoop1:8020 failed on connection exception: java.net.ConnectException:Connection refused;For more details see: http://wiki.apache.org/hadoop/ConnectionRefused
  5. 17/04/1918:24:17 INFO util.ExitUtil:Exitingwith status 2
  6. 17/04/1918:24:17 INFO namenode.NameNode: SHUTDOWN_MSG:
  7. /************************************************************
  8. SHUTDOWN_MSG: Shutting down NameNode at hadoop2/172.18.0.12

该语句把原namenode上的元数据目录复制到本节点上的相应目录中
执行这个语句报错了,连接不上hadoop1:8020.看来官网写的不对啊,操。在执行这一步之前要先启动原来的namenode.先向下继续。

  1. 初始化edit log
    在原来的namenode上执行:
  1. [hdfs@hadoop1 namenodedir]$ hdfs namenode -initializeSharedEdits
  2. .....
  3. 17/04/1918:28:24 INFO namenode.EditLogInputStream:Fast-forwarding stream '/opt/hadoop/hadoop-2.7.3/namenodedir/current/edits_0000000000000000001-0000000000000000256' to transaction ID 1
  4. 17/04/1918:28:24 INFO namenode.FSEditLog:Starting log segment at 1
  5. 17/04/1918:28:24 INFO namenode.FSEditLog:Ending log segment 1
  6. 17/04/1918:28:24 INFO namenode.FSEditLog:Number of transactions:256Total time for transactions(ms):63Number of transactions batched inSyncs:0Number of syncs:1SyncTimes(ms):11
  7. 17/04/1918:28:24 INFO util.ExitUtil:Exitingwith status 0
  8. 17/04/1918:28:24 INFO namenode.NameNode: SHUTDOWN_MSG:
  9. /************************************************************
  10. SHUTDOWN_MSG: Shutting down NameNode at hadoop1/172.18.0.11
  11. ************************************************************

这个脚本会把本地的edit log复制到journal节点中去

  1. 启动原来的namenode
  1. $HADOOP_HOME/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs start namenode
  1. 再次初始化standby namenode
    刚才初始化失败了,再来一次:
  1. =====================================================
  2. Re-format filesystem inStorageDirectory/opt/hadoop/hadoop-2.7.3/namenodedir ?(Y or N) y
  3. 17/04/1920:30:38 INFO common.Storage:Storage directory /opt/hadoop/hadoop-2.7.3/namenodedir has been successfully formatted.
  4. 17/04/1920:30:38 WARN common.Util:Path/opt/hadoop/hadoop-2.7.3/namenodedir should be specified as a URI in configuration files.Please update hdfs configuration.
  5. 17/04/1920:30:38 WARN common.Util:Path/opt/hadoop/hadoop-2.7.3/namenodedir should be specified as a URI in configuration files.Please update hdfs configuration.
  6. 17/04/1920:30:39 INFO namenode.TransferFsImage:Opening connection to http://hadoop1:50070/imagetransfer?getimage=1&txid=256&storageInfo=-63:51947955:0:CID-3adccc69-45b5-4b44-81b6-70ab593cc1ed
  7. 17/04/1920:30:39 INFO namenode.TransferFsImage:ImageTransfer timeout configured to 60000 milliseconds
  8. 17/04/1920:30:39 INFO namenode.TransferFsImage:Transfer took 0.00s at 500.00 KB/s
  9. 17/04/1920:30:39 INFO namenode.TransferFsImage:Downloaded file fsimage.ckpt_0000000000000000256 size 2780 bytes.
  10. 17/04/1920:30:39 INFO util.ExitUtil:Exitingwith status 0
  11. 17/04/1920:30:39 INFO namenode.NameNode: SHUTDOWN_MSG:
  12. /************************************************************
  13. SHUTDOWN_MSG: Shutting down NameNode at hadoop2/172.18.0.12
  14. ************************************************************/

这次就行了!!
记住,选"Re-format filesystem in Storage Directory /opt/hadoop/hadoop-2.7.3/namenodedir ? (Y or N) Y"

7.启动standby namenode

  1. $HADOOP_HOME/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs start namenode

这次启动成功了。

所以,正确的顺序是:启动journal->初始化edit log->启动nameode->初始化standby->启动standby

8.检查HA web页面:

看到两个namenode都是standby!
那手动切换一下,设置hadoop1上的namenode为active:

  1. [hdfs@hadoop2 hadoop]$ hdfs haadmin -failover --forceactive nn1 nn2
  2. 17/04/1920:51:59 WARN ha.FailoverController:Serviceisnot ready to become active, but forcing:TheNameNodeisin safemode.The reported blocks 0 needs additional 16 blocks to reach the threshold 0.9990 of total blocks 16.
  3. The number of live datanodes 0 has reached the minimum number 0.Safe mode will be turned off automatically once the thresholds have been reached.
  4. Failoverfrom nn1 to nn2 successful

这样就把nn2切换为active的namenode了

为了验证sshfence的正确性,你可以反复的切几次~

4.配置自动HA

4.1 关闭集群

在两个namenode上:

  1. $HADOOP_HOME/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs stop namenode

在所有datanode上:

  1. $HADOOP_HOME/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs stop datanode

4.2 修改配置文件

1.在hdfs-site.xml中

  1. <property>
  2. <name>dfs.ha.automatic-failover.enabled</name>
  3. <value>true</value>
  4. </property>

2.在core-site.xml中:

  1. <property>
  2. <name>ha.zookeeper.quorum</name>
  3. <value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
  4. </property>

将以上文件分发到各个节点。

4.3 启动HA

1.初始化ZKFC
在任意一个namenode上执行:

  1. [hdfs@hadoop1 hadoop]$ hdfs zkfc -formatZK
  2. ...........
  3. 17/04/1921:09:09 INFO zookeeper.ClientCnxn:Socket connection established to hadoop2/172.18.0.12:2181, initiating session
  4. 17/04/1921:09:09 INFO zookeeper.ClientCnxn:Session establishment complete on server hadoop2/172.18.0.12:2181, sessionid =0x25b6d24ae630000, negotiated timeout =5000
  5. 17/04/1921:09:09 INFO ha.ActiveStandbyElector:Session connected.
  6. 17/04/1921:09:10 INFO ha.ActiveStandbyElector:Successfully created /hadoop-ha/dockercluster in ZK.
  7. 17/04/1921:09:10 INFO zookeeper.ZooKeeper:Session:0x25b6d24ae630000 closed
  8. 17/04/1921:09:10 INFO zookeeper.ClientCnxn:EventThread shut down

2.启动ZKFC
在每个namenode上执行:

  1. $HADOOP_HOME/sbin/hadoop-daemon.sh --script $HADOOP_HOME/bin/hdfs start zkfc

注:如果配了SSH免密码登录,直接用start-dfs.sh启动集群即可

3.启动namenode

  1. $HADOOP_HOME/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs start namenode

4.进web查看状态


4.4 测试自动切换

在hadoop1上直接kill n11:

  1. [hdfs@hadoop1 hadoop]$ jps
  2. 5588NameNode
  3. 5501DFSZKFailoverController
  4. 5695Jps
  5. [hdfs@hadoop1 hadoop]$ kill 5501

再看看:

说明自动切换正常!

HADOOP docker(三):HDFS高可用实验的更多相关文章

  1. HADOOP docker(二):HDFS 高可用原理

        1.环境简述2.QJM HA简述2.1为什么要做HDFS HA?2.2 HDFS HA的方式2.2 HSFS HA的结构2.3 机器要求3.部署HDFS HA3.1 详细配置3.2 部署HDF ...

  2. Hadoop框架:HDFS高可用环境配置

    本文源码:GitHub·点这里 || GitEE·点这里 一.HDFS高可用 1.基础描述 在单点或者少数节点故障的情况下,集群还可以正常的提供服务,HDFS高可用机制可以通过配置Active/Sta ...

  3. hadoop 2.7.1 高可用安装部署

    hadoop集群规划 目标:创建2个NameNode,做高可用,一个NameNode挂掉,另一个能够启动:一个运行Yarn,3台DataNode,3台Zookeeper集群,做高可用. 在hadoop ...

  4. hadoop HA+Federation(高可用联邦)搭建配置(二)

    hadoop HA+Federation(高可用联邦)搭建配置(二) 标签(空格分隔): hadoop core-site.xml <?xml version="1.0" e ...

  5. hadoop 集群HA高可用搭建以及问题解决方案

    hadoop 集群HA高可用搭建 目录大纲 1. hadoop HA原理 2. hadoop HA特点 3. Zookeeper 配置 4. 安装Hadoop集群 5. Hadoop HA配置 搭建环 ...

  6. RabbitMQ(四):使用Docker构建RabbitMQ高可用负载均衡集群

    本文使用Docker搭建RabbitMQ集群,然后使用HAProxy做负载均衡,最后使用KeepAlived实现集群高可用,从而搭建起来一个完成了RabbitMQ高可用负载均衡集群.受限于自身条件,本 ...

  7. hadoop HA+Federation(高可用联邦)搭建配置(一)

    hadoop HA+Federation(高可用联邦)搭建配置(一) 标签(空格分隔): 未分类 介绍 hadoop 集群一共有4种部署模式,详见<hadoop 生态圈介绍>. HA联邦模 ...

  8. hadoop+zookeeper集群高可用搭建

                                                                  hadoop+zookeeper集群高可用搭建 Senerity 发布于 2 ...

  9. HDFS 高可用分布式环境搭建

    HDFS 高可用分布式环境搭建 作者:Grey 原文地址: 博客园:HDFS 高可用分布式环境搭建 CSDN:HDFS 高可用分布式环境搭建 首先,一定要先完成分布式环境搭建 并验证成功 然后在 no ...

随机推荐

  1. Java并发编程(一)为什么要并发

    并发所带来的好处 1. 并发在某些情况(并不是所有情况)下可以带来性能上的提升 1) 提升对CPU的使用效率 提升多核CPU的利用率:一般来说一台主机上的会有多个CPU核心,我们可以创建多个线程,理论 ...

  2. 继续深入更新shell脚本容易出错的地方

    一.在shell中用到如果需要输入某些值,需要用到read -p命令 这是我写的猜数字游戏,一开始在输出的时候,屏幕上总会打印输出  "INT" 经过反复的练习才发现 双引号后面应 ...

  3. JSP + servlet 源码 实现文件的上传

    JSP页面 upLoad.jsp _________________________________ <%@ page language="java" import=&quo ...

  4. 树莓派驱动DHT22

    树莓派-DHT22测量湿度 一般的温湿度传感器有dht11和dht22,dht11比较便宜,dht22比dht11贵好几倍,自然测量的准确度肯定是dht22高一些.追求更高精准度的可以使用SHT1x. ...

  5. for循环删除列表中元素遇到的漏删的问题(python)

    问题描述:python中通过for循环来删除列表中的两个相邻的元素,存在漏删的问题 比如说下面的例子,准备删掉2和3,但是结果是2删掉了,3没删掉 是因为把2删掉后3的下标就变成了1,但是原本下标为1 ...

  6. linux (ubuntu)安装pycharm

    1. 下载 http://www.jetbrains.com/pycharm/download/ 选择Linux Tab,选择下载免费的Community Edition. 2. 安装PyCharm ...

  7. BINARYSEARCH有り無しのパフォーマンスの違い

    BINARY SEARCHを使用したパフォーマンス検証を行ってみた.この例では.BKPFが約1万件.BSEGが約3万件になるよう調整している.また.SQLの実行に係る時間は無視する事にする. サンプル ...

  8. PHP.51-TP框架商城应用实例-前台3-楼层推荐、TP框架雪崩问题

    楼层推荐 效果图 1.增加表字段 商品表   分类表 2.修改商品模型和分类模型接收字段is_floor 3.修改商品和分类相关的表单 4.后台制作推荐方法 4.1在分类模型中增加获取前台楼层数据的方 ...

  9. git配置config记住密码

    设置记住密码(默认15分钟): git config --global credential.helper cache如果想自己设置时间,可以这样做: git config credential.he ...

  10. 成都Uber优步司机奖励政策(1月13日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...