温馨提示×

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
  • 关键文件与示例(按需修改主机名与路径):
  1. 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
  1. core-site.xml
  • 指定默认文件系统与临时目录:
    • fs.defaultFShdfs://master:9000
    • hadoop.tmp.dir/usr/local/hadoop/data
  1. 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
  1. mapred-site.xml(如文件不存在先 cp mapred-site.xml.template)
  • 指定 MapReduce 运行在 YARN
    • mapreduce.framework.nameyarn
  1. yarn-site.xml
  • 指定 ResourceManagerShuffle
    • yarn.resourcemanager.hostnamemaster
    • yarn.nodemanager.aux-servicesmapreduce_shuffle
    • yarn.nodemanager.resource.memory-mb4096
  1. 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 不一致:停止集群,清理各节点的 datalogs,再重新格式化。
    • SSH 免密失败:确认 ~/.ssh/authorized_keys 权限为 600,主节点能 ssh 到所有节点(含本机)。
    • 端口不通:检查 ufw/iptables 与云安全组,放行 9870/8088/9000 等端口。
    • 性能优化:启用 日志聚集(yarn.log-aggregation-enable)、合理设置 内存容器,并考虑 禁用透明大页
  • 扩展:高可用 HA(简要)

    • 引入 ZookeeperJournalNode,配置 dfs.nameservicesdfs.ha.namenodes.dfs.namenode.rpc-address..dfs.namenode.shared.edits.dir(qjournal://…)、dfs.ha.automatic-failover.enabled=truedfs.client.failover.proxy.provider.;ZK 配置 server.x=host:2888:3888 并在各节点放置 myid。启动顺序通常为:ZK → JournalNode →(初始化共享编辑)NameNode → ZKFC → 启动 YARN。

0