Hadoop 分布式系统安装与配置指南

Hadoop是一个开源的分布式计算平台,主要由HDFS(分布式文件系统)和MapReduce(分布式计算框架)组成。本文将详细介绍Hadoop的安装、配置和管理方法。

1. 环境准备

1.1 系统要求

  • 操作系统:Linux(推荐Ubuntu 18.04+或CentOS 7+)
  • Java:JDK 8或JDK 11(推荐OpenJDK)
  • 内存:至少4GB(生产环境推荐8GB以上)
  • 存储:根据数据量需求确定
  • 网络:集群节点间网络互通

1.2 Java安装

1
2
3
4
5
6
7
8
9
# Ubuntu/Debian
sudo apt update
sudo apt install openjdk-8-jdk

# CentOS/RHEL
sudo yum install java-1.8.0-openjdk-devel

# 验证Java安装
java -version

1.3 SSH免密码配置

Hadoop需要在节点间进行SSH通信,因此需要配置免密码登录:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 生成SSH密钥
ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa

# 将公钥添加到authorized_keys
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

# 测试本地SSH连接
ssh localhost

# 对于多节点集群,需要将公钥复制到所有从节点
ssh-copy-id hadoop@slave1
ssh-copy-id hadoop@slave2

2. Hadoop安装

2.1 下载Hadoop

Apache Hadoop官网下载最新稳定版本,或使用以下命令:

1
2
3
4
5
6
# 下载Hadoop 3.3.6(示例版本)
wget https://downloads.apache.org/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz

# 解压
tar -zxvf hadoop-3.3.6.tar.gz
mv hadoop-3.3.6 /usr/local/hadoop

2.2 环境变量配置

编辑~/.bashrc文件,添加以下环境变量:

1
2
3
4
5
6
7
8
9
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"

使环境变量生效:

1
source ~/.bashrc

2.3 验证安装

1
hadoop version

3. Hadoop配置

3.1 配置文件目录

Hadoop配置文件位于$HADOOP_HOME/etc/hadoop/目录下。

3.2 hadoop-env.sh

设置Java环境变量:

1
2
3
4
5
# 编辑hadoop-env.sh
sudo nano $HADOOP_HOME/etc/hadoop/hadoop-env.sh

# 添加以下内容
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 # 根据实际Java安装路径调整

3.3 core-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/data/hadoop/tmp</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
</configuration>

3.4 hdfs-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/data/hadoop/hdfs/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/data/hadoop/hdfs/datanode</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value> <!-- 生产环境推荐3副本 -->
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.permissions.enabled</name>
<value>false</value> <!-- 开发环境可设置为false -->
</property>
</configuration>

3.5 mapred-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
<property>
<name>mapreduce.map.memory.mb</name>
<value>2048</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>4096</value>
</property>
</configuration>

3.6 yarn-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>8192</value> <!-- 根据实际内存调整 -->
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>8192</value>
</property>
</configuration>

3.7 workers文件(Hadoop 3.x版本,旧版本为slaves)

1
2
3
4
5
6
7
# 编辑workers文件
sudo nano $HADOOP_HOME/etc/hadoop/workers

# 添加所有从节点主机名或IP
slave1
slave2
slave3

4. 集群部署

4.1 准备目录结构

1
2
3
4
5
6
7
# 创建必要的目录
sudo mkdir -p /data/hadoop/tmp
sudo mkdir -p /data/hadoop/hdfs/namenode
sudo mkdir -p /data/hadoop/hdfs/datanode

# 设置权限
sudo chown -R hadoop:hadoop /data/hadoop

4.2 格式化HDFS

1
2
# 格式化NameNode
hdfs namenode -format

4.3 启动集群

1
2
3
4
5
6
# 启动HDFS和YARN
start-all.sh

# 或分别启动
start-dfs.sh
start-yarn.sh

4.4 验证集群状态

1
2
3
4
5
6
7
8
9
10
11
12
13
# 查看Java进程
jps

# 预期输出(主节点)
1234 NameNode
5678 DataNode
9012 ResourceManager
3456 NodeManager
7890 SecondaryNameNode

# 从节点预期输出
1234 DataNode
5678 NodeManager

4.5 Web界面访问

5. 单节点模式(伪分布式)配置

5.1 配置文件修改

对于单节点模式,只需修改以下配置:

core-site.xml

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

hdfs-site.xml

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

5.2 启动和验证

1
2
3
4
5
6
7
8
# 格式化HDFS
hdfs namenode -format

# 启动服务
start-all.sh

# 验证
jps

6. 常用操作

6.1 HDFS操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 创建目录
hdfs dfs -mkdir -p /user/hadoop

# 上传文件
hdfs dfs -put localfile /user/hadoop/

# 查看文件
hdfs dfs -ls /user/hadoop/

# 下载文件
hdfs dfs -get /user/hadoop/file localfile

# 删除文件
hdfs dfs -rm /user/hadoop/file

6.2 MapReduce作业提交

1
2
# 运行示例作业
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount /input /output

6.3 服务管理

1
2
3
4
5
6
7
8
9
# 停止所有服务
stop-all.sh

# 重启服务
stop-all.sh && start-all.sh

# 查看服务状态
hdfs dfsadmin -report
yarn node -list

7. 性能优化

7.1 内存配置

根据服务器实际内存调整以下参数:

  • yarn.nodemanager.resource.memory-mb:节点管理器可用内存
  • yarn.scheduler.maximum-allocation-mb:单个容器最大内存
  • mapreduce.map.memory.mb:Map任务内存
  • mapreduce.reduce.memory.mb:Reduce任务内存

7.2 存储优化

  • 使用SSD存储提升性能
  • 合理设置数据块大小(默认128MB)
  • 配置适当的副本数(生产环境推荐3)

7.3 网络优化

  • 使用万兆网络
  • 配置适当的网络缓冲区大小
  • 避免网络瓶颈

8. 常见问题与解决方案

8.1 DataNode无法启动

问题:DataNode启动失败,日志显示无法连接到NameNode。

解决方案

  • 检查网络连接
  • 确保防火墙已关闭或开放相关端口
  • 检查/etc/hosts文件配置
  • 删除DataNode数据目录后重新启动

8.2 内存不足

问题:YARN容器内存不足导致作业失败。

解决方案

  • 增加服务器内存
  • 调整YARN内存配置
  • 减少作业并行度

8.3 权限问题

问题:HDFS操作权限被拒绝。

解决方案

  • 检查文件权限
  • 临时关闭权限检查(dfs.permissions.enabled=false
  • 使用正确的用户身份执行操作

9. 高可用配置

对于生产环境,建议配置Hadoop高可用集群,包括:

  • NameNode高可用(使用ZooKeeper)
  • ResourceManager高可用
  • 自动故障转移

10. 参考资料