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
| sudo apt update sudo apt install openjdk-8-jdk
sudo yum install java-1.8.0-openjdk-devel
java -version
|
1.3 SSH免密码配置
Hadoop需要在节点间进行SSH通信,因此需要配置免密码登录:
1 2 3 4 5 6 7 8 9 10 11 12 13
| ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
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
| 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"
|
使环境变量生效:
2.3 验证安装
3. Hadoop配置
3.1 配置文件目录
Hadoop配置文件位于$HADOOP_HOME/etc/hadoop/目录下。
3.2 hadoop-env.sh
设置Java环境变量:
1 2 3 4 5
| sudo nano $HADOOP_HOME/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
|
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> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> <property> <name>dfs.permissions.enabled</name> <value>false</value> </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
| sudo nano $HADOOP_HOME/etc/hadoop/workers
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
4.3 启动集群
1 2 3 4 5 6
| start-all.sh
start-dfs.sh start-yarn.sh
|
4.4 验证集群状态
1 2 3 4 5 6 7 8 9 10 11 12 13
| 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 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. 参考资料