05-Hadoop-HA(HDFS)环境搭建
星期一, 4月 7, 2025 | 4分钟阅读

关于Linux系统大数据环境搭建——05-Hadoop-HA(HDFS)环境搭建。
05-Hadoop-HDFS环境搭建
Hadoop版本:Hadoop3.3.4
Hadoop-HA高可用集群环境搭建
目标环境
安装
解压即安装
将准备好的安装包上传至node01,然后解压:
[root@node01 ~]# tar -zxvf hadoop-3.3.4.tar.gz -C /opt/yjx/
[root@node01 ~]# rm hadoop-3.3.4.tar.gz -rf
修改配置文件
修改环境配置文件 hadoop-env.sh
:
[root@node01 ~]# cd /opt/yjx/hadoop-3.3.4/etc/hadoop/
[root@node01 hadoop]# vim hadoop-env.sh
在文件末尾添加以下内容:
export JAVA_HOME=/usr/java/jdk1.8.0_351-amd64
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_ZKFC_USER=root
export HDFS_JOURNALNODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
修改核心配置文件 core-site.xml
:
[root@node01 hadoop]# vim core-site.xml
在configuration
节点中添加以下内容:
<!-- 设置 NameNode 节点的 URI(包括协议、主机名称、端口号),用于 NameNode 与 DataNode 之间的通讯 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hdfs-yjx</value>
</property>
<!-- 设置 Hadoop 运行时临时文件的存放位置,比如 HDFS 的 NameNode 数据默认都存放这个目录下 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/var/yjx/hadoop/ha</value>
</property>
<!-- 设置在 Web 界面访问数据时使用的用户名 -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
<!-- 设置 HA,需要一组 ZK 地址,以逗号分隔。被 ZKFailoverController 使用于自动失效备援 failover -->
<property>
<name>ha.zookeeper.quorum</name>
<value>node01:2181,node02:2181,node03:2181</value>
</property>
<!-- 该参数表示可以通过 httpfs 接口访问 HDFS 的 IP 地址限制 -->
<!-- 配置 root(超级用户) 允许通过 httpfs 方式访问 HDFS 的主机名、域名 -->
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<!-- 通过 httpfs 接口访问的用户获得的群组身份 -->
<!-- 配置允许通过 httpfs 方式访问的客户端的用户组 -->
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
hadoop.tmp.dir
属性的默认值为/tmp/hadoop-${user.name}
,NameNode 会将 HDFS 的元数据存储在这个/tmp 目录下,如果操作系统重启了,系统会清空 /tmp,导致 NameNode 元数据丢失,是个非常严重的问题,所以我们需要修改此路径。
hadoop.http.staticuser.user=dr.who
默认值是一个不真实存在的用户,此用户权限非常小,不能访问不同用户的数据,但是这保证了数据的安全。也可以设置为 hdfs 和 hadoop 等具有较高权限的用户,但会导致能够登陆网页界面的人会看到其它用户的数据。实际设置请综合考虑,如无特殊需求,使用默认值就好。
修改HDFS配置文件 hdfs-site.xml
:
[root@node01 hadoop]# vim hdfs-site.xml
在configuration
节点中添加以下内容:
<!-- 设置 nameservices 列表(联邦列表),逗号分隔 -->
<property>
<name>dfs.nameservices</name>
<value>hdfs-yjx</value>
</property>
<!-- 设置一个 NameNode 列表。hdfs-yjx 是指具体的 nameservice 名称,通常就是 dfs.nameservices 中配置的。值
是预备配置的 NameNode 的 ID,ID 是自己取的,不重复就可以,例如 nn1,nn2 -->
<property>
<name>dfs.ha.namenodes.hdfs-yjx</name>
<value>nn1,nn2</value>
</property>
<!-- 设置 NameNode 的 RPC 地址和端口 -->
<property>
<name>dfs.namenode.rpc-address.hdfs-yjx.nn1</name>
<value>node01:8020</value>
</property>
<!-- 设置 NameNode 的 RPC 地址和端口 -->
<property>
<name>dfs.namenode.rpc-address.hdfs-yjx.nn2</name>
<value>node02:8020</value>
</property>
<!-- 设置 NameNode 的 HTTP 地址和端口 -->
<property>
<name>dfs.namenode.http-address.hdfs-yjx.nn1</name>
<value>node01:9870</value>
</property>
<!-- 设置 NameNode 的 HTTP 地址和端口 -->
<property>
<name>dfs.namenode.http-address.hdfs-yjx.nn2</name>
<value>node02:9870</value>
</property>
<!-- 设置 QJM 共享存储系统服务器。在多个 NameNode 中共享存储目录,用于存放 edits 文件,该目录由 Active 写,
Standby 读 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node01:8485;node02:8485;node03:8485/hdfs-yjx</value>
</property>
<!-- 设置 journalnode 用于存放 edits 日志的目录,默认值为 /tmp/hadoop/dfs/journalnode -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/var/yjx/hadoop/ha/qjm</value>
</property>
<!-- 设置客户端连接 Active NameNode 所用的代理类 -->
<property>
<name>dfs.client.failover.proxy.provider.hdfs-yjx</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 设置 HDFS-HA 功能的防脑裂方法。可以是内建的方法(例如 shell 和 sshfence)或者用户自定义的方法 -->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
<value>shell(true)</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>
<!-- 设置 HDFS 默认的数据块副本数。可以在创建文件时指定,如果创建时未指定,则使用默认值 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
修改 workers
:
[root@node01 hadoop]# vim workers
用以下内容替换文件内容:
node01
node02
node03
拷贝至其他节点
将node01 已配置好的 hadoop 拷贝至 node02和 node03。
[root@node02 ~]# scp -r root@node01:/opt/yjx/hadoop-3.3.4 /opt/yjx/
[root@node03 ~]# scp -r root@node01:/opt/yjx/hadoop-3.3.4 /opt/yjx/
# 或者使用分发脚本
[root@node01 ~]# yjxrsync /opt/yjx/hadoop-3.3.4/
修改环境变量
三个节点修改环境变量vim/etc/profile
,在文件末尾添加以下内容:
export HADOOP_HOME=/opt/yjx/hadoop-3.3.4
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
修改完成后 source/etc/profile
重新加载环境变量。
启动
首先启动 ZooKeeper(三台机器都需要执行)。
zkServer.sh start
zkServer.sh status
然后启动 JournalNode(三台机器都需要执行)。
hdfs --daemon start journalnode
最后格式化NameNode等相关服务并启动集群。
# 格式化 node01 的 namenode(第一次配置的情况下使用)
[root@node01 ~]# hdfs namenode -format
# 启动 node01 的 namenode
[root@node01 ~]# hdfs --daemon start namenode
# node02 节点同步镜像数据
[root@node02 ~]# hdfs namenode -bootstrapStandby
# 格式化 zkfc(第一次配置的情况下使用)
[root@node01 ~]# hdfs zkfc -formatZK
# 启动 HDFS
[root@node01 ~]# start-dfs.sh
后期只需要先启动ZooKeeper然后再启动HDFS即可。
访问
访问:http://192.168.100.101:9870/和 http://192.168.100.102:9870/
测试文件上传
[root@node01 ~]# hdfs dfs -mkdir -p /test
[root@node01 ~]# hdfs dfs -put hadoop-3.3.4.tar.gz /test
# 指定 Block 大小
[root@node01 ~]# hdfs dfs -D dfs.blocksize=134217728 -put hadoop-3.3.4.tar.gz /test
关闭
先关闭HDFS。
[root@node01 ~]# stop-dfs.sh
再关闭ZooKeeper(三台机器都需要执行)。
[root@node01 ~]# stop-dfs.sh
环境搭建成功后 shutdown -h now
关机拍摄快照。