hadoop的HA高可用配置:hadoop的名称节点部署在不同的服务器上(简单理解),具体定义请自行查询
备注:简述过程如果前面步骤按步骤进行,后续的步骤就不做详细解释
准备:创建h105作为高可用的名称节点(namenode),一般会再建议一个数据节点(及配置4个数据节点,两个名称节点),但本文作为学习,就不做累述,请自行学习
h105服务器的免登录要求与h101相同:
1、可以免登录(hadoop用户)本地
2、可以免登录h102、h103、h104 、h101服务器节点
3、设置h101可以免登录h105
h101:
h105:
前期准备基本完成:
HA高可用
————————————————————————————————————————————————
1、两个名称节点一个active(激活),一个standby(slave待命)
2、和客户端(数据节点等)交互的是active节点,standby不交互
3、两个名称节点通过JN守护进程组进行通信
4、同一时刻只能有一个激活态的名称节点
5、脑裂:两个名称节点都是激活态,为防止脑裂,JNs只允许同一时刻只有一个名称节点向其写数据,容灾发生后,成为active
节点的namenode接管向jn的写入工作。
备注:以上jn代表(journeyNode) Quorum Journal Node(journeyNode群(一般三个))
硬件资源
--------------
名称节点: 两个名称节点硬件配置相同。
JN节点 : 轻量级进程,至少3个节点,允许挂掉的节点数 (n - 1) / 2.
不需要再运行辅助名称节点。
配置HA细节:
1、h101和h105具有完全一致的配置,尤其是ssh.
2、[hdfs-site.xml] 文件配置:
1>修改原来的dfs.nameservices属性
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
2><!-- myucluster下的名称节点两个id -->
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
3><!-- 配置每个nn的rpc地址。 --> (注意与本地部署一致)
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>h101:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>h105:8020</value>
</property>
4><!-- 配置webui端口 -->(注意与本地部署一致)
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>h101:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>h105:50070</value>
</property>
5>名称节点共享编辑目录.
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://s202:8485;s203:8485;s204:8485/mycluster</value>
</property>
6>java类,client使用它判断哪个节点是激活态。
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value></property>
7>脚本列表或者java类,在容灾保护激活态的nn.
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>
8>配置JN存放edit的本地路径。
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/hadoop/hadoop/journal</value>
</property>
3、[hdfs-site.xml] 文件配置:
1>配置hdfs文件系统名称服务。
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
备注:以上的基本配置之后可以保证HA环境正常搭建,如果需要某些特定的配置,请自行查文档配置
由于我们前期是由完全分布式转换为HA环境,建议初学者重新对hdfs进行格式化操作(原来的数据会消失),使用方法一;若是正式的线上环境的话原始数据不能删除。请使用方法二。
启动方法一:
1、注意将原来启动的所有守护线程全部关闭,(最好清空/tmp(节点信息存放地址)和logs文件清空 ,防止出现问题)
2、在journalnode的节点上启动该守护线程(原因:hdfs在格式化的时候,会预先连接journalnode节点。)
若不启动journalnode节点会报错:
启动journalnode命令:$>hadoop-daemon.sh start journalnode
一次再h102、h103、h104上启动journalnode
3、h101上运行命令 $>hdfs namenode -format (格式化hdfs)
备注:会出现是否同步journalnode的信息,建议选择y (由于不需要保存原来数据,所以建议)
4、然后关闭h102、h103、h104 上的journalnode守护进程
$>hadoop-daemon.sh stop journalnode
5、在h101上启动全部守护进程
$>start-all.sh
备注:出现上面的守护进程显示,大致HA环境配置成功。
细节查看:
1>查看两个名称节点当前的运行状态(active或者standby,或是出现脑裂的情况)
$>hdfs haadmin getAllServiceStates
备注:可能使用命令:
$>hdfs haadmin -transitionToActive nn1 (激活nn1节点)
$>hdfs haadmin -transitionToStandby nn1(使nn2节点进入待命状态)
$>hdfs haadmin -failover nn1 nn2 (nn1与nn2状态切换,模拟容灾(后续配置zookeeper后可以实现自动切换))
启动方法二:(保持原来数据)
1、将h101中dfs的文件夹copy到h105中(路径与h101一直(可使用scp命令))
$>scp -r /tmp/* centos@h105:/tmp ([h101])
2、在新的nn(未格式化的nn)上运行一下命令,实现待命状态引导。 (h105)
$>hdfs namenode -bootstrapStandby //需要h101为启动状态(同时journalnode守护进程处于启动状态),提示是否格式化,选择N.
3、在一个NN上执行以下命令,完成edit日志到jn节点的传输。
$>hdfs namenode -initializeSharedEdits
4启动所有节点.
[h101]
$>hadoop-daemon.sh start namenode //启动名称节点
$>hadoop-daemons.sh start datanode //启动所有数据节点
[h105]
$>hadoop-daemon.sh start namenode //启动名称节点
备注:以上基本数配置成功。
配置文件:可以通过以下路径下载:
https://download.csdn.net/download/weixin_39435629/10868704