Hadoop完全分布部署

以下是针对三台主机(data1data2data3)的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/*

关键注意事项

  1. 配置同步:所有节点的配置文件必须完全一致(可通过scp同步)。
  2. 防火墙:确保节点间以下端口开放:
    • 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, 9870
DataNode9866, 9867, 9864
YARN8030-8033, 8088
MapReduce19888
SSH22
示例: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

  1. 日志排查:查看日志目录$HADOOP_HOME/logs定位问题。
  2. 高可用(可选):如需NameNode高可用,需配置ZooKeeper和JournalNode。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值