跳转到内容

Apache Hadoop伪分布式模式

来自代码酷


Hadoop伪分布式模式(Pseudo-Distributed Mode)是Hadoop的一种运行模式,它在单个节点上模拟分布式环境,所有Hadoop守护进程(如NameNode、DataNode、ResourceManager、NodeManager等)均以独立Java进程的形式运行。这种模式适合开发、测试和学习,能够完整体验Hadoop分布式功能,而无需多台物理机器。

概述[编辑 | 编辑源代码]

伪分布式模式是介于本地模式完全分布式模式之间的配置。与本地模式不同,伪分布式模式会启动所有Hadoop服务,并利用HDFS(Hadoop Distributed File System)存储数据,但所有服务均运行在单个节点上。其核心特点包括:

  • 使用HDFS(而非本地文件系统)
  • 启动所有关键守护进程
  • 通过SSH连接到本地主机(需配置免密登录)

配置步骤[编辑 | 编辑源代码]

以下是在Linux系统上配置Hadoop伪分布式模式的详细步骤:

1. 环境准备[编辑 | 编辑源代码]

确保已安装:

  • Java(JDK 8或11)
  • Hadoop(建议3.x版本)
  • SSH服务
# 检查Java版本
java -version

# 安装SSH(Ubuntu示例)
sudo apt-get install openssh-server
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys

2. 修改Hadoop配置文件[编辑 | 编辑源代码]

需编辑以下文件(路径为$HADOOP_HOME/etc/hadoop/):

文件名 关键配置项 说明
core-site.xml
<property>
  <name>fs.defaultFS</name>
  <value>hdfs://localhost:9000</value>
</property>
定义默认文件系统URI
hdfs-site.xml
<property>
  <name>dfs.replication</name>
  <value>1</value>
</property>
设置HDFS副本数为1(单节点)
mapred-site.xml
<property>
  <name>mapreduce.framework.name</name>
  <value>yarn</value>
</property>
指定使用YARN框架
yarn-site.xml
<property>
  <name>yarn.nodemanager.aux-services</name>
  <value>mapreduce_shuffle</value>
</property>
配置NodeManager辅助服务

3. 格式化HDFS[编辑 | 编辑源代码]

首次启动前需格式化NameNode:

hdfs namenode -format

4. 启动Hadoop服务[编辑 | 编辑源代码]

使用内置脚本启动服务:

# 启动HDFS
$HADOOP_HOME/sbin/start-dfs.sh

# 启动YARN
$HADOOP_HOME/sbin/start-yarn.sh

5. 验证运行状态[编辑 | 编辑源代码]

检查进程是否正常运行:

jps

预期输出应包含:

NameNode
DataNode
ResourceManager
NodeManager
SecondaryNameNode

架构示意图[编辑 | 编辑源代码]

graph LR A[Client] --> B[NameNode] A --> C[ResourceManager] B --> D[DataNode] C --> E[NodeManager] D -->|同一节点| E

实际应用示例[编辑 | 编辑源代码]

运行WordCount程序[编辑 | 编辑源代码]

1. 在HDFS创建输入目录并上传文件:

hdfs dfs -mkdir -p /user/hadoop/input
hdfs dfs -put $HADOOP_HOME/LICENSE.txt /user/hadoop/input

2. 执行MapReduce作业:

hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar \
  wordcount /user/hadoop/input /user/hadoop/output

3. 查看结果:

hdfs dfs -cat /user/hadoop/output/part-r-00000 | head -n 5

示例输出:

"AS      4
"BSD"   1
"COPYRIGHT"  1
"Contributors" 1
"Derivative 1

性能调优建议[编辑 | 编辑源代码]

虽然伪分布式模式主要用于开发测试,但仍可优化:

  • 调整JVM堆内存(修改hadoop-env.sh
  • 合理设置YARN资源(yarn-site.xml中的yarn.nodemanager.resource.memory-mb
  • 启用HDFS压缩(配置io.compression.codecs

常见问题解决[编辑 | 编辑源代码]

问题 解决方案
SSH连接失败 确保ssh localhost无需密码
端口冲突 检查9000(HDFS)、8088(YARN UI)等端口
权限错误 使用hdfs dfs -chmod修改权限

数学原理[编辑 | 编辑源代码]

在伪分布式模式下,HDFS的存储容量计算为: C=min(Di)×R 其中:

  • C:实际可用容量
  • Di:各磁盘可用空间(伪分布式模式只有单磁盘)
  • R:副本因子(伪分布式模式下通常为1)

进阶学习[编辑 | 编辑源代码]

完成伪分布式模式实践后,建议:

伪分布式模式为学习者提供了理解Hadoop核心架构的理想沙箱环境,是迈向生产环境部署的重要阶梯。