Hadoop Linux 单机部署全攻略:从环境配置到集群模拟

Hadoop Linux 单机部署全攻略:从环境准备到验证测试

一、为何选择Linux单机部署Hadoop?

Hadoop作为分布式计算的标杆框架,其核心设计目标是通过多节点协同处理海量数据。但在开发初期,直接搭建多节点集群可能面临硬件成本高、配置复杂度高、调试困难等问题。Linux单机部署Hadoop通过伪分布式模式(Pseudo-Distributed Mode),将NameNode、DataNode、ResourceManager等核心组件运行在同一台机器的不同Java进程中,既能模拟分布式环境的核心行为,又显著降低了资源门槛。

对于开发者而言,单机部署的优势体现在三个方面:一是快速验证,可在几分钟内完成环境搭建,快速测试MapReduce程序或HDFS操作;二是调试友好,所有日志集中在一台机器,便于定位问题;三是学习成本低,无需掌握复杂的集群管理工具(如Ambari、Cloudera Manager),适合初学者入门。

二、环境准备:硬件与软件要求

硬件配置建议

  • 内存:至少8GB(推荐16GB),Hadoop的Java进程(如NameNode、DataNode)会占用较多内存,尤其是运行MapReduce任务时。
  • 磁盘:至少50GB可用空间,HDFS默认存储目录需要足够空间,且建议使用SSD以提升I/O性能。
  • CPU:双核及以上,MapReduce任务会并行执行多个Mapper/Reducer进程。

软件依赖清单

  • 操作系统:推荐CentOS 7/8或Ubuntu 20.04 LTS,这些系统对Hadoop的兼容性较好,且社区支持丰富。
  • Java环境:Hadoop 3.x需要Java 8或11(OpenJDK或Oracle JDK均可),可通过java -version验证安装。
  • SSH服务:Hadoop依赖SSH实现节点间通信,需确保ssh localhost可无密码登录(通过ssh-keygen生成密钥对并添加到~/.ssh/authorized_keys)。
  • 依赖库:部分Hadoop版本可能需要libsnappy(用于压缩)和protobuf(协议缓冲),可通过包管理器安装(如yum install snappy-devel protobuf-compiler)。

三、安装与配置:分步骤详解

1. 下载并解压Hadoop

从Apache官网下载稳定版Hadoop(如3.3.6),选择二进制包(如hadoop-3.3.6.tar.gz),解压到指定目录:

  1. tar -xzvf hadoop-3.3.6.tar.gz -C /opt/
  2. ln -s /opt/hadoop-3.3.6 /opt/hadoop # 创建软链接便于管理

2. 配置环境变量

编辑~/.bashrc/etc/profile,添加以下内容:

  1. export HADOOP_HOME=/opt/hadoop
  2. export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
  3. export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

执行source ~/.bashrc使配置生效。

3. 修改核心配置文件

Hadoop的配置文件位于$HADOOP_HOME/etc/hadoop,需重点修改以下文件:

hadoop-env.sh

设置Java路径(若未自动检测):

  1. export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 # 根据实际路径修改

core-site.xml

配置HDFS的默认名称空间和临时目录:

  1. <configuration>
  2. <property>
  3. <name>fs.defaultFS</name>
  4. <value>hdfs://localhost:9000</value>
  5. </property>
  6. <property>
  7. <name>hadoop.tmp.dir</name>
  8. <value>/tmp/hadoop</value>
  9. </property>
  10. </configuration>

hdfs-site.xml

设置副本数(单机模式设为1):

  1. <configuration>
  2. <property>
  3. <name>dfs.replication</name>
  4. <value>1</value>
  5. </property>
  6. </configuration>

mapred-site.xml

指定MapReduce运行框架为YARN:

  1. <configuration>
  2. <property>
  3. <name>mapreduce.framework.name</name>
  4. <value>yarn</value>
  5. </property>
  6. </configuration>

yarn-site.xml

配置ResourceManager地址:

  1. <configuration>
  2. <property>
  3. <name>yarn.resourcemanager.hostname</name>
  4. <value>localhost</value>
  5. </property>
  6. <property>
  7. <name>yarn.nodemanager.aux-services</name>
  8. <value>mapreduce_shuffle</value>
  9. </property>
  10. </configuration>

4. 格式化HDFS并启动服务

执行以下命令初始化HDFS:

  1. hdfs namenode -format

启动所有Hadoop服务(HDFS + YARN):

  1. start-dfs.sh # 启动NameNode、DataNode、SecondaryNameNode
  2. start-yarn.sh # 启动ResourceManager、NodeManager

通过jps命令验证进程是否运行:

  1. 12345 NameNode
  2. 12346 DataNode
  3. 12347 SecondaryNameNode
  4. 12348 ResourceManager
  5. 12349 NodeManager

四、验证与测试:确保环境可用

1. HDFS操作测试

创建目录并上传文件:

  1. hdfs dfs -mkdir /test
  2. hdfs dfs -put /etc/hosts /test/
  3. hdfs dfs -ls /test

2. MapReduce示例运行

执行官方提供的WordCount示例:

  1. hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount /test/hosts /test/output
  2. hdfs dfs -cat /test/output/part-r-00000

若输出单词统计结果,则说明环境正常。

五、常见问题与解决方案

1. SSH无密码登录失败

现象:执行start-dfs.sh时提示Permission denied (publickey,password)
解决

  • 确保~/.ssh/id_rsa.pub已追加到~/.ssh/authorized_keys
  • 检查/etc/ssh/sshd_configPasswordAuthentication是否为no,重启SSH服务(systemctl restart sshd)。

2. 端口冲突

现象:启动服务时提示Address already in use
解决

  • 通过netstat -tulnp | grep 9000检查端口占用。
  • 修改core-site.xml中的fs.defaultFS端口,或终止占用进程。

3. 内存不足

现象:NameNode启动后崩溃,日志显示OutOfMemoryError
解决

  • 编辑$HADOOP_HOME/etc/hadoop/hadoop-env.sh,增加JVM堆内存:
    1. export HADOOP_NAMENODE_OPTS="-Xmx2g"
    2. export HADOOP_DATANODE_OPTS="-Xmx1g"

六、进阶建议:从单机到集群

单机部署验证通过后,可逐步扩展:

  1. 多节点集群:在多台Linux机器上部署,修改core-site.xmlslaves文件指定节点IP。
  2. 高可用配置:通过ZooKeeper实现NameNode和ResourceManager的故障转移。
  3. 监控集成:使用Ganglia或Prometheus监控集群性能。

总结

Hadoop Linux单机部署是开发者入门分布式计算的理想起点,通过伪分布式模式,可在低成本环境下熟悉HDFS、YARN和MapReduce的核心机制。本文从环境准备到验证测试提供了全流程指导,并针对常见问题给出了解决方案。掌握单机部署后,开发者可更自信地迈向多节点集群管理,为处理海量数据打下坚实基础。