Ubuntu 上如何配置 Hadoop 集群
小樊
45
2025-12-20 18:55:41
Ubuntu 上配置 Hadoop 集群实操指南
一 环境准备与规划
- 准备至少 2 台 Ubuntu 16.04+ 机器,建议使用 OpenJDK 8,并创建专用用户(如 hadoop)用于部署与运行。所有节点需在同一网络,能互相 ping 通。
- 规划主机名与角色,示例:
- master:NameNode + ResourceManager(也可将 RM 单独放到另一台机器)
- worker1/worker2:DataNode + NodeManager
- 配置 /etc/hosts 与 /etc/hostname,保证主机名可解析;在每台机器安装 SSH 服务 并配置 SSH 免密登录(主节点能免密登录所有节点,含本机)。
- 建议关闭防火墙或放行端口(如 9870/8088/9000/50070 等),并做 NTP 时钟同步 与(可选)禁用透明大页,以减少分布式运行时的异常。
二 安装 Java 与 Hadoop
- 安装 Java(每台机器):
- sudo apt update && sudo apt install -y openjdk-8-jdk
- java -version 验证
- 下载并解压 Hadoop(建议 3.3.x,在主节点操作):
- wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz
- sudo tar -zxvf hadoop-3.3.6.tar.gz -C /usr/local
- sudo mv /usr/local/hadoop-3.3.6 /usr/local/hadoop
- sudo chown -R hadoop:hadoop /usr/local/hadoop
- 配置环境变量(每台机器,~/.bashrc 或 /etc/profile):
- export HADOOP_HOME=/usr/local/hadoop
- export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
- source ~/.bashrc 使生效
三 核心配置
- 进入配置目录:/usr/local/hadoop/etc/hadoop
- 关键文件与示例(按需修改主机名与路径):
- hadoop-env.sh
- 明确 JAVA_HOME(很多启动问题源于未设置):
- export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
- 建议同时显式设置运行用户(避免 root/普通用户混用导致权限问题):
- 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
- core-site.xml
- 指定默认文件系统与临时目录:
- fs.defaultFShdfs://master:9000
- hadoop.tmp.dir/usr/local/hadoop/data
- hdfs-site.xml
- 副本数与数据目录(示例为 2 副本,生产建议 3):
- dfs.replication2
- dfs.namenode.name.dir/usr/local/hadoop/hdfs/namenode
- dfs.datanode.data.dir/usr/local/hadoop/hdfs/datanode
- dfs.namenode.http-addressmaster:9870
- mapred-site.xml(如文件不存在先 cp mapred-site.xml.template)
- 指定 MapReduce 运行在 YARN:
- mapreduce.framework.nameyarn
- yarn-site.xml
- 指定 ResourceManager 与 Shuffle:
- yarn.resourcemanager.hostnamemaster
- yarn.nodemanager.aux-servicesmapreduce_shuffle
- yarn.nodemanager.resource.memory-mb4096
- workers(或 slaves,列出所有 worker 主机名)
-
worker1
-
worker2
-
分发配置到所有节点(示例):
- scp -r /usr/local/hadoop hadoop@worker1:/usr/local/
- scp -r /usr/local/hadoop hadoop@worker2:/usr/local/
四 启动与验证
- 仅在 master 执行:
- 格式化 NameNode(首次启动且仅一次):hdfs namenode -format
- 启动 HDFS:start-dfs.sh
- 启动 YARN:start-yarn.sh
- 在各节点用 jps 检查进程:
- master 应有:NameNode、ResourceManager(若配置了 SecondaryNameNode 则还有)
- worker 应有:DataNode、NodeManager
- Web 界面:
- HDFS NameNode:http://master:9870
- YARN ResourceManager:http://master:8088
- 运行 WordCount 验证:
- hdfs dfs -mkdir -p /input
- hdfs dfs -put $HADOOP_HOME/README.txt /input
- hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount /input /output
- hdfs dfs -cat /output/part-r-00000
五 常见问题与扩展
-
常见故障排查
- “JAVA_HOME is not set”:在 hadoop-env.sh 显式设置 JAVA_HOME。
- 多次格式化导致 ClusterID 不一致:停止集群,清理各节点的 data 与 logs,再重新格式化。
- SSH 免密失败:确认 ~/.ssh/authorized_keys 权限为 600,主节点能 ssh 到所有节点(含本机)。
- 端口不通:检查 ufw/iptables 与云安全组,放行 9870/8088/9000 等端口。
- 性能优化:启用 日志聚集(yarn.log-aggregation-enable)、合理设置 内存 与 容器,并考虑 禁用透明大页。
-
扩展:高可用 HA(简要)
- 引入 Zookeeper 与 JournalNode,配置 dfs.nameservices、dfs.ha.namenodes.、dfs.namenode.rpc-address..、dfs.namenode.shared.edits.dir(qjournal://…)、dfs.ha.automatic-failover.enabled=true 与 dfs.client.failover.proxy.provider.;ZK 配置 server.x=host:2888:3888 并在各节点放置 myid。启动顺序通常为:ZK → JournalNode →(初始化共享编辑)NameNode → ZKFC → 启动 YARN。