Hadoop 3.3.6 单机伪分布式部署:Ubuntu 22.04 下 5 个核心配置文件详解
Hadoop 3.3.6 单机伪分布式部署:Ubuntu 22.04 下 5 个核心配置文件详解
1. 环境准备与基础配置
在开始Hadoop 3.3.6的伪分布式部署前,我们需要确保系统环境满足基本要求。Ubuntu 22.04 LTS作为稳定的Linux发行版,是理想的运行平台。以下是需要完成的准备工作:
系统要求 :
- 至少4GB内存(8GB以上更佳)
- 50GB可用磁盘空间
- Java 8或11(推荐OpenJDK 11)
- SSH服务
首先安装必要的软件包:
sudo apt update
sudo apt install -y openjdk-11-jdk ssh pdsh
配置Java环境变量,编辑 ~/.bashrc 文件添加以下内容:
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin
验证Java安装:
java -version
接下来设置SSH免密登录:
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
测试SSH连接:
ssh localhost
2. Hadoop安装与基础配置
从Apache官网下载Hadoop 3.3.6并解压:
wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz
tar -xzvf hadoop-3.3.6.tar.gz -C /usr/local
cd /usr/local
sudo mv hadoop-3.3.6 hadoop
sudo chown -R $USER:$USER hadoop
配置Hadoop环境变量,在 ~/.bashrc 中添加:
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
应用配置并验证:
source ~/.bashrc
hadoop version
3. 核心配置文件详解
3.1 core-site.xml配置
core-site.xml 是Hadoop的核心配置文件,定义了全局参数。创建或编辑 $HADOOP_HOME/etc/hadoop/core-site.xml :
<configuration>
<!-- 定义HDFS的默认文件系统URI -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
<!-- Hadoop临时文件存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
</property>
<!-- 启用WebHDFS服务 -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>$(whoami)</value>
</property>
<!-- 文件系统回收站设置 -->
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>
</configuration>
关键参数说明:
fs.defaultFS:定义HDFS的默认访问地址和端口hadoop.tmp.dir:指定Hadoop临时文件目录,确保该目录存在并有写权限fs.trash.interval:设置文件删除后保留在回收站中的时间(分钟)
3.2 hdfs-site.xml配置
hdfs-site.xml 专门用于HDFS相关配置。编辑 $HADOOP_HOME/etc/hadoop/hdfs-site.xml :
<configuration>
<!-- 数据块副本数量 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<!-- NameNode元数据存储路径 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/name</value>
</property>
<!-- DataNode数据存储路径 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/data</value>
</property>
<!-- 启用Web UI访问 -->
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<!-- NameNode Web UI访问地址 -->
<property>
<name>dfs.namenode.http-address</name>
<value>0.0.0.0:9870</value>
</property>
<!-- 启用权限检查 -->
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
关键参数说明:
dfs.replication:在伪分布式模式下设置为1,生产环境通常为3dfs.namenode.name.dir:NameNode存储文件系统元数据的位置dfs.webhdfs.enabled:启用HTTP REST API访问HDFS
3.3 mapred-site.xml配置
mapred-site.xml 负责MapReduce框架的配置。编辑 $HADOOP_HOME/etc/hadoop/mapred-site.xml :
<configuration>
<!-- 指定MapReduce运行框架 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- MapReduce应用主节点地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>localhost:10020</value>
</property>
<!-- MapReduce历史服务器Web UI地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>localhost:19888</value>
</property>
<!-- Map任务内存限制 -->
<property>
<name>mapreduce.map.memory.mb</name>
<value>1536</value>
</property>
<!-- Reduce任务内存限制 -->
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>3072</value>
</property>
</configuration>
关键参数说明:
mapreduce.framework.name:设置为yarn以使用YARN资源管理器- 内存参数应根据实际机器配置调整,避免OOM错误
3.4 yarn-site.xml配置
yarn-site.xml 配置YARN资源管理器。编辑 $HADOOP_HOME/etc/hadoop/yarn-site.xml :
<configuration>
<!-- 指定ResourceManager地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>localhost</value>
</property>
<!-- NodeManager上运行的附属服务 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- ResourceManager Web UI地址 -->
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>localhost:8088</value>
</property>
<!-- 启用日志聚合 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 日志保留时间 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>86400</value>
</property>
<!-- 禁用虚拟内存检查 -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
</configuration>
关键参数说明:
yarn.nodemanager.aux-services:必须设置为mapreduce_shuffle以支持MapReduceyarn.log-aggregation-enable:启用日志聚合便于调试
3.5 hadoop-env.sh配置
hadoop-env.sh 设置Hadoop运行环境变量。编辑 $HADOOP_HOME/etc/hadoop/hadoop-env.sh :
# 设置Java安装路径
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
# Hadoop日志目录
export HADOOP_LOG_DIR=/usr/local/hadoop/logs
# 设置Hadoop PID文件目录
export HADOOP_PID_DIR=/usr/local/hadoop/pids
# 设置Hadoop堆内存大小
export HADOOP_HEAPSIZE_MAX=1024m
# 启用远程调试
# export HADOOP_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"
注意:在生产环境中,应根据服务器配置适当调整HADOOP_HEAPSIZE_MAX参数
4. 系统启动与验证
4.1 格式化HDFS
首次启动前需要格式化NameNode:
hdfs namenode -format
成功格式化后应看到类似输出:
Storage directory /usr/local/hadoop/tmp/dfs/name has been successfully formatted
4.2 启动Hadoop服务
使用以下脚本启动所有服务:
start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.sh start historyserver
验证服务是否正常运行:
jps
应看到以下关键进程:
NameNode
DataNode
ResourceManager
NodeManager
SecondaryNameNode
JobHistoryServer
Jps
4.3 验证部署
HDFS验证 :
hdfs dfs -mkdir -p /user/$(whoami)
hdfs dfs -put $HADOOP_HOME/etc/hadoop/*.xml /user/$(whoami)/input
hdfs dfs -ls /user/$(whoami)/input
MapReduce验证 :
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount /user/$(whoami)/input /user/$(whoami)/output
查看结果:
hdfs dfs -cat /user/$(whoami)/output/*
Web UI访问 :
- NameNode: http://localhost:9870
- ResourceManager: http://localhost:8088
- JobHistory: http://localhost:19888
5. 高级配置与优化
5.1 性能调优参数
在 hdfs-site.xml 中添加以下性能相关配置:
<property>
<name>dfs.blocksize</name>
<value>128m</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>dfs.datanode.max.xcievers</name>
<value>4096</value>
</property>
5.2 YARN资源管理
优化 yarn-site.xml 资源配置:
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>8192</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>6144</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>4</value>
</property>
5.3 安全配置
启用简单认证,在 core-site.xml 中添加:
<property>
<name>hadoop.http.authentication.type</name>
<value>simple</value>
</property>
<property>
<name>hadoop.http.filter.initializers</name>
<value>org.apache.hadoop.security.AuthenticationFilterInitializer</value>
</property>
5.4 日志配置
配置日志级别,编辑 $HADOOP_HOME/etc/hadoop/log4j.properties :
# 设置NameNode日志级别为INFO
log4j.logger.org.apache.hadoop.hdfs.server.namenode=INFO
# 设置DataNode日志级别为WARN
log4j.logger.org.apache.hadoop.hdfs.server.datanode=WARN
# 启用滚动日志
log4j.appender.RFA=org.apache.log4j.RollingFileAppender
6. 常见问题解决
问题1:端口冲突
解决方案:
- 检查端口占用:
netstat -tulnp | grep <端口号> - 修改冲突端口配置
问题2:磁盘空间不足
解决方案:
- 清理临时文件:
hdfs dfsadmin -report - 扩展磁盘空间或调整数据目录
问题3:Web UI无法访问
解决方案:
- 检查防火墙设置:
sudo ufw status - 开放必要端口:
sudo ufw allow 9870/tcp
问题4:权限问题
解决方案:
- 确保所有服务以相同用户运行
- 检查文件权限:
hdfs dfs -ls / - 临时禁用权限检查(仅测试环境):
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
7. 维护与管理脚本
创建启动/停止脚本 hadoop-cluster.sh :
#!/bin/bash
case $1 in
start)
echo "Starting Hadoop cluster..."
start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.sh start historyserver
;;
stop)
echo "Stopping Hadoop cluster..."
mr-jobhistory-daemon.sh stop historyserver
stop-yarn.sh
stop-dfs.sh
;;
status)
jps
;;
*)
echo "Usage: $0 {start|stop|status}"
exit 1
;;
esac
赋予执行权限并使用:
chmod +x hadoop-cluster.sh
./hadoop-cluster.sh start
8. 数据备份与恢复
NameNode元数据备份 :
# 手动备份
hdfs dfsadmin -fetchImage ~/namenode_backup
# 配置自动备份(在hdfs-site.xml中)
<property>
<name>dfs.namenode.name.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/name,file:///backup/dfs/name</value>
</property>
数据导出/导入 :
# 导出HDFS数据到本地
hadoop fs -copyToLocal /hdfs/path /local/path
# 从本地导入数据
hadoop fs -copyFromLocal /local/path /hdfs/path
9. 监控与性能分析
使用Hadoop自带工具 :
# HDFS健康状况
hdfs dfsadmin -report
# 磁盘使用情况
hdfs dfs -df -h
# YARN应用列表
yarn application -list
配置Ganglia监控 :
- 安装Ganglia监控组件
- 在
hadoop-metrics2.properties中配置:
*.sink.ganglia.class=org.apache.hadoop.metrics2.sink.ganglia.GangliaSink31
*.sink.ganglia.period=10
namenode.sink.ganglia.servers=localhost:8649
datanode.sink.ganglia.servers=localhost:8649
10. 升级与迁移
版本升级步骤 :
- 备份配置和数据
- 停止所有Hadoop服务
- 安装新版本到不同目录
- 迁移配置文件
- 启动服务并验证
数据迁移工具 :
# 使用DistCp跨集群复制
hadoop distcp hdfs://old-cluster:8020/path hdfs://new-cluster:8020/path
在实际使用中发现,伪分布式模式虽然方便开发测试,但某些性能指标与完全分布式环境存在差异,特别是在网络IO和磁盘吞吐方面。建议在性能测试时使用与生产环境相似的配置。
更多推荐




所有评论(0)