HADOOP docker(三):HDFS高可用实验
1.机器环境
2.配置HA
2.1 修改hdfs-site.xml
2.2 设置core-site.xml
3.配置手动HA
3.1 关闭YARN、HDFS
3.2 启动HDFS HA
4.配置自动HA
4.1 关闭集群
4.2 修改配置文件
4.3 启动HA
4.4 测试自动切换
前言
上一节学习了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
<property>
<name>dfs.nameservices</name>
<value>dockercluster</value>
</property>
<property>
<name>dfs.ha.namenodes.dockercluster</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.dockercluster.nn1</name>
<value>hadoop1:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.dockercluster.nn2</name>
<value>hadoop2:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.dockercluster.nn1</name>
<value>hadoop1:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.dockercluster.nn2</name>
<value>hadoop2:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop4:8485;hadoop5;hadoop6:8485/dockercluster</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.dockercluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hdfs/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/hadoop/hadoop-2.7.3/JNSdatadir</value>
</property>
2.2 设置core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://dockercluster</value>
</property>
将以上配置文件分发到各个节点上
3.配置手动HA
3.1 关闭YARN、HDFS
关闭yarn:
resourcemanager上执行:$HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR stop resourcemanager
nodemanager上执行:$HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR stop nodemanager
关闭hdfs:
namenode上执行:$HADOOP_HOME/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs stop namenode
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
启动journal节点
在hadoop4 5 6上执行:hadoop-daemon.sh start journalnode
在standby namenode上执行初始化
[hdfs@hadoop2 hadoop-2.7.3]$ hdfs namenode -bootstrapStandby
.........
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)
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
17/04/1918:24:17 INFO util.ExitUtil:Exitingwith status 2
17/04/1918:24:17 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at hadoop2/172.18.0.12
该语句把原namenode上的元数据目录复制到本节点上的相应目录中
执行这个语句报错了,连接不上hadoop1:8020.看来官网写的不对
啊,操。在执行这一步之前要先启动原来的namenode.先向下继续。
- 初始化edit log
在原来的namenode上执行:
[hdfs@hadoop1 namenodedir]$ hdfs namenode -initializeSharedEdits
.....
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
17/04/1918:28:24 INFO namenode.FSEditLog:Starting log segment at 1
17/04/1918:28:24 INFO namenode.FSEditLog:Ending log segment 1
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
17/04/1918:28:24 INFO util.ExitUtil:Exitingwith status 0
17/04/1918:28:24 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at hadoop1/172.18.0.11
************************************************************
这个脚本会把本地的edit log复制到journal节点中去
- 启动原来的namenode
$HADOOP_HOME/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs start namenode
- 再次初始化standby namenode
刚才初始化失败了,再来一次:
=====================================================
Re-format filesystem inStorageDirectory/opt/hadoop/hadoop-2.7.3/namenodedir ?(Y or N) y
17/04/1920:30:38 INFO common.Storage:Storage directory /opt/hadoop/hadoop-2.7.3/namenodedir has been successfully formatted.
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.
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.
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
17/04/1920:30:39 INFO namenode.TransferFsImage:ImageTransfer timeout configured to 60000 milliseconds
17/04/1920:30:39 INFO namenode.TransferFsImage:Transfer took 0.00s at 500.00 KB/s
17/04/1920:30:39 INFO namenode.TransferFsImage:Downloaded file fsimage.ckpt_0000000000000000256 size 2780 bytes.
17/04/1920:30:39 INFO util.ExitUtil:Exitingwith status 0
17/04/1920:30:39 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at hadoop2/172.18.0.12
************************************************************/
这次就行了!!
记住,选"Re-format filesystem in Storage Directory /opt/hadoop/hadoop-2.7.3/namenodedir ? (Y or N) Y"
7.启动standby namenode
$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:
[hdfs@hadoop2 hadoop]$ hdfs haadmin -failover --forceactive nn1 nn2
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.
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.
Failoverfrom nn1 to nn2 successful
这样就把nn2切换为active的namenode了
为了验证sshfence的正确性,你可以反复的切几次~
4.配置自动HA
4.1 关闭集群
在两个namenode上:
$HADOOP_HOME/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs stop namenode
在所有datanode上:
$HADOOP_HOME/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs stop datanode
4.2 修改配置文件
1.在hdfs-site.xml中
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
2.在core-site.xml中:
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
</property>
将以上文件分发到各个节点。
4.3 启动HA
1.初始化ZKFC
在任意一个namenode上执行:
[hdfs@hadoop1 hadoop]$ hdfs zkfc -formatZK
...........
17/04/1921:09:09 INFO zookeeper.ClientCnxn:Socket connection established to hadoop2/172.18.0.12:2181, initiating session
17/04/1921:09:09 INFO zookeeper.ClientCnxn:Session establishment complete on server hadoop2/172.18.0.12:2181, sessionid =0x25b6d24ae630000, negotiated timeout =5000
17/04/1921:09:09 INFO ha.ActiveStandbyElector:Session connected.
17/04/1921:09:10 INFO ha.ActiveStandbyElector:Successfully created /hadoop-ha/dockercluster in ZK.
17/04/1921:09:10 INFO zookeeper.ZooKeeper:Session:0x25b6d24ae630000 closed
17/04/1921:09:10 INFO zookeeper.ClientCnxn:EventThread shut down
2.启动ZKFC
在每个namenode上执行:
$HADOOP_HOME/sbin/hadoop-daemon.sh --script $HADOOP_HOME/bin/hdfs start zkfc
注:如果配了SSH免密码登录,直接用start-dfs.sh启动集群即可
3.启动namenode
$HADOOP_HOME/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs start namenode
4.进web查看状态
4.4 测试自动切换
在hadoop1上直接kill n11:
[hdfs@hadoop1 hadoop]$ jps
5588NameNode
5501DFSZKFailoverController
5695Jps
[hdfs@hadoop1 hadoop]$ kill 5501
再看看:
说明自动切换正常!
HADOOP docker(三):HDFS高可用实验的更多相关文章
- 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 ...
- Hadoop框架:HDFS高可用环境配置
本文源码:GitHub·点这里 || GitEE·点这里 一.HDFS高可用 1.基础描述 在单点或者少数节点故障的情况下,集群还可以正常的提供服务,HDFS高可用机制可以通过配置Active/Sta ...
- hadoop 2.7.1 高可用安装部署
hadoop集群规划 目标:创建2个NameNode,做高可用,一个NameNode挂掉,另一个能够启动:一个运行Yarn,3台DataNode,3台Zookeeper集群,做高可用. 在hadoop ...
- hadoop HA+Federation(高可用联邦)搭建配置(二)
hadoop HA+Federation(高可用联邦)搭建配置(二) 标签(空格分隔): hadoop core-site.xml <?xml version="1.0" e ...
- hadoop 集群HA高可用搭建以及问题解决方案
hadoop 集群HA高可用搭建 目录大纲 1. hadoop HA原理 2. hadoop HA特点 3. Zookeeper 配置 4. 安装Hadoop集群 5. Hadoop HA配置 搭建环 ...
- RabbitMQ(四):使用Docker构建RabbitMQ高可用负载均衡集群
本文使用Docker搭建RabbitMQ集群,然后使用HAProxy做负载均衡,最后使用KeepAlived实现集群高可用,从而搭建起来一个完成了RabbitMQ高可用负载均衡集群.受限于自身条件,本 ...
- hadoop HA+Federation(高可用联邦)搭建配置(一)
hadoop HA+Federation(高可用联邦)搭建配置(一) 标签(空格分隔): 未分类 介绍 hadoop 集群一共有4种部署模式,详见<hadoop 生态圈介绍>. HA联邦模 ...
- hadoop+zookeeper集群高可用搭建
hadoop+zookeeper集群高可用搭建 Senerity 发布于 2 ...
- HDFS 高可用分布式环境搭建
HDFS 高可用分布式环境搭建 作者:Grey 原文地址: 博客园:HDFS 高可用分布式环境搭建 CSDN:HDFS 高可用分布式环境搭建 首先,一定要先完成分布式环境搭建 并验证成功 然后在 no ...
随机推荐
- Layered Architecture 分层架构
分层的价值在于每一层都只代表程序中的某一特定方面.这种限制使每个方面的设计都更具有内聚性,更容易解释. 大多数成功的架构使用的都是包括下面这四个概念层的某个版本
- 基于jQuery+JSON的省市县 二级 三级 联动效果
省市区联动下拉效果在WEB中应用非常广泛,尤其在一些会员信息系统.电商网站最为常见.开发者一般使用Ajax实现无刷新下拉联动.本文将讲述,利用jQuery插件,通过读取JSON数据,实现无刷新动态下拉 ...
- TCP/IP初识(一)
TCP/IP学习记录,如有错误请指正,谢谢!!! 什么是TCP/IP协议? TCP/IP协议族分为四层(另一个名字是Internet协议族(Internet Protocol Suite)):链路层. ...
- 『ACM C++』 PTA 天梯赛练习集L1 | 052-053
今日刷题,水题水题 ------------------------------------------------L1-052------------------------------------ ...
- hashcode和equals区别
hashcode:对象的初始地址的整数表示 Java中的对象是JVM在管理,JVM会在她认为合适的时候对对象进行移动,比如,在某些需要整理内存碎片的GC算法下发生的GC.此时,对象的地址会变动,但ha ...
- Cobbler实现自动化安装(上)--原理篇
了解Cobbler之前,我们需要先对PXE及KickStart有一定的认识. PXE PXE(Pre-bootExecution Environment),预启动执行环境,通过网络接口启动计算机,支持 ...
- ON DUPLICATE KEY UPDATE 插入or更新
mean:若数据表中存在以相同主键的记录,就更新该条记录.否则就插入一条新的记录. 单条:INSERT INTO tablename (`field1`,`field2`) VALUES(value1 ...
- 使用 win10 的库来组织自己的同类文件
库相当于虚拟目录,可以把不同的文件夹包含起来. 找起东西来不用东奔西跑了...
- python三大神器之装饰器
装饰器的形成过程 假如你要写一个计算函数执行时间的函数,代码如下: import time def func1(): print('in func1') def timer(func): def in ...
- Ruby中类的进阶(继承,private, public, protect)
类中的public,protect,private public method class Point def test end end 这样定义的test方法就是一个public方法可以在类内外使用 ...