CentOS下Hadoop单机部署与自动化实现指南

一、Hadoop单机部署基础准备

1.1 环境要求

CentOS 7/8系统(推荐最小化安装),需满足以下配置:

  • 内存:4GB以上(开发环境建议8GB)
  • 磁盘空间:至少20GB可用空间
  • 网络:配置静态IP地址
  • 用户权限:使用非root用户操作(建议创建hadoop专用用户)
  1. # 创建hadoop用户示例
  2. sudo useradd -m hadoop
  3. sudo passwd hadoop

1.2 依赖安装

需要预先安装以下组件:

  • Java JDK 1.8+(推荐OpenJDK)
  • SSH服务(用于本地伪分布式通信)
  • wget/curl(下载工具)
  1. # JDK安装示例(OpenJDK 8)
  2. sudo yum install -y java-1.8.0-openjdk-devel
  3. # 验证安装
  4. java -version
  5. # 应输出类似:openjdk version "1.8.0_302"

二、Hadoop单机版安装流程

2.1 下载与解压

从Apache官网获取稳定版Hadoop(推荐3.x系列):

  1. wget https://downloads.apache.org/hadoop/common/hadoop-3.3.4/hadoop-3.3.4.tar.gz
  2. tar -xzvf hadoop-3.3.4.tar.gz -C /opt/
  3. sudo ln -s /opt/hadoop-3.3.4 /opt/hadoop

2.2 环境变量配置

编辑~/.bashrc文件:

  1. export HADOOP_HOME=/opt/hadoop
  2. export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
  3. export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

执行source ~/.bashrc使配置生效。

2.3 核心配置文件修改

2.3.1 hadoop-env.sh

设置JAVA_HOME:

  1. 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默认名称节点:

  1. <configuration>
  2. <property>
  3. <name>fs.defaultFS</name>
  4. <value>hdfs://localhost:9000</value>
  5. </property>
  6. </configuration>

2.3.3 hdfs-site.xml

设置本地存储路径:

  1. <configuration>
  2. <property>
  3. <name>dfs.replication</name>
  4. <value>1</value> <!-- 单机模式设为1 -->
  5. </property>
  6. <property>
  7. <name>dfs.namenode.name.dir</name>
  8. <value>/opt/hadoop/data/namenode</value>
  9. </property>
  10. <property>
  11. <name>dfs.datanode.data.dir</name>
  12. <value>/opt/hadoop/data/datanode</value>
  13. </property>
  14. </configuration>

2.4 初始化与启动

  1. # 创建数据目录
  2. sudo mkdir -p /opt/hadoop/data/{namenode,datanode}
  3. sudo chown -R hadoop:hadoop /opt/hadoop/data
  4. # 格式化HDFS(仅首次需要)
  5. hdfs namenode -format
  6. # 启动服务
  7. start-dfs.sh
  8. # 验证进程
  9. jps
  10. # 应看到NameNode、DataNode、SecondaryNameNode进程

三、CentOS自动化部署方案

3.1 自动化脚本设计原则

  1. 参数化配置(通过变量控制版本、路径等)
  2. 错误处理机制
  3. 日志记录功能
  4. 依赖自动检测

3.2 完整自动化脚本示例

  1. #!/bin/bash
  2. # Hadoop自动化部署脚本
  3. # 用法:sudo ./auto_deploy_hadoop.sh [hadoop_version]
  4. # 参数处理
  5. HADOOP_VERSION=${1:-3.3.4}
  6. HADOOP_USER="hadoop"
  7. INSTALL_DIR="/opt"
  8. LOG_FILE="/var/log/hadoop_install.log"
  9. # 日志函数
  10. log() {
  11. echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $LOG_FILE
  12. }
  13. # 检查用户
  14. if [ "$(id -un)" != "root" ]; then
  15. log "错误:必须使用root用户运行此脚本"
  16. exit 1
  17. fi
  18. # 安装依赖
  19. log "安装必要依赖..."
  20. yum install -y java-1.8.0-openjdk-devel wget sshd >> $LOG_FILE 2>&1
  21. # 创建用户
  22. if ! id "$HADOOP_USER" &>/dev/null; then
  23. log "创建hadoop用户..."
  24. useradd -m $HADOOP_USER
  25. passwd $HADOOP_USER <<EOF
  26. hadoop123
  27. hadoop123
  28. EOF
  29. fi
  30. # 下载Hadoop
  31. log "下载Hadoop $HADOOP_VERSION..."
  32. HADOOP_TAR="hadoop-$HADOOP_VERSION.tar.gz"
  33. wget -q "https://downloads.apache.org/hadoop/common/hadoop-$HADOOP_VERSION/$HADOOP_TAR" -O /tmp/$HADOOP_TAR
  34. # 解压安装
  35. log "安装Hadoop..."
  36. HADOOP_DIR="$INSTALL_DIR/hadoop-$HADOOP_VERSION"
  37. if [ -d "$HADOOP_DIR" ]; then
  38. log "警告:检测到现有Hadoop目录,将备份后重新安装"
  39. mv "$HADOOP_DIR" "${HADOOP_DIR}.bak_$(date +%Y%m%d)"
  40. fi
  41. tar -xzvf /tmp/$HADOOP_TAR -C $INSTALL_DIR
  42. ln -sf "$HADOOP_DIR" "$INSTALL_DIR/hadoop"
  43. chown -R $HADOOP_USER:$HADOOP_USER "$INSTALL_DIR/hadoop"
  44. # 配置环境变量
  45. log "配置环境变量..."
  46. ENV_FILE="/home/$HADOOP_USER/.bashrc"
  47. cat >> $ENV_FILE <<EOF
  48. export HADOOP_HOME=$INSTALL_DIR/hadoop
  49. export PATH=\$PATH:\$HADOOP_HOME/bin:\$HADOOP_HOME/sbin
  50. export HADOOP_CONF_DIR=\$HADOOP_HOME/etc/hadoop
  51. EOF
  52. # 配置Hadoop
  53. log "配置Hadoop..."
  54. HADOOP_CONF="$INSTALL_DIR/hadoop/etc/hadoop"
  55. # hadoop-env.sh
  56. echo "export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk" > "$HADOOP_CONF/hadoop-env.sh"
  57. # core-site.xml
  58. cat > "$HADOOP_CONF/core-site.xml" <<EOF
  59. <configuration>
  60. <property>
  61. <name>fs.defaultFS</name>
  62. <value>hdfs://localhost:9000</value>
  63. </property>
  64. </configuration>
  65. EOF
  66. # hdfs-site.xml
  67. cat > "$HADOOP_CONF/hdfs-site.xml" <<EOF
  68. <configuration>
  69. <property>
  70. <name>dfs.replication</name>
  71. <value>1</value>
  72. </property>
  73. <property>
  74. <name>dfs.namenode.name.dir</name>
  75. <value>$INSTALL_DIR/hadoop/data/namenode</value>
  76. </property>
  77. <property>
  78. <name>dfs.datanode.data.dir</name>
  79. <value>$INSTALL_DIR/hadoop/data/datanode</value>
  80. </property>
  81. </configuration>
  82. EOF
  83. # 初始化数据目录
  84. log "初始化数据目录..."
  85. DATA_DIR="$INSTALL_DIR/hadoop/data"
  86. mkdir -p "$DATA_DIR"/{namenode,datanode}
  87. chown -R $HADOOP_USER:$HADOOP_USER "$DATA_DIR"
  88. log "部署完成!请使用以下命令继续:"
  89. log "1. su - $HADOOP_USER"
  90. log "2. source ~/.bashrc"
  91. log "3. hdfs namenode -format"
  92. log "4. start-dfs.sh"
  93. exit 0

3.3 脚本使用说明

  1. 保存为auto_deploy_hadoop.sh
  2. 赋予执行权限:chmod +x auto_deploy_hadoop.sh
  3. 运行脚本:sudo ./auto_deploy_hadoop.sh [版本号]

四、验证与测试

4.1 基础功能验证

  1. # 创建测试文件
  2. echo "Test Hadoop" > testfile.txt
  3. # 上传到HDFS
  4. hdfs dfs -mkdir -p /user/hadoop
  5. hdfs dfs -put testfile.txt /user/hadoop/
  6. # 验证文件
  7. hdfs dfs -ls /user/hadoop/
  8. # 应显示testfile.txt

4.2 自动化脚本验证

检查日志文件/var/log/hadoop_install.log,确认无ERROR级别日志。

五、常见问题解决方案

  1. 端口冲突:检查9000、50070等端口是否被占用

    1. netstat -tulnp | grep 9000
  2. 权限问题:确保数据目录权限正确

    1. chown -R hadoop:hadoop /opt/hadoop/data
  3. Java版本不匹配:确认JAVA_HOME指向正确版本

    1. $JAVA_HOME/bin/java -version
  4. 内存不足:调整hadoop-env.sh中的HADOOP_HEAPSIZE参数

六、最佳实践建议

  1. 将自动化脚本纳入CI/CD流程
  2. 定期备份namenode元数据($HADOOP_HOME/data/namenode/current
  3. 监控关键指标:

    • HDFS存储使用率
    • NameNode/DataNode进程状态
    • 网络带宽使用情况
  4. 升级策略:

    • 小版本升级可直接替换二进制文件
    • 大版本升级建议全新部署
    • 升级前务必备份配置文件和数据目录

通过本指南的实现,开发者可以在30分钟内完成从零开始的Hadoop单机环境部署,自动化脚本将部署时间缩短至5分钟以内,显著提升开发效率。建议在实际生产环境中结合Ansible/Puppet等配置管理工具进行更高级的自动化管理。