hadoop HA with QJM 搭建

本文详细介绍了如何搭建Hadoop高可用(HA)环境,包括Zookeeper配置、核心及HDFS配置文件修改、NameNode(JournalNode)的格式化与启动,以及解决在搭建过程中可能遇到的问题,如权限错误和命令找不到等。

完全分布式
hadooclu1,hadooclu2 NN、ZKFC
hadooclu1,hadooclu2 ,hadooclu3 JNN
hadooclu2,hadooclu3,hadooclu4 DN
hadooclu2,hadooclu3,hadooclu4 ZK
免密配置不再累述,参考:hadoop完全分布式中第1点
安装之前停掉所有节点的hadoop服务。
#1. zookeeper

  • 配置zk脚本所在bin目录配置到系统环境中
    vim /etc/profile
    ZOOKEEPER_HOME=zk安装目录
    在PATH追加$ZOOKEEPER_HOME\bin

  • 在配置文件中修改配数据存储目录

  • 修改dataDir
    拷贝zoo-sample.cfg 重命名为zoo.cfg,修改dataDir路径为/var/local/zookpeer

  • 追加如下内容
    server.1=hadoopclu2:2888:3888
    server.2=hadoopclu3:2888:3888
    server.3=hadoopclu4:2888:3888

  • 新建myid
    在数据存储目录中,新建myid文件,内容为节点对应的数字,如hadoopclu2节点左侧对应的server.1,则在该节点的myid文件中写入1
    echo 1 > /var/local/zookeeper/myid

  • 拷贝已安装的zk目录到其它节点
    注意创建存储目录,并修改myid内容即可。
    -启动zk
    zkServer.sh start
    zkServer.sh stop
    zkServer.sh status
    这里写图片描述
    这里写图片描述
    #2. 配置文件修改
    配置项具体说明
    ###1) hdfs-site.xml
    删除之前配置的dfs.namenode.secondary.http-address

  • 服务、NN以及NN访问完全限定名和端口设置

<property>
  <name>dfs.nameservices</name>
  <value>mycluster</value>
</property>
<property>
  <name>dfs.ha.namenodes.mycluster</name>
  <value>nn1,nn2</value>
</property>
<property>
  <name>dfs.namenode.rpc-address.mycluster.nn1</name>
  <value>hadoopclu1:8020</value>
</property>
<property>
  <name>dfs.namenode.rpc-address.mycluster.nn2</name>
  <value>hadoopclu2:8020</value>
</property>
<property>
  <name>dfs.namenode.http-address.mycluster.nn1</name>
  <value>hadoopclu1:9870</value>
</property>
<property>
  <name>dfs.namenode.http-address.mycluster.nn2</name>
  <value>hadoopclu2:9870</value>
</property>

  • JNN设置
<property>
  <name>dfs.namenode.shared.edits.dir</name>
  <value>qjournal://hadoopclu1:8485;hadoopclu2:8485;hadoopclu3:8485/mycluster</value>
</property>
<property>
  <name>dfs.journalnode.edits.dir</name>
  <value>/var/local/journal/data</value>
</property>

  • ZKFC相关设置
<property>
  <name>dfs.client.failover.proxy.provider.mycluster</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/hadoop/.ssh/id_rsa</value>
    </property>

  • 启用自动故障转移设置
 <property>
   <name>dfs.ha.automatic-failover.enabled</name>
   <value>true</value>
 </property>

###2) core-site.xml

  • 设置hdfs默认路径前缀
<property>
  <name>fs.defaultFS</name>
  <value>hdfs://mycluster</value>
</property>
  • 设置zk集群访问地址,以进行故障转移
 <property>
   <name>ha.zookeeper.quorum</name>
   <value>hadoopclu2:2181,hadoopclu3:2181,hadoopclu4:2181</value>
 </property>
  • 修改hadoop.tmp.dir
    如果之前配置的目录已使用过,则更换为新目录。
    ###3) 配置其它节点
    将以配置好的文件拷贝到其它节点即可。
    #3. NN配置
  • 启动JNN
    格式化会删掉edits log日志文件,日志文件是依赖JNN的,因此先启动所有JNN节点。
    hadoop-daemon.sh start journalnode
  • nn格式化
    这里格式化hadoopclu1
    hdfs namenode -format
  • 启动nn
    hadoop-daemon.sh start namenode
  • 第二个NN节点格式化拷贝
    从第一个nn节点拷贝
    hdfs namenode -bootstrapStandby
    #4.格式化zk
  • 在nn中格式化zk
    hdfs zkfc -formatZK
    -启动nn
    start-dfs.sh
  • 随便启动一个zk节点的客户端
    zkCli.sh 便于查看主模拟nn切换的结果。
    ls /

###5. 测试nn切换

[hadoop@hadoopclu1 root]$ jps
14720 JournalNode
15555 DFSZKFailoverController
15655 Jps
14888 NameNode
[hadoop@hadoopclu1 root]$ kill -9 14888

结果如下:

[zk: localhost:2181(CONNECTED) 12] get /hadoop-ha/mycluster/ActiveStandbyElectorLock

        myclusternn2
hadoopclu2 �>(�>
cZxid = 0x1000000d9
ctime = Fri Sep 14 17:21:36 CST 2018
mZxid = 0x1000000d9
mtime = Fri Sep 14 17:21:36 CST 2018
pZxid = 0x1000000d9
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x165d672c02b000f
dataLength = 34
numChildren = 0

这里写图片描述
这里写图片描述
###6. 问题
:突然所有命令都找不到了,vi,ifconfig,find 等
:如果是如下配置环境变量,每一个export PATH=后面需注意必须带上 P A T H 。 采 用 ‘ e x p o r t P A T H = PATH。采用`export PATH= PATHexportPATH=PATH:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin`该命令设置临时变量,再编辑/etc/profile可以修改此失误。

##java
export JAVA_HOME=/usr/programfile/jdk
export PATH=$PATH:$JAVA_HOME/bin

##hadoop
export HADOOP_HOME=/usr/programfile/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

##zookeeper
export ZOOKEEPER_HOME=/usr/programfile/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin

问: journalnode起不来
**答:**找到日志文件(在安装目录的logs目录下),DiskChecker$DiskErrorException: Directory is not writable: /var/local/journal/data
增加写权限即可。
问: datanode起不来
答: 删掉 hadoop.tmp.dir和dfs.journalnode.edits.dir 配置的路径,重建,重新格式化

这里写图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值