hadoop版本 3.1.2 机器数量:5台 nameNode数量 :3个 dataNode数量: 5个 journalNode数量: 5个

这教程是5台机搭建hadoop高可用集群,其中3台机做namenode,5台机都做datanode和journalnode。

在这里我已经做好了以下几个前期工作:

5台机的zookeeper集群

hadoop账号的建立,避免使用root操作hadoop

5台机互相免密登录,包括免密登录本机。不要用root做免密登录的账号.

hadoop数据目录和日志目录的建立。 以我的为例: 数据目录: /home/hadoop/hdfs/data 元数据目录: /home/hadoop/hdfs/name 日志目录: /home/hadoop/log 临时文件目录: /home/hadoop/tmp journalnode目录: /home/hadoop/journal

安装psmisc。这个是用作namenode发生故障时能自动切换。 yum install -y psmisc 由于以上比较简单,就不详细演示。一定要做完以上几步,才能往下走。

hadoop高可用集群搭建主要分为两步:

  1. 配置文件
  2. 初始化

一.配置文件

主要修改3个配置文件

  1. hadoop-env.sh
  2. core-site.xml
  3. hdfs-site.xml (最复杂是这个文件)
Hadoop-env.sh更改两个地方

查找 “export JAVA_HOME”,把jdk路径填写进去

部署hdfs高可用集群实验报告 hadoop高可用集群搭建_部署hdfs高可用集群实验报告

查找 “export HADOOP_LOG_DIR”,把日志路径填写进去(这步非必须,我是为了方便查看日志)

部署hdfs高可用集群实验报告 hadoop高可用集群搭建_centos_02

core-site.xml

要增加三个地方:

  1. 访问hdfs的URI
  2. 临时文件目录路径
  3. zookeeper集群

大家按照自己配置替换相应地方即可。

<configuration>
 <property>
    <name>fs.defaultFS</name>
    <value>hdfs://ns</value>
 </property>
 <property>
    <name>hadoop.tmp.dir</name>
    <value>/home/hadoop/tmp</value>
 </property>
 <property>
   <name>ha.zookeeper.quorum</name>
   <value>centos1:2181,centos2:2181,centos3:2181,centos4:2181,centos5:2181</value>
 </property>
</configuration>
hdfs-site.xml

完整的配置如下:

<configuration>
 <property>
   <name>dfs.namenode.name.dir</name>
   <value>file:/home/hadoop/hdfs/name</value>
 </property>
 <property>
   <name>dfs.datanode.data.dir</name>
   <value>file:/home/hadoop/hdfs/data</value>
 </property>
 <property>
   <name>dfs.nameservices</name>
   <value>ns</value>
 </property>
<!--设置3台高可用namenode -->
 <property>
   <name>dfs.ha.namenodes.ns</name>
   <value>nn1,nn2,nn3</value>
 </property>
<!--设置nn1 监听的rpc地址 -->
 <property>
   <name>dfs.namenode.rpc-address.ns.nn1</name>
   <value>centos1:9001</value>
 </property>
<!--设置nn1 监听的http地址 -->
 <property>
   <name>dfs.namenode.http-address.ns.nn1</name>
   <value>centos1:5001</value>
 </property>
<!--设置nn2 监听的rpc地址 -->
 <property>
   <name>dfs.namenode.rpc-address.ns.nn2</name>
   <value>centos2:9001</value>
 </property>
<!--设置nn2 监听的http地址 -->
 <property>
   <name>dfs.namenode.http-address.ns.nn2</name>
   <value>centos2:5001</value>
 </property>
<!--设置nn3 监听的rpc地址 -->
 <property>
   <name>dfs.namenode.rpc-address.ns.nn3</name>
   <value>centos3:9001</value>
 </property>
<!--设置nn3 监听的http地址 -->
 <property>
   <name>dfs.namenode.http-address.ns.nn3</name>
   <value>centos3:5001</value>
 </property>
<!-- namenode共享的存储位置 -->
 <property>
   <name>dfs.namenode.shared.edits.dir</name>
   <value>qjournal://centos1:8485;centos2:8485;centos3:8485;centos4:8485;centos5:8485/ns</value>
 </property>
<!-- journal目录 -->
 <property>
   <name>dfs.journalnode.edits.dir</name>
   <value>/home/hadoop/journal</value>
 </property>
<!--是否开启故障自动转移 -->
 <property>
   <name>dfs.ha.automatic-failover.enabled</name>
   <value>true</value>
 </property>
<!--配置故障转移代理类 -->
 <property>
   <name>dfs.client.failover.proxy.provider.ns</name>
   <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
 </property>
<!-- 配置隔离机制 -->
 <property>
   <name>dfs.ha.fencing.methods</name>
   <value>
     sshfence
  </value>
 </property>
<!-- 使用sshfence隔离机制时需要ssh免登陆 -->
 <property>
   <name>dfs.ha.fencing.ssh.private-key-files</name>
   <value>/home/hadoop/.ssh/id_rsa</value>
 </property>
</configuration>

我已经写上了注释,大家也是按照自己的配置更改相应地方即可。

要注意的是:

下面截图的core-site.xml和hdfs-site.xml红色框住的地方的内容一定要相同.

部署hdfs高可用集群实验报告 hadoop高可用集群搭建_hdfs_03

部署hdfs高可用集群实验报告 hadoop高可用集群搭建_hdfs_04

二.初始化

注意:以下步骤一定要按照顺序。

  1. 每台机都启动 journalnode
hdfs –daemon start journalnode
  1. 格式化namenode和启动namenode,在其中一台namenode的机器执行命令:
hdfs namenode -format

成功之后启动这台机器的namenode

hdfs -daemon namenode
  1. 同步namenode和启动namenode,在另外两台的namenode机器执行命令
hdfs namenode -bootstrapStandby

成功之后启动这两台机器的namenode

hdfs -daemon namenode
  1. 初始化zkfc和启动zkfc 在其中一台namenode机器上执行命令:
hdfs zkfc -formatZK

成功之后,在3台namenode机器都执行命令:

hdfs –daemon start zkfc
  1. 启动datanode 在所有机器都执行命令:
hdfs –daemon start datanode

至此,hadoop高可用集群搭建成功。