在 Ubuntu 上测试 Hadoop 需完成环境准备→配置验证→HDFS 操作→MapReduce 任务执行四个核心步骤,以下是详细操作指南:
Hadoop 依赖 Java 运行,需先安装 OpenJDK(推荐 8 或 11 版本):
sudo apt update
sudo apt install default-jdk
# 验证安装
java -version # 应输出 Java 版本信息
javac -version # 应输出 Java 编译器版本
从 Apache 官网下载稳定版 Hadoop(如 3.3.4),解压至指定目录(如 /usr/local/hadoop
):
wget https://dlcdn.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
# 设置权限
sudo chown -R $USER:$USER /usr/local/hadoop
进入 Hadoop 配置目录,修改以下文件:
cd /usr/local/hadoop/etc/hadoop
hadoop-env.sh
:设置 Java 环境变量(找到 JAVA_HOME
行,取消注释并修改):
export JAVA_HOME=/usr/lib/jvm/default-java # Ubuntu 默认 Java 路径
core-site.xml
:配置 HDFS 默认文件系统和临时目录:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value> <!-- HDFS 地址 -->
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value> <!-- 临时目录(避免重启丢失) -->
</property>
</configuration>
hdfs-site.xml
:配置 NameNode 和 DataNode 数据存储路径及副本数(伪分布式副本数为 1):
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value> <!-- 副本数(单节点设为 1) -->
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value> <!-- NameNode 数据目录 -->
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value> <!-- DataNode 数据目录 -->
</property>
</configuration>
首次启动前需格式化 NameNode(仅一次,多次格式化会清空 HDFS 数据):
hdfs namenode -format
# 成功输出应包含 "successfully formatted"
启动 HDFS 和 YARN 服务(伪分布式无需单独启动 ResourceManager 和 NodeManager,start-dfs.sh
会一并启动):
start-dfs.sh # 启动 HDFS
start-yarn.sh # 启动 YARN(可选,但建议开启)
验证进程:运行 jps
查看是否启动以下进程:
NameNode # HDFS 主节点
DataNode # HDFS 数据节点
SecondaryNameNode # HDFS 辅助节点(可选)
ResourceManager # YARN 资源管理器(可选)
NodeManager # YARN 节点管理器(可选)
访问 Web 界面:
http://localhost:9870
(查看 NameNode、DataNode 状态)http://localhost:8088
(查看集群资源使用情况)通过 HDFS Shell 命令验证文件系统功能:
# 在 HDFS 中创建用户目录(需替换为你的用户名)
hdfs dfs -mkdir -p /user/$USER
# 将本地文件上传至 HDFS(以 Hadoop 自带的 XML 文件为例)
hdfs dfs -mkdir /user/$USER/input
hdfs dfs -put $HADOOP_HOME/etc/hadoop/*.xml /user/$USER/input
# 查看 HDFS 中的文件列表
hdfs dfs -ls /user/$USER/input
Hadoop 自带 wordcount
程序,用于统计文本文件中单词出现次数:
# 删除已有输出目录(避免重复运行报错)
hdfs dfs -rm -r /user/$USER/output
# 运行 WordCount 程序(输入路径:HDFS 中的 input 目录;输出路径:HDFS 中的 output 目录)
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar wordcount /user/$USER/input /user/$USER/output
# 查看输出结果(HDFS 中的 part-r-00000 文件)
hdfs dfs -cat /user/$USER/output/part-r-00000
输出示例:
hadoop 3
mapreduce 2
JAVA_HOME not set
:检查 hadoop-env.sh
中的 JAVA_HOME
路径是否正确。Connection refused
:检查防火墙是否关闭(sudo ufw disable
),或端口是否被占用。Output directory already exists
:删除已有输出目录后再运行任务(hdfs dfs -rm -r /user/$USER/output
)。通过以上步骤,可在 Ubuntu 上完成 Hadoop 的基本功能测试,验证 HDFS 和 MapReduce 是否正常运行。