Hadoop 集群配置与启动指南
·
1. 准备工作
1.1 确保已完成以下配置
-
主机名和IP配置正确
-
SSH免密登录已设置
-
防火墙和SELinux已配置
-
时间同步已启用
-
Java环境已安装(建议JDK 8或11)
验证Java安装:
java -version
javac -version
echo $JAVA_HOME
2. Hadoop 安装
2.1 下载 Hadoop
# 在所有节点执行
wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.4/hadoop-3.3.4.tar.gz
2.2 解压并设置环境变量
# 解压到/opt目录
sudo tar -xzf hadoop-3.3.4.tar.gz -C /opt/
sudo mv /opt/hadoop-3.3.4 /opt/hadoop
# 设置权限
sudo chown -R hadoop:hadoop /opt/hadoop
# 配置环境变量
echo 'export HADOOP_HOME=/opt/hadoop' >> ~/.bashrc
echo 'export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin' >> ~/.bashrc
source ~/.bashrc
3. Hadoop 配置
3.1 核心配置文件
1. hadoop-env.sh
vim /opt/hadoop/etc/hadoop/hadoop-env.sh
# 修改以下内容
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk # 根据实际路径修改
export HADOOP_HOME=/opt/hadoop
export HDFS_NAMENODE_USER="hadoop"
export HDFS_DATANODE_USER="hadoop"
export HDFS_SECONDARYNAMENODE_USER="hadoop"
export YARN_RESOURCEMANAGER_USER="hadoop"
export YARN_NODEMANAGER_USER="hadoop"
2. core-site.xml
vim /opt/hadoop/etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop-master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop/data/tmp</value>
</property>
<property>
<name>hadoop.http.staticuser.user</name>
<value>hadoop</value>
</property>
</configuration>
3. hdfs-site.xml
vim /opt/hadoop/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///opt/hadoop/data/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///opt/hadoop/data/datanode</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop-master:9868</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
4. mapred-site.xml
vim /opt/hadoop/etc/hadoop/mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>$HADOOP_HOME/share/hadoop/mapreduce/*:$HADOOP_HOME/share/hadoop/mapreduce/lib/*</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>
5. yarn-site.xml
vim /opt/hadoop/etc/hadoop/yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop-master</value>
</property>
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
</configuration>
3.2 配置 workers 文件
vim /opt/hadoop/etc/hadoop/workers
# 添加从节点
hadoop-slave1
hadoop-slave2
4. 分发 Hadoop 配置
将配置好的 Hadoop 分发到所有从节点:
for node in hadoop-slave1 hadoop-slave2; do
rsync -avz /opt/hadoop hadoop@$node:/opt/
ssh hadoop@$node "echo 'export HADOOP_HOME=/opt/hadoop' >> ~/.bashrc"
ssh hadoop@$node "echo 'export PATH=\$PATH:\$HADOOP_HOME/bin:\$HADOOP_HOME/sbin' >> ~/.bashrc"
done
5. 创建数据目录
在所有节点执行:
mkdir -p /opt/hadoop/data/{namenode,datanode,tmp}
chown -R hadoop:hadoop /opt/hadoop/data
6. 格式化 HDFS
仅在主节点执行:
hdfs namenode -format
成功后会看到:
Storage directory /opt/hadoop/data/namenode has been successfully formatted
7. 启动 Hadoop 集群
7.1 启动 HDFS
# 在主节点执行
start-dfs.sh
7.2 启动 YARN
# 在主节点执行
start-yarn.sh
7.3 启动历史服务器(可选)
mapred --daemon start historyserver
8. 验证集群状态
8.1 检查进程
# 在主节点应有
jps
# NameNode
# ResourceManager
# SecondaryNameNode
# 在从节点应有
jps
# DataNode
# NodeManager
8.2 检查 HDFS
hdfs dfsadmin -report
hdfs dfs -ls /
8.3 检查 YARN
yarn node -list
8.4 Web 界面访问
-
HDFS NameNode: http://hadoop-master:9870
-
YARN ResourceManager: http://hadoop-master:8088
-
Secondary NameNode: http://hadoop-master:9868
9. 测试 Hadoop 集群
9.1 运行 WordCount 示例
# 创建输入目录
hdfs dfs -mkdir /input
# 上传测试文件
hdfs dfs -put $HADOOP_HOME/LICENSE.txt /input
# 运行示例
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar wordcount /input /output
# 查看结果
hdfs dfs -cat /output/*
10. 停止 Hadoop 集群
# 停止 YARN
stop-yarn.sh
# 停止 HDFS
stop-dfs.sh
# 停止历史服务器
mapred --daemon stop historyserver
11. 常见问题解决
11.1 启动失败检查
# 查看日志
tail -n 100 /opt/hadoop/logs/*.log
# 常见问题
# 1. 端口冲突
netstat -tulnp | grep <端口号>
# 2. 权限问题
ls -la /opt/hadoop/data/
# 3. 配置文件错误
检查XML文件格式是否正确
11.2 从节点无法连接主节点
# 检查网络
ping hadoop-master
# 检查SSH
ssh hadoop-master
# 检查防火墙
sudo firewall-cmd --list-ports
11.3 Web界面无法访问
# 检查端口是否开放
curl http://hadoop-master:9870
# 检查防火墙规则
sudo firewall-cmd --add-port=9870/tcp --permanent
sudo firewall-cmd --reload
12. 集群管理脚本
创建集群管理脚本 hadoop-cluster.sh:
#!/bin/bash
case $1 in
start)
echo "Starting Hadoop cluster..."
start-dfs.sh
start-yarn.sh
mapred --daemon start historyserver
;;
stop)
echo "Stopping Hadoop cluster..."
mapred --daemon stop historyserver
stop-yarn.sh
stop-dfs.sh
;;
status)
echo "Cluster status:"
jps
;;
*)
echo "Usage: $0 {start|stop|status}"
exit 1
esac
exit 0
使用示例:
chmod +x hadoop-cluster.sh
./hadoop-cluster.sh start
./hadoop-cluster.sh status
./hadoop-cluster.sh stop更多推荐


所有评论(0)