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]