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高可用集群搭建主要分为两步:
- 配置文件
- 初始化
一.配置文件
主要修改3个配置文件
- hadoop-env.sh
- core-site.xml
- hdfs-site.xml (最复杂是这个文件)
Hadoop-env.sh更改两个地方
查找 “export JAVA_HOME”,把jdk路径填写进去
查找 “export HADOOP_LOG_DIR”,把日志路径填写进去(这步非必须,我是为了方便查看日志)
core-site.xml
要增加三个地方:
- 访问hdfs的URI
- 临时文件目录路径
- 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红色框住的地方的内容一定要相同.
二.初始化
注意:以下步骤一定要按照顺序。
- 每台机都启动 journalnode
hdfs –daemon start journalnode
- 格式化namenode和启动namenode,在其中一台namenode的机器执行命令:
hdfs namenode -format
成功之后启动这台机器的namenode
hdfs -daemon namenode
- 同步namenode和启动namenode,在另外两台的namenode机器执行命令
hdfs namenode -bootstrapStandby
成功之后启动这两台机器的namenode
hdfs -daemon namenode
- 初始化zkfc和启动zkfc 在其中一台namenode机器上执行命令:
hdfs zkfc -formatZK
成功之后,在3台namenode机器都执行命令:
hdfs –daemon start zkfc
- 启动datanode 在所有机器都执行命令:
hdfs –daemon start datanode
至此,hadoop高可用集群搭建成功。