一、Hadoop单机部署基础准备
1.1 环境要求
CentOS 7/8系统(推荐最小化安装),需满足以下配置:
- 内存:4GB以上(开发环境建议8GB)
- 磁盘空间:至少20GB可用空间
- 网络:配置静态IP地址
- 用户权限:使用非root用户操作(建议创建hadoop专用用户)
# 创建hadoop用户示例sudo useradd -m hadoopsudo passwd hadoop
1.2 依赖安装
需要预先安装以下组件:
- Java JDK 1.8+(推荐OpenJDK)
- SSH服务(用于本地伪分布式通信)
- wget/curl(下载工具)
# JDK安装示例(OpenJDK 8)sudo yum install -y java-1.8.0-openjdk-devel# 验证安装java -version# 应输出类似:openjdk version "1.8.0_302"
二、Hadoop单机版安装流程
2.1 下载与解压
从Apache官网获取稳定版Hadoop(推荐3.x系列):
wget https://downloads.apache.org/hadoop/common/hadoop-3.3.4/hadoop-3.3.4.tar.gztar -xzvf hadoop-3.3.4.tar.gz -C /opt/sudo ln -s /opt/hadoop-3.3.4 /opt/hadoop
2.2 环境变量配置
编辑~/.bashrc文件:
export HADOOP_HOME=/opt/hadoopexport PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbinexport HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
执行source ~/.bashrc使配置生效。
2.3 核心配置文件修改
2.3.1 hadoop-env.sh
设置JAVA_HOME:
echo "export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk" >> $HADOOP_HOME/etc/hadoop/hadoop-env.sh
2.3.2 core-site.xml
配置HDFS默认名称节点:
<configuration><property><name>fs.defaultFS</name><value>hdfs://localhost:9000</value></property></configuration>
2.3.3 hdfs-site.xml
设置本地存储路径:
<configuration><property><name>dfs.replication</name><value>1</value> <!-- 单机模式设为1 --></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>
2.4 初始化与启动
# 创建数据目录sudo mkdir -p /opt/hadoop/data/{namenode,datanode}sudo chown -R hadoop:hadoop /opt/hadoop/data# 格式化HDFS(仅首次需要)hdfs namenode -format# 启动服务start-dfs.sh# 验证进程jps# 应看到NameNode、DataNode、SecondaryNameNode进程
三、CentOS自动化部署方案
3.1 自动化脚本设计原则
- 参数化配置(通过变量控制版本、路径等)
- 错误处理机制
- 日志记录功能
- 依赖自动检测
3.2 完整自动化脚本示例
#!/bin/bash# Hadoop自动化部署脚本# 用法:sudo ./auto_deploy_hadoop.sh [hadoop_version]# 参数处理HADOOP_VERSION=${1:-3.3.4}HADOOP_USER="hadoop"INSTALL_DIR="/opt"LOG_FILE="/var/log/hadoop_install.log"# 日志函数log() {echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $LOG_FILE}# 检查用户if [ "$(id -un)" != "root" ]; thenlog "错误:必须使用root用户运行此脚本"exit 1fi# 安装依赖log "安装必要依赖..."yum install -y java-1.8.0-openjdk-devel wget sshd >> $LOG_FILE 2>&1# 创建用户if ! id "$HADOOP_USER" &>/dev/null; thenlog "创建hadoop用户..."useradd -m $HADOOP_USERpasswd $HADOOP_USER <<EOFhadoop123hadoop123EOFfi# 下载Hadooplog "下载Hadoop $HADOOP_VERSION..."HADOOP_TAR="hadoop-$HADOOP_VERSION.tar.gz"wget -q "https://downloads.apache.org/hadoop/common/hadoop-$HADOOP_VERSION/$HADOOP_TAR" -O /tmp/$HADOOP_TAR# 解压安装log "安装Hadoop..."HADOOP_DIR="$INSTALL_DIR/hadoop-$HADOOP_VERSION"if [ -d "$HADOOP_DIR" ]; thenlog "警告:检测到现有Hadoop目录,将备份后重新安装"mv "$HADOOP_DIR" "${HADOOP_DIR}.bak_$(date +%Y%m%d)"fitar -xzvf /tmp/$HADOOP_TAR -C $INSTALL_DIRln -sf "$HADOOP_DIR" "$INSTALL_DIR/hadoop"chown -R $HADOOP_USER:$HADOOP_USER "$INSTALL_DIR/hadoop"# 配置环境变量log "配置环境变量..."ENV_FILE="/home/$HADOOP_USER/.bashrc"cat >> $ENV_FILE <<EOFexport HADOOP_HOME=$INSTALL_DIR/hadoopexport PATH=\$PATH:\$HADOOP_HOME/bin:\$HADOOP_HOME/sbinexport HADOOP_CONF_DIR=\$HADOOP_HOME/etc/hadoopEOF# 配置Hadooplog "配置Hadoop..."HADOOP_CONF="$INSTALL_DIR/hadoop/etc/hadoop"# hadoop-env.shecho "export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk" > "$HADOOP_CONF/hadoop-env.sh"# core-site.xmlcat > "$HADOOP_CONF/core-site.xml" <<EOF<configuration><property><name>fs.defaultFS</name><value>hdfs://localhost:9000</value></property></configuration>EOF# hdfs-site.xmlcat > "$HADOOP_CONF/hdfs-site.xml" <<EOF<configuration><property><name>dfs.replication</name><value>1</value></property><property><name>dfs.namenode.name.dir</name><value>$INSTALL_DIR/hadoop/data/namenode</value></property><property><name>dfs.datanode.data.dir</name><value>$INSTALL_DIR/hadoop/data/datanode</value></property></configuration>EOF# 初始化数据目录log "初始化数据目录..."DATA_DIR="$INSTALL_DIR/hadoop/data"mkdir -p "$DATA_DIR"/{namenode,datanode}chown -R $HADOOP_USER:$HADOOP_USER "$DATA_DIR"log "部署完成!请使用以下命令继续:"log "1. su - $HADOOP_USER"log "2. source ~/.bashrc"log "3. hdfs namenode -format"log "4. start-dfs.sh"exit 0
3.3 脚本使用说明
- 保存为
auto_deploy_hadoop.sh - 赋予执行权限:
chmod +x auto_deploy_hadoop.sh - 运行脚本:
sudo ./auto_deploy_hadoop.sh [版本号]
四、验证与测试
4.1 基础功能验证
# 创建测试文件echo "Test Hadoop" > testfile.txt# 上传到HDFShdfs dfs -mkdir -p /user/hadoophdfs dfs -put testfile.txt /user/hadoop/# 验证文件hdfs dfs -ls /user/hadoop/# 应显示testfile.txt
4.2 自动化脚本验证
检查日志文件/var/log/hadoop_install.log,确认无ERROR级别日志。
五、常见问题解决方案
-
端口冲突:检查9000、50070等端口是否被占用
netstat -tulnp | grep 9000
-
权限问题:确保数据目录权限正确
chown -R hadoop:hadoop /opt/hadoop/data
-
Java版本不匹配:确认JAVA_HOME指向正确版本
$JAVA_HOME/bin/java -version
-
内存不足:调整
hadoop-env.sh中的HADOOP_HEAPSIZE参数
六、最佳实践建议
- 将自动化脚本纳入CI/CD流程
- 定期备份namenode元数据(
$HADOOP_HOME/data/namenode/current) -
监控关键指标:
- HDFS存储使用率
- NameNode/DataNode进程状态
- 网络带宽使用情况
-
升级策略:
- 小版本升级可直接替换二进制文件
- 大版本升级建议全新部署
- 升级前务必备份配置文件和数据目录
通过本指南的实现,开发者可以在30分钟内完成从零开始的Hadoop单机环境部署,自动化脚本将部署时间缩短至5分钟以内,显著提升开发效率。建议在实际生产环境中结合Ansible/Puppet等配置管理工具进行更高级的自动化管理。