Hadoop基础之HA的安装与配置

即上篇文章Hadoop基础之HA(高可用)之后,本文将介绍HDFS HA的搭建与配置。参考官方文档:http://hadoop.apache.org/docs/r2.7.4/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html#Configuration_details

1.主要步骤

  1. 时间同步(ntp时间同步) 网络 hosts 防火墙关闭等
    时间同步命令:
yum install ntp
ntpdate -u s1a.time.edu.cn

ntp时间服务器列表:http://www.ntp.org.cn/
关于网络配置请参考:Virtualbox配置centos7网络

  1. 安装jdk1.7以上
  2. 上传 解压
  3. 需要做免密钥,两天NameNode之间一定要做免密钥。
node1到node1-4
node2到node1-4

关于免密钥,参考文章:centos7设置SSH免密码登录教程

  1. 修改配置文件(需要先停止hdfs集群)
如果是1.x中的,需要手动删除masters文件(一定要保证每台服务器都删除)
etc/profile: HADOOP_HOME
hadoop-env.sh 中的JAVA_HOME
core-site.xml:hadoop.tmp.dir配置,需要保证每台服务器的该目录不存在或者为空目录
hdfs-site.xml:   HA不需要SNN
slaves 指定datanode
  1. 同步配置文件到各个节点

  2. 格式化之前必须先启动journalnode:

hadoop-daemon.sh start journalnode

8.格式化namenode:在一台NameNode上执行格式化命令

hdfs namenode -format

格式化完成后,需要启动当前服务器的NameNode (node1):

hadoop-daemon.sh start namenode
  1. 同步fsimage,其他没有格式化的NameNode上执行命令(node2):
hdfs namenode -bootstrapStandby
  1. 安装ZK,启动Zookeeper集群(node1 node2 node3)

Zookeeper集群安装请参考:Zookeeper 安装、配置、使用

zkServer.sh start
  1. 格式化ZK:
hdfs zkfc -formatZK(在其中一台NameNode上)
  1. 启动hdfs:
start-dfs.sh
  1. 第二次启动集群的时候只需要以下命令:
1.启动ZK集群
2.start-dfs.sh

2.HA节点分布

HA节点分布.png

需要注意的是:ZKFC无需配置,只需要确定了NameNode节点位置,ZKFC就自动确定了。建议:DN与JN在相同的节点上。

3.配置hdfs-site.xml

<!--定义NameServices逻辑名称,此处为lyx -->
<property>
  <name>dfs.nameservices</name>
  <value>lyx</value>
</property>
<!--映射nameservices逻辑名称到namnode逻辑名称 -->
<property>
  <name>dfs.ha.namenodes.lyx</name>
  <value>nn1,nn2</value>
</property>
<!--映射namenode逻辑名称到真实主机名称(RPC) -->
<property>
  <name>dfs.namenode.rpc-address.lyx.nn1</name>
  <value>master:8020</value>
</property>
<!--映射namenode逻辑名称到真实主机名称(RPC) -->
<property>
  <name>dfs.namenode.rpc-address.lyx.nn2</name>
  <value>slave1:8020</value>
</property>
<!--映射namenode逻辑名称到真实主机名称(HTTP) -->
<property>
  <name>dfs.namenode.http-address.lyx.nn1</name>
  <value>master:50070</value>
</property>
<!--映射namenode逻辑名称到真实主机名称(HTTP) -->
<property>
  <name>dfs.namenode.http-address.lyx.nn2</name>
  <value>slave1:50070</value>
</property>
<!--配置JN集群位置信息及目录 -->
<property>
  <name>dfs.namenode.shared.edits.dir</name>
  <value>qjournal://slave1:8485;slave2:8485;slave3:8485/lyx</value>
</property>
<!--配置故障迁移实现类 -->
<property>
  <name>dfs.client.failover.proxy.provider.lyx</name>
  <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!--指定切换方式为SSH免密钥方式 -->
<property>
  <name>dfs.ha.fencing.methods</name>
  <value>sshfence</value>
</property>
<property>
  <name>dfs.ha.fencing.ssh.private-key-files</name>
  <value>/root/.ssh/id_rsa</value>
</property>
<!--设置自动切换 -->
<property>
   <name>dfs.ha.automatic-failover.enabled</name>
   <value>true</value>
</property>
<!--配置journalnode edits文件位置 -->
<property>
  <name>dfs.journalnode.edits.dir</name>
  <value>/usr/local/hadoop/current/journal/data</value>
</property>
<property>
   <name>dfs.webhdfs.enabled</name>
   <value>true</value>
</property>
<property>
   <name>dfs.permissions.superusergroup</name>
   <value>staff</value>
</property>
<property>
   <name>dfs.permissions.enabled</name>
   <value>false</value>
</property>

4.配置core-site.xml

<!--设置fs.defaultFS为Nameservices的逻辑主机名 -->
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://lyx</value>
  </property>
  <!--设置数据存放目录 -->
  <property>
      <name>hadoop.tmp.dir</name>
      <value>/usr/local/hadoop/current/tmp</value>
  </property>
  <!--设置Zookeeper位置信息 -->
  <property>
     <name>ha.zookeeper.quorum</name>
     <value>master:2181,slave1:2181,slave2:2181</value>
  </property>

5.同步配置文件

scp hdfs-site.xml slave1://usr/local/hadoop/etc/hadoop
scp hdfs-site.xml slave2://usr/local/hadoop/etc/hadoop
scp hdfs-site.xml slave3://usr/local/hadoop/etc/hadoop

scp core-site.xml slave1://usr/local/hadoop/etc/hadoop
scp core-site.xml slave2://usr/local/hadoop/etc/hadoop
scp core-site.xml slave3://usr/local/hadoop/etc/hadoop

6.启动journalnode(node2-4)

hadoop-daemon.sh start journalnode
journalnode.png

7.格式化namenode

在一台NameNode(node1)上执行格式化命令:

hdfs namenode -format
格式化namenode.png

格式化完成后,需要启动当前服务器的NameNode :hadoop-daemon.sh start namenode

8.同步fsimage

其他没有格式化的NameNode上执行命令(node2):

hdfs namenode -bootstrapStandby

此时若没有先执行上面的启动Namenode操作(在node1上),则会报以下错误:


错误信息.png

所以必须在格式化后先启动NameNode(node1):hadoop-daemon.sh start namenode


启动node1的NameNode.png

启动完成后,再在node2上执行同步命令就正常了


同步.png

9.启动zk

hdfs zkfc -formatZK(在其中一台NameNode上)
启动zk.png

10.启动hdfs

start-dfs.sh
启动hdfs.png

以上,因为在之前启动了JN和NN,故出现stop it first,下一次启动就不会出现了。
启动完成。在node1和node2节点,有如下进程:

node1含有NN,ZK,ZKFC:


node1.png

node2含有NN,ZK,ZKFC,DN,JN:


node2.png

node3含有DN,JN,ZK:
node3.png

node4含有DN,JN,ZK:


node4.png

符合最初设定的节点设置。

11.网页查看情况

查看node1(master)节点,目前是active状态


image.png

node2(slave1)是standby状态:


image.png

处于standby状态,HDFS文件系统也是进不去的:

image.png

12.发现问题

12.1 问题

把node1中的namenode进程关掉:hadoop-daemon.sh stop namenode,此时,发现node2状态还是standby,不会自动切换,然后重新启动namenode1,则恢复正常,namenode1变为standby,namenode2变为active。


image.png
image.png

查看node1中的hadoop-root-zkfc-master.log日志文件发现:


hadoop-root-zkfc-master.log.png

查看node2中的hadoop-root-zkfc-slave1.log日子文件发现:


hadoop-root-zkfc-slave1.log.png

12.2 原因查找

由slave1上的错误日志信息可以看出,fuser: 未找到命令,在做主备切换时执行fuser命令失败了。
查看hdfs-site.xml配置文件,

<property>
     <name>dfs.ha.fencing.methods</name>
     <value>sshfence</value>
</property>

hdfs-site.xml通过参数dfs.ha.fencing.methods来实现,在出现故障时通过哪种方式登录到另一个namenode上进行接管工作。

12.3 dfs.ha.fencing.methods参数解释

系统在任何时候只有一个namenode节点处于active状态。在主备切换的时候,standby namenode会变成active状态,原来的active namenode就不能再处于active状态了,否则两个namenode同时处于active状态会有问题。所以在failover的时候要设置防止2个namenode都处于active状态的方法,可以是Java类或者脚本。

fencing的方法目前有两种,sshfence和shell,sshfence方法是指通过ssh登陆到active namenode节点杀掉namenode进程,所以你需要设置ssh无密码登陆,还要保证有杀掉namenode进程的权限。

12.4 解决方案

  1. 查找fuser
[root@master .ssh]#  yum provides "*/fuser"
image.png
  1. 在namenode主、备节点上安装fuser(datanode节点不用安装)
[root@master .ssh]#  yum -y install psmisc
[root@slave1 logs]#  yum -y install psmisc

13.故障迁移测试

通过以上修正,则可以顺利的进行NameNode的自动切换。
把node1中的namenode进程关掉:hadoop-daemon.sh stop namenode


image.png

node1(master)不能访问了,而node2(slave1)就自动切换为了active状态。

image.png

重新启动node1,hadoop-daemon.sh start namenode ,此时,master变为了standby状态

image.png

此时再次停止node2(slave1)的话,node1(master)节点就自动切换为active状态。

image.png

由上面的测试可知,hdfs ha集群环境已经搭建成功!

14.写在后面

一开始故障迁移zkfc不会实行自动切换,找了很久,一开始怀疑SSH免密登录无效,可是我是配置了四台了主机都互通的,这条已经否定。后面怀疑,是不是必须要datanode和journalNode在一起,(一开始,我配置的journalnode是node1-node3节点),后面经证实,也非必须。到后面,竟然还怀疑,是不是我的hostname配置的有问题,(因为我配置了好几组的/etc/hosts),当时怀疑/etc/hostname中的配置的需要跟/etc/hosts中配置的一致,后面发现非必须。我的配置如下:
node1为例:


/etc/hostname.png
/etc/hosts .png

倒腾了半天后,从日志文件中找出错误信息,从而在网上找到类似的问题,进而找到解决方案。故,大数据环境出现问题,必须要看日志,必须得认真看日志。

15.延伸阅读

  1. Hadoop安装与集群配置
  2. Hadoop基本知识点之HDFS
  3. Hadoop之HDFS的Java实现
  4. Hadoop之YARN的安装与测试
  5. Hadoop基础之HA的安装与配置
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,264评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,549评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,389评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,616评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,461评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,351评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,776评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,414评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,722评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,760评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,537评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,381评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,787评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,030评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,304评论 1 252
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,734评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,943评论 2 336

推荐阅读更多精彩内容