一键安装 Hadoop 3.3.6 自动化脚本详解 |(含 JAVA_HOME 自动配置)

适用系统 :CentOS / Ubuntu / 其他主流 Linux 发行版
目标版本 :Apache Hadoop 3.3.6(稳定 LTS 版本)
安装路径/opt/hadoop
前提条件 :已安装完整 JDK(非 JRE),并正确设置 JAVA_HOME 环境变量


在大数据生态中,Hadoop 是分布式存储与计算的基石。然而手动部署 Hadoop 涉及下载、解压、环境变量配置、hadoop-env.sh 修改等多个步骤,稍有不慎就会导致"命令找不到"或"Java home not set"等错误。

本文提供一个 全自动 Bash 安装脚本,可一键完成 Hadoop 3.3.6 的下载、安装、环境变量配置及 Java 路径注入,极大提升部署效率,特别适合开发测试环境快速搭建或自动化运维场景。


📌 脚本核心功能亮点

  • ✅ 强制 root 权限运行(确保 /opt/ 可写)
  • ✅ 严格校验 JAVA_HOME 是否指向完整 JDK(需包含 javajps
  • ✅ 自动从 Apache 官方镜像下载 Hadoop 3.3.6
  • ✅ 避免重复下载 .tar.gz 文件(检查 /tmp/
  • ✅ 避免重复解压(检测 /opt/hadoop 或原始目录是否存在)
  • 智能写入 /etc/profile 环境变量(防止重复添加)
  • 自动修改 hadoop-env.sh 中的 JAVA_HOME(支持注释行替换)
  • ✅ 安装后自动验证 hdfs version 是否可用

📜 完整安装脚本

将以下内容保存为 install_hadoop.sh

bash 复制代码
#!/bin/bash
# 自动安装 Hadoop 并配置 JAVA_HOME
set -e

HADOOP_VERSION="3.3.6"
HADOOP_INSTALL_DIR="/opt/hadoop"

echo "=== Hadoop $HADOOP_VERSION 自动安装脚本 ==="

# 检查是否为 root 用户
if [ "$EUID" -ne 0 ]; then
  echo "❌ 请以 root 用户运行此脚本。"
  exit 1
fi

# 检查 JAVA_HOME 是否设置
if [ -z "$JAVA_HOME" ]; then
    echo "❌ JAVA_HOME 未设置,请先设置完整 JDK 的 JAVA_HOME"
    exit 1
fi

# 检查 bin 目录下是否有 java 和 jps
if [ ! -x "$JAVA_HOME/bin/java" ] || [ ! -x "$JAVA_HOME/bin/jps" ]; then
    echo "❌ JAVA_HOME 指向的目录不完整,缺少 java 或 jps,请使用完整 JDK"
    exit 1
fi

# 下载 Hadoop 包(如不存在)
if [ ! -f "/tmp/hadoop-$HADOOP_VERSION.tar.gz" ]; then
  echo ">>> 正在下载 Hadoop $HADOOP_VERSION..."
  wget -q https://downloads.apache.org/hadoop/common/hadoop-$HADOOP_VERSION/hadoop-$HADOOP_VERSION.tar.gz -P /tmp
else
  echo ">>> 已存在 /tmp/hadoop-$HADOOP_VERSION.tar.gz,跳过下载。"
fi

# 检查是否已安装 Hadoop
if [ -d "$HADOOP_INSTALL_DIR" ] || [ -d "/opt/hadoop-$HADOOP_VERSION" ]; then
  echo ">>> 检测到 Hadoop 目录已存在,跳过解压步骤。"
else
  echo ">>> 解压 Hadoop..."
  tar -zxf /tmp/hadoop-$HADOOP_VERSION.tar.gz -C /opt/
  mv -f /opt/hadoop-$HADOOP_VERSION $HADOOP_INSTALL_DIR
fi

# 写入环境变量(避免重复添加)
if ! grep -q "HADOOP_HOME" /etc/profile; then
  echo ">>> 写入 /etc/profile 环境变量..."
  cat >> /etc/profile <<EOF

# Hadoop 环境变量
export JAVA_HOME=$JAVA_HOME
export HADOOP_HOME=$HADOOP_INSTALL_DIR
export PATH=\$PATH:\$JAVA_HOME/bin:\$HADOOP_HOME/bin:\$HADOOP_HOME/sbin
EOF
fi

# 修改 Hadoop 的 Java 环境配置
echo ">>> 配置 hadoop-env.sh ..."

HADOOP_ENV_FILE="$HADOOP_INSTALL_DIR/etc/hadoop/hadoop-env.sh"

# 如果文件中已有 export JAVA_HOME,则更新为当前值;否则追加一行
if grep -q "^export JAVA_HOME=" "$HADOOP_ENV_FILE"; then
  sed -i "s|^export JAVA_HOME=.*|export JAVA_HOME=$JAVA_HOME|" "$HADOOP_ENV_FILE"
elif grep -q "^# export JAVA_HOME=" "$HADOOP_ENV_FILE"; then
  sed -i "s|^# export JAVA_HOME=.*|export JAVA_HOME=$JAVA_HOME|" "$HADOOP_ENV_FILE"
else
  echo "export JAVA_HOME=$JAVA_HOME" >> "$HADOOP_ENV_FILE"
fi

# 安全加载系统环境变量
if [ -f /etc/profile ]; then
  source /etc/profile || true
fi

# 测试 Hadoop 是否可用
echo ">>> 验证 Hadoop 安装..."
if hdfs version &>/dev/null; then
  echo "✅ Hadoop 安装成功!"
  hdfs version
else
  echo "⚠️ Hadoop 安装完成,但无法运行 hdfs,请检查日志。"
fi

echo "=== Hadoop $HADOOP_VERSION 安装完成 ==="

▶️ 使用步骤

1. 确保已安装 JDK 并设置 JAVA_HOME

bash 复制代码
# 示例(OpenJDK 11)
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk

⚠️ 重要 :必须使用 JDK (含 jps 工具),仅 JRE 会导致脚本报错!

2. 保存脚本并赋予执行权限

bash 复制代码
sudo vim install_hadoop.sh
chmod +x install_hadoop.sh

3. 以 root 身份运行(关键!)

bash 复制代码
sudo -E ./install_hadoop.sh

🔔 注意:使用 -E 参数可保留当前用户的环境变量(尤其是 JAVA_HOME),否则 sudo 会清空环境变量导致脚本失败!

4. 验证安装结果

bash 复制代码
source /etc/profile  # 若当前 shell 未生效
hdfs version

预期输出:

复制代码
Hadoop 3.3.6
...

🔧 脚本关键技术点解析

1. sudo -E 的必要性

普通 sudo 会重置环境变量,导致 $JAVA_HOME 为空。-E 选项保留调用者的环境变量,确保脚本能读取到正确的 JDK 路径。

2. 智能修改 hadoop-env.sh

Hadoop 默认的 hadoop-env.shJAVA_HOME 是注释状态。脚本通过 sed 精准匹配三种情况:

  • 已取消注释 → 直接替换
  • 仍为注释 → 取消注释并赋值
  • 完全不存在 → 追加新行

3. PATH 安全拼接

/etc/profile 中同时加入 $HADOOP_HOME/binsbin,确保 hdfsyarnstart-dfs.sh 等命令全局可用。


❓ 常见问题解答

Q1:为什么必须用 root?

A:脚本需写入 /opt/(系统级目录)和 /etc/profile(全局环境变量),普通用户无权限。

Q2:能否用于 Hadoop 3.4.x 或 3.3.4?

A:可以!只需修改脚本开头的 HADOOP_VERSION="3.3.6" 为对应版本号(需确认 Apache 官网存在该版本)。

Q3:安装后能直接启动集群吗?

A:不能 。本脚本仅完成 单机伪分布模式的基础环境搭建。要运行 HDFS/YARN,还需手动配置:

  • core-site.xml
  • hdfs-site.xml
  • yarn-site.xml
  • mapred-site.xml
  • 格式化 NameNode:hdfs namenode -format

✅ 总结

本脚本解决了 Hadoop 安装中最常见的两个痛点:

  1. 环境变量配置繁琐
  2. hadoop-env.sh 中 Java 路径未设置导致启动失败

通过自动化处理,开发者可将精力集中在 集群配置与业务开发 上,而非重复的环境搭建。

💡 建议组合使用

先运行 MySQL 5.7 自动安装脚本 → 再运行 Hive 自动安装脚本 → 最后运行本 Hadoop 脚本,即可快速构建 Hive + Hadoop + MySQL 元数据仓库环境!

相关推荐
张柏慈8 小时前
Java性能优化:实战技巧与案例解析
java
天“码”行空8 小时前
简化Lambda——方法引用
java·开发语言
带刺的坐椅9 小时前
MCP 进化:让静态 Tool 进化为具备“上下文感知”的远程 Skills
java·ai·llm·agent·solon·mcp·tool-call·skills
java1234_小锋9 小时前
Java线程之间是如何通信的?
java·开发语言
张张努力变强9 小时前
C++ Date日期类的设计与实现全解析
java·开发语言·c++·算法
while(1){yan}10 小时前
Spring事务
java·数据库·spring boot·后端·java-ee·mybatis
毕设源码-赖学姐10 小时前
【开题答辩全过程】以 高校社团管理平台为例,包含答辩的问题和答案
java
运维行者_11 小时前
2026 技术升级,OpManager 新增 AI 网络拓扑与带宽预测功能
运维·网络·数据库·人工智能·安全·web安全·自动化
余瑜鱼鱼鱼11 小时前
线程和进程的区别和联系
java·开发语言·jvm