1. 项目概述
在数据爆炸式增长的时代,Hadoop作为分布式系统基础架构已经成为大数据处理的行业标准。最近在帮客户部署一套数据分析平台时,我选择了Hadoop 3.x版本在CentOS 7环境下进行安装。之所以选择这个组合,是因为CentOS 7的长期支持周期(直到2024年6月)和Hadoop 3.x的性能改进(特别是EC编码和资源利用率提升)能够满足企业级应用的需求。
提示:虽然Hadoop 3.x提供了许多新特性,但生产环境部署前务必进行充分测试,特别是与现有系统的兼容性。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备
2.1 系统基础配置
在开始安装前,我们需要确保系统环境符合Hadoop的基本要求。我使用的是CentOS 7.9最小化安装版本,这样可以减少不必要的软件包和潜在冲突。
bash复制# 查看系统版本
cat /etc/redhat-release
# 输出示例:CentOS Linux release 7.9.2009 (Core)
接下来进行必要的系统更新和基础工具安装:
bash复制sudo yum update -y
sudo yum install -y wget curl vim net-tools openssh-server java-1.8.0-openjdk-devel
注意:Hadoop 3.x需要Java 8或更高版本。虽然可以安装更新的JDK,但考虑到兼容性,我选择了OpenJDK 8。如果使用其他版本,需要特别注意与Hadoop的兼容性。
2.2 创建专用用户
为安全考虑,不建议直接使用root用户运行Hadoop。我创建了一个专用用户hadoop:
bash复制sudo groupadd hadoop
sudo useradd -g hadoop hadoop
echo "hadoop123" | passwd --stdin hadoop
2.3 SSH免密登录配置
Hadoop各节点间需要通过SSH通信,配置免密登录可以简化操作:
bash复制su - hadoop
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys
验证配置是否成功:
bash复制ssh localhost
# 应该可以直接登录而不需要密码
3. Hadoop安装与配置
3.1 下载Hadoop
我选择从Apache官网下载最新的稳定版本(当前是3.3.6):
bash复制wget https://downloads.apache.org/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz
验证文件完整性是个好习惯:
bash复制wget https://downloads.apache.org/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz.sha512
sha512sum -c hadoop-3.3.6.tar.gz.sha512
3.2 解压与目录结构
将Hadoop解压到/opt目录并设置权限:
bash复制sudo tar -xzf hadoop-3.3.6.tar.gz -C /opt/
sudo mv /opt/hadoop-3.3.6 /opt/hadoop
sudo chown -R hadoop:hadoop /opt/hadoop
设置环境变量(添加到~/.bashrc):
bash复制echo 'export HADOOP_HOME=/opt/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin' >> ~/.bashrc
source ~/.bashrc
3.3 核心配置文件修改
Hadoop的配置主要集中在几个XML文件中:
- hadoop-env.sh - 设置Hadoop环境变量
bash复制vim /opt/hadoop/etc/hadoop/hadoop-env.sh
找到并修改JAVA_HOME:
bash复制export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
- core-site.xml - 核心配置
xml复制<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配置
xml复制<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/hadoop/data/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/opt/hadoop/data/datanode</value>
</property>
</configuration>
- mapred-site.xml - MapReduce配置
xml复制<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
- yarn-site.xml - YARN配置
xml复制<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>
4. 初始化与启动
4.1 格式化HDFS
在首次启动前需要格式化NameNode:
bash复制hdfs namenode -format
警告:格式化操作会清除所有HDFS数据,生产环境务必谨慎操作!
4.2 启动Hadoop服务
启动HDFS和YARN服务:
bash复制start-dfs.sh
start-yarn.sh
验证服务是否正常运行:
bash复制jps
# 应该看到以下进程:
# NameNode
# DataNode
# ResourceManager
# NodeManager
# SecondaryNameNode
4.3 Web界面访问
Hadoop提供了Web管理界面:
- NameNode: http://localhost:9870
- ResourceManager: http://localhost:8088
如果无法访问,检查防火墙设置:
bash复制sudo firewall-cmd --permanent --add-port=9870/tcp
sudo firewall-cmd --permanent --add-port=8088/tcp
sudo firewall-cmd --reload
5. 常见问题与解决方案
在实际安装过程中,我遇到了几个典型问题,这里分享解决方案:
5.1 Java环境问题
问题现象:启动时报错"JAVA_HOME is not set"
解决方案:
- 确认java路径:
readlink -f $(which java) - 在hadoop-env.sh中正确设置JAVA_HOME
5.2 端口冲突
问题现象:服务启动失败,提示端口被占用
解决方案:
- 检查端口占用:
netstat -tulnp | grep <端口号> - 修改配置文件中的默认端口或停止占用程序
5.3 权限问题
问题现象:无法写入HDFS目录
解决方案:
- 确保hadoop用户对数据目录有写权限
- 检查SELinux状态:
sestatus - 临时禁用SELinux:
setenforce 0(生产环境需谨慎)
5.4 内存不足
问题现象:NodeManager频繁被杀死
解决方案:
- 修改yarn-site.xml,调整资源分配:
xml复制<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>2048</value>
</property>
- 根据实际物理内存调整值
6. 性能优化建议
在基本安装完成后,可以考虑以下优化措施:
- JVM调优:根据服务器配置调整Hadoop各组件的堆内存大小
- 数据目录优化:将数据目录挂载到独立磁盘,提高I/O性能
- 网络配置:调整TCP参数优化网络传输
- 压缩设置:启用中间数据压缩减少I/O压力
- 副本策略:根据集群规模调整HDFS副本数
我在实际部署中发现,对于8GB内存的服务器,以下JVM参数效果较好:
bash复制# 在hadoop-env.sh中添加
export HADOOP_HEAPSIZE_MAX=2048m
export HADOOP_HEAPSIZE_MIN=1024m
7. 安全配置
基本安装完成后,建议加强安全配置:
- 启用HDFS权限检查:
xml复制<property>
<name>dfs.permissions.enabled</name>
<value>true</value>
</property>
- 配置YARN ACL:
xml复制<property>
<name>yarn.acl.enable</name>
<value>true</value>
</property>
- 启用HTTPS:为Web界面配置SSL证书
- 定期备份:备份NameNode元数据
8. 验证安装
最后,运行一个简单的MapReduce作业验证安装:
bash复制hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar pi 10 100
这个命令会计算π的近似值,如果看到类似以下的输出,说明安装成功:
bash复制Estimated value of Pi is 3.14160000000000000000
9. 后续扩展方向
虽然本文主要介绍单节点安装,但实际生产环境通常需要集群部署。后续可以考虑:
- 多节点集群:添加DataNode和NodeManager节点
- 高可用配置:设置NameNode和ResourceManager的HA
- 监控系统:集成Prometheus+Grafana监控
- 调度优化:配置Fair Scheduler或Capacity Scheduler
- 与其他组件集成:如Hive、HBase、Spark等
我在实际项目中发现,先掌握单节点安装再扩展到集群是比较稳妥的学习路径。这样可以先理解核心概念和配置,避免在多节点环境中被网络、同步等问题困扰。
