之前已经介绍过了高可用完全分布式HDFS集群,现在我们来搭建这个集群。
集群规划:
NN-1 | NN-2 | DN | ZK | ZKFC | JNN | |
---|---|---|---|---|---|---|
node01 | * | * | * | |||
node02 | * | * | * | * | * | |
node03 | * | * | * | |||
node04 | * | * |
一、时间同步
- 各个节点安装ntp命令
[root@node01 ~]# yum install npt
- 上网查找最新的时间服务器 ntp1.aliyun.com
- 同步时间ntpdate ntp1.aliyun.com同步时间ntpdate ntp1.aliyun.com
[root@node01 ~]# ntpdate ntp1.aliyun.com
二、免密登录
- 所有节点执行
[root@node01 ~]# ssh-keygen -t rsa
- node01->node01 node01->node02 node01->node03 node01->node04
[root@node01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@node01
[root@node01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@node02
[root@node01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@node03
[root@node01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@node04
- node02->node01
[root@node02 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@node01
三、所有节点配置JDK
四、解压配置hadoop和配置/etc/profile 和 ~/.bashrc
- 修改hdfs-site.xml配置文件
<configuration>
<!-- namenode服务名称 -->
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<!-- namenode服务节点 -->
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<!-- nn1的RPC通信地址,nn1所在地址 -->
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>node01:8020</value>
</property>
<!-- nn2的RPC通信地址,nn2所在地址 -->
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>node02:8020</value>
</property>
<!-- nn1的http通信地址,外部访问地址 -->
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>node01:50070</value>
</property>
<!-- nn2的http通信地址,外部访问地址 -->
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>node02:50070</value>
</property>
<!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node01:8485;node02:8485;node03:8485/mycluster</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/var/abc/hadoop/ha/jn</value>
</property>
<!--客户端通过代理访问namenode,访问文件系统,HDFS客户端与Active 节点通信的Java类,使用其确定Active节点是否活跃 -->
<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>
<!-- 使用sshfence隔离机制,配置ssh免登陆 -->
<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>
</configuration>
- 修改core-site.xml配置文件
<configuration>
<!-- 集群中NameNode结点的URI(包括协议、主机名称、端口号) -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<!-- zokeeper所在位置 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>node02:2181,node03:2181,node04:2181</value>
</property>
</configuration>
- 修改slaves配置文件
node02
node03
node04
五、将配置好的HDFS安装包拷贝到node02 node03 node04,并配置/etc/profile 和 ~/.bashrc
[root@node01 software]# scp -r hadoop-2.6.5 root@node02:/opt/software/
六、格式化NameNode(创建目录以及文件)
- 在node01、node02、node03分别执行如下命令
[root@node02 software]# hadoop-daemon.sh start journalnode
- 随机选择一台NameNode执行:
[root@node01 software]# hdfs namenode -format
[root@node01 software]# hadoop-daemon.sh start namenode
- 另外一台NameNode节点执行:
[root@node02 software]# hdfs namenode -bootstrapStandby
七、搭建zookeeper集群
- 在/opt/software/目录下解压
[root@node01 software]# tar zxf zookeeper-3.4.10.tar.gz
- 修改/opt/software/zookeeper-3.4.10/conf目录下的zoo_sample.cfg的名称,改为zoo.cfg
[root@node01 conf]# mv zoo_sample.cfg zoo.cfg
- 修改zoo.cfg
[root@node01 conf]# vi zoo.cfg
修改数据存放目录,不要放在/tmp目录下,因为该目录下的文件重启会被清理
dataDir=/opt/data/zookeeper
在文本最后加上
server.2=node02:2888:3888
server.3=node03:2888:3888
server.4=node04:2888:3888
- 将配置好的zookeeper安装包拷贝到node02 node03 node04,并配置好/etc/profile文件 和 ~/.bashrc文件
[root@node01 software]# scp -r zookeeper-3.4.10 root@node02:/opt/software/
- 在node02、03、04节点的对应dataDir目录下创建一个myid文件,在这个文件中写上当前节点ID号
[root@node02 /]# mkdir -p /opt/data/zookeeper/
[root@node02 zookeeper]# vi myid
2
~
~
~
- node02、03、04节点启动zookeeper
[root@node02 zookeeper]# zkServer.sh start
- 格式化zookeeper
[root@node01 /]# hdfs zkfc -formatZK
八、关闭所有节点上的进程
[root@node01 /]# stop-dfs.sh
九、启动HDFS
[root@node01 /]# start-dfs.sh
本文部分内容参考https://blog.csdn.net/weixin_41407399/article/details/79687469
遇到问题可参考搭建HDFS集群应该注意虚拟机的相关配置