尚未崩坏 发表于 2025-4-10 14:10:10

Hadoop完全分布摆设

以下是针对三台主机(data1、data2、data3)的Hadoop 3.2.4完全分布式集群设置步骤,其中data1作为NameNode和ResourceManager,其他节点作为DataNode和NodeManager:
1. 环境准备(全部节点执行)



[*]主机名与IP映射:确保全部节点的/etc/hosts文件中包含以下内容(根据实际IP修改):192.168.1.101 data1
192.168.1.102 data2
192.168.1.103 data3

[*]SSH免密登录:在data1上生成密钥并分发到全部节点(包括自身):ssh-keygen -t rsa
ssh-copy-id data1
ssh-copy-id data2
ssh-copy-id data3

[*]安装Java:全部节点安装JDK 8+并设置JAVA_HOME。
2. 下载并解压Hadoop(全部节点执行)

wget https://archive.apache.org/dist/hadoop/core/hadoop-3.2.4/hadoop-3.2.4.tar.gz
tar -xzvf hadoop-3.2.4.tar.gz
sudo mv hadoop-3.2.4 /usr/local/hadoop
3. 设置环境变量(全部节点执行)

编辑 ~/.bashrc:
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64# 根据实际路径修改
使设置生效:
source ~/.bashrc
4. Hadoop设置文件(在data1上设置)

核心设置



[*] core-site.xml(全部节点):
<configuration>
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://data1:9000</value><!-- NameNode地址 -->
</property>
<property>
    <name>hadoop.tmp.dir</name>
    <value>/usr/local/hadoop/tmp</value><!-- 临时目录 -->
</property>
</configuration>

[*] hdfs-site.xml(全部节点):
<configuration>
<property>
    <name>dfs.replication</name>
    <value>3</value><!-- 副本数(与DataNode数量一致) -->
</property>
<property>
    <name>dfs.namenode.name.dir</name>
    <value>/usr/local/hadoop/hdfs/namenode</value><!-- NameNode数据目录 -->
</property>
<property>
    <name>dfs.datanode.data.dir</name>
    <value>/usr/local/hadoop/hdfs/datanode</value><!-- DataNode数据目录 -->
</property>
<property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>data1:9868</value><!-- SecondaryNameNode地址 -->
</property>
</configuration>

YARN与MapReduce设置



[*] mapred-site.xml(全部节点):
<configuration>
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>
<property>
    <name>yarn.app.mapreduce.am.env</name>
    <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
</property>
<property>
    <name>mapreduce.map.env</name>
    <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
</property>
<property>
    <name>mapreduce.reduce.env</name>
    <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
</property>
</configuration>

[*] yarn-site.xml(全部节点):
<configuration>
<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>data1</value><!-- ResourceManager在data1 -->
</property>
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>
<property>
    <name>yarn.nodemanager.env-whitelist</name>
    <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR</value>
</property>
<property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value><!-- 启用日志聚合 -->
</property>
</configuration>

Workers文件(在data1上设置)

编辑 $HADOOP_HOME/etc/hadoop/workers,添加DataNode节点:
data1
data2
data3
5. 创建目录并设置权限(全部节点执行)

mkdir -p /usr/local/hadoop/{tmp,hdfs/{namenode,datanode}}
chmod -R 755 /usr/local/hadoop
6. 分发Hadoop目录

# 使用scp递归分发Hadoop目录到其他节点
sudo scp -r /usr/local/hadoop data2:/usr/local/
sudo scp -r /usr/local/hadoop data3:/usr/local/
7. 格式化HDFS(仅在data1执行)

hdfs namenode -format
8. 启动集群(仅在data1执行)

start-dfs.sh    # 启动HDFS
start-yarn.sh   # 启动YARN
验证历程:
# data1应有:NameNode、SecondaryNameNode、ResourceManager
jps

# data2和data3应有:DataNode、NodeManager
ssh data2 jps
ssh data3 jps
9. 访问Web界面



[*]HDFS NameNode: http://data1:9870
[*]YARN ResourceManager: http://data1:8088
10. 测试分布式任务

hdfs dfs -mkdir /input
hdfs dfs -put $HADOOP_HOME/etc/hadoop/*.xml /input
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.4.jar wordcount /input /output
hdfs dfs -cat /output/*
关键注意事项


[*]设置同步:全部节点的设置文件必须完全一致(可通过scp同步)。
[*]防火墙:确保节点间以下端口开放:

[*]HDFS: 9000(RPC)、9870(Web)、9868(SecondaryNameNode)
[*]YARN: 8088(Web)、8032(ResourceManager)、8042(NodeManager)

在Hadoop集群摆设中,测试环境关闭防火墙方法。
(1)制止并禁用firewalld服务

# 停止防火墙
sudo systemctl stop firewalld

# 禁止开机启动
sudo systemctl disable firewalld

# 验证状态(应显示 inactive)
sudo systemctl status firewalld
(2)扫除防火墙规则(可选)

sudo firewall-cmd --permanent --remove-service=ssh# 示例:删除SSH规则
sudo firewall-cmd --reload
(3)验证防火墙已关闭

# 通用检查命令
sudo iptables -L -n# 若无规则或全ACCEPT,则已关闭

# 检查firewalld/ufw状态
sudo systemctl is-active firewalld# CentOS
sudo ufw status                     # Ubuntu
(4)开放Hadoop必要端口(生产环境替代方案)

假如需保留防火墙,需开放以下端口:
服务端口HDFS8020, 9000, 9870DataNode9866, 9867, 9864YARN8030-8033, 8088MapReduce19888SSH22 示例:CentOS开放端口

sudo firewall-cmd --permanent --add-port=9000/tcp
sudo firewall-cmd --permanent --add-port=9870/tcp
sudo firewall-cmd --reload
批量操作脚本(适用于集群)

创建脚本 disable-firewall.sh:
#!/bin/bash
NODES=("data1" "data2" "data3")

for node in ${NODES[@]}; do
echo "处理节点: $node"
ssh $node "sudo systemctl stop firewalld; sudo systemctl disable firewalld"
done

[*]日志排查:查看日志目录$HADOOP_HOME/logs定位问题。
[*]高可用(可选):如需NameNode高可用,需设置ZooKeeper和JournalNode。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Hadoop完全分布摆设