Hadoop实战:从零搭建大数据环境到运行第一个MapReduce程序(Linux版)

1. 环境准备与基础配置

在开始Hadoop之旅前,我们需要确保Linux环境满足基本要求。推荐使用Ubuntu 20.04 LTS或CentOS 7作为操作系统,它们对Hadoop有良好的兼容性。以下是需要准备的组件清单:

  • Java Development Kit (JDK) 8:Hadoop的核心依赖
  • SSH无密码登录:集群节点间通信的基础
  • Hadoop 3.3.4:当前稳定版本

首先安装JDK并配置环境变量:

sudo apt update
sudo apt install openjdk-8-jdk -y
echo 'export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64' >> ~/.bashrc
source ~/.bashrc

验证Java安装是否成功:

java -version
# 应显示类似:openjdk version "1.8.0_312"

接下来配置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集群安装与配置

下载并解压Hadoop二进制包:

wget https://downloads.apache.org/hadoop/common/hadoop-3.3.4/hadoop-3.3.4.tar.gz
tar -xzvf hadoop-3.3.4.tar.gz -C /opt/
sudo mv /opt/hadoop-3.3.4 /opt/hadoop

配置Hadoop环境变量:

echo 'export HADOOP_HOME=/opt/hadoop' >> ~/.bashrc
echo 'export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin' >> ~/.bashrc
source ~/.bashrc

Hadoop的核心配置文件位于$HADOOP_HOME/etc/hadoop/目录,需要修改以下文件:

core-site.xml - 定义HDFS地址和临时目录:

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/hadoop/tmp</value>
    </property>
</configuration>

hdfs-site.xml - 配置HDFS参数:

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/opt/hadoop/namenode</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/opt/hadoop/datanode</value>
    </property>
</configuration>

mapred-site.xml - 配置MapReduce框架:

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

yarn-site.xml - 配置YARN资源管理器:

<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.nodemanager.env-whitelist</name>
        <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
    </property>
</configuration>

3. 启动Hadoop集群

在首次启动前,需要格式化HDFS:

hdfs namenode -format

启动HDFS和YARN服务:

start-dfs.sh
start-yarn.sh

验证服务是否正常运行:

jps
# 应显示以下进程:
# NameNode
# DataNode
# ResourceManager
# NodeManager
# SecondaryNameNode

可以通过Web界面访问集群状态:

  • HDFS: http://localhost:9870
  • YARN: http://localhost:8088

4. 运行第一个MapReduce程序

我们将实现经典的词频统计(WordCount)程序。首先在HDFS上创建输入目录并上传测试文件:

hdfs dfs -mkdir -p /user/hadoop/input
echo "Hello World Hello Hadoop" > test.txt
hdfs dfs -put test.txt /user/hadoop/input

Hadoop自带WordCount示例程序,可以直接运行:

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

查看输出结果:

hdfs dfs -cat /user/hadoop/output/part-r-00000
# 应显示:
# Hadoop    1
# Hello     2
# World     1

5. 集群管理与问题排查

5.1 常用管理命令

HDFS文件操作

# 列出目录内容
hdfs dfs -ls /
# 创建目录
hdfs dfs -mkdir /data
# 从本地复制文件到HDFS
hdfs dfs -put localfile /data
# 从HDFS复制文件到本地
hdfs dfs -get /data/remotefile .

YARN应用管理

# 列出运行中的应用
yarn application -list
# 终止应用
yarn application -kill application_id

5.2 常见问题解决

端口冲突:如果遇到端口被占用错误,检查netstat -tulnp并修改相应配置文件中的端口号。

磁盘空间不足:Hadoop需要足够的磁盘空间存储数据块和日志,定期清理hadoop.tmp.dir指定的目录。

内存不足:可以在yarn-site.xml中调整:

<property>
    <name>yarn.nodemanager.resource.memory-mb</name>
    <value>2048</value>
</property>
<property>
    <name>yarn.scheduler.maximum-allocation-mb</name>
    <value>2048</value>
</property>

6. 性能优化与扩展

6.1 配置参数调优

HDFS块大小:根据数据特点调整dfs.blocksize(默认128MB),大文件处理可增大至256MB。

MapReduce内存设置

<!-- mapred-site.xml -->
<property>
    <name>mapreduce.map.memory.mb</name>
    <value>1024</value>
</property>
<property>
    <name>mapreduce.reduce.memory.mb</name>
    <value>2048</value>
</property>

6.2 多节点集群配置

要将单节点扩展为多节点集群,需要:

  1. 在所有节点上安装相同版本的Hadoop和JDK
  2. 修改etc/hadoop/workers文件,添加所有DataNode主机名
  3. 在NameNode上生成SSH密钥并分发到各节点
  4. 在所有节点上同步配置文件
  5. 在NameNode上格式化HDFS并启动集群

6.3 监控与日志

Hadoop提供详细的日志信息,位置在:

  • NameNode日志:$HADOOP_HOME/logs/hadoop-*-namenode-*.log
  • DataNode日志:$HADOOP_HOME/logs/hadoop-*-datanode-*.log
  • YARN日志:$HADOOP_HOME/logs/yarn-*-resourcemanager-*.log

对于生产环境,建议集成Prometheus和Grafana进行可视化监控。

更多推荐