在 Ubuntu 上运行 Hadoop 的简明步骤
一 环境准备
- 安装 Java(推荐 OpenJDK 11):sudo apt update && sudo apt install -y openjdk-11-jdk;验证:java -version。
- 安装并配置 SSH(Hadoop 守护进程间通信需要):sudo apt install -y openssh-server;启动服务:sudo systemctl start ssh && sudo systemctl enable ssh;测试:ssh localhost。为方便,可配置免密登录:ssh-keygen -t rsa -P “” -f ~/.ssh/id_rsa && cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys。
二 安装与配置 Hadoop
- 下载并解压(示例版本 3.3.4,可按需替换为新版本):
wget https://downloads.apache.org/hadoop/common/hadoop-3.3.4/hadoop-3.3.4.tar.gz
sudo tar -xzvf hadoop-3.3.4.tar.gz -C /usr/local
sudo mv /usr/local/hadoop-3.3.4 /usr/local/hadoop
- 设置环境变量(~/.bashrc 或 ~/.profile):
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source ~/.bashrc
- 核心配置($HADOOP_HOME/etc/hadoop):
core-site.xml
fs.defaultFShdfs://localhost:9000
hdfs-site.xml
dfs.replication1
dfs.namenode.name.dir/usr/local/hadoop/data/namenode
dfs.datanode.data.dir/usr/local/hadoop/data/datanode
yarn-site.xml
yarn.nodemanager.aux-servicesmapreduce_shuffle
yarn.nodemanager.aux-services.mapreduce.shuffle.classorg.apache.hadoop.mapred.ShuffleHandler
mapred-site.xml(如文件不存在先 cp mapred-site.xml.template mapred-site.xml)
mapreduce.framework.nameyarn
- 在 hadoop-env.sh 中显式设置 JAVA_HOME(与上一致):export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64。
三 启动与验证
- 首次启动前格式化 HDFS:hdfs namenode -format(仅首次)。
- 启动集群:start-dfs.sh 与 start-yarn.sh。
- 验证进程:jps 应看到 NameNode、DataNode、ResourceManager、NodeManager。
- 访问 Web UI:HDFS NameNode 默认 http://localhost:9870;YARN ResourceManager 默认 http://localhost:8088。
- 停止集群:stop-dfs.sh 与 stop-yarn.sh。
四 运行示例作业
- 准备 HDFS 目录并上传示例数据:
hdfs dfs -mkdir -p /user/$USER
hdfs dfs -mkdir input
hdfs dfs -put $HADOOP_HOME/etc/hadoop/*.xml input
- 运行示例(以 grep 为例,统计含“configuration”的行数):
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar grep input output ‘configuration’
- 查看结果:hdfs dfs -cat output/;如需本地查看日志:cat $HADOOP_HOME/logs/.log。
五 常见问题与排查
- SSH 连接失败:确认 ssh 服务已启动(sudo systemctl start ssh),必要时配置免密登录。
- 端口或访问异常:NameNode 默认 9870,YARN 默认 8088;若无法访问,检查防火墙/云安全组与是否在本地回环访问。
- 权限与目录:确保 namenode/data 目录存在且当前用户可写;必要时使用 sudo 创建目录并调整属主。
- Java 路径错误:同时在 ~/.bashrc 与 $HADOOP_HOME/etc/hadoop/hadoop-env.sh 中正确设置 JAVA_HOME。
- 旧版本 Web 端口:Hadoop 2.x 的 NameNode Web UI 常用 50070,与 3.x 的 9870 不同。