作为一名长期从事大数据平台搭建的工程师,我深知手动部署Hadoop的痛点。每次新环境搭建都要重复下载、解压、配置环境变量、修改hadoop-env.sh等一系列操作,不仅耗时耗力,还容易出错。今天分享的这个自动化脚本,是我在实际工作中反复打磨的成果,能帮你省去90%的部署时间。
这个脚本最核心的价值在于解决了Hadoop部署中的两个老大难问题:
脚本采用Bash编写,兼容主流的Linux发行版(CentOS/Ubuntu等),主要功能包括:
提示:脚本设计时特别考虑了幂等性,即使重复运行也不会造成配置混乱,这对自动化运维场景非常重要。
在运行脚本前,你需要确保:
验证JDK是否合格的方法:
bash复制$JAVA_HOME/bin/java -version
$JAVA_HOME/bin/jps -help
如果这两个命令都能正常执行,说明JDK环境符合要求。
脚本开头设置了set -e,这意味着任何命令执行失败都会立即退出,避免错误累积。这种防御性编程在自动化脚本中尤为重要。
权限检查部分:
bash复制if [ "$EUID" -ne 0 ]; then
echo "❌ 请以 root 用户运行此脚本。"
exit 1
fi
这里使用EUID而不是UID,因为EUID反映的是实际生效的用户ID,能正确处理sudo场景。
脚本对JDK的检查非常严格:
bash复制if [ ! -x "$JAVA_HOME/bin/java" ] || [ ! -x "$JAVA_HOME/bin/jps" ]; then
echo "❌ JAVA_HOME 指向的目录不完整,缺少 java 或 jps,请使用完整 JDK"
exit 1
fi
特别注意对jps的检查,这是很多初学者容易忽略的点。仅安装JRE会导致脚本报错,因为JRE不包含jps工具。
下载部分采用了"下载前检查"的模式:
bash复制if [ ! -f "/tmp/hadoop-$HADOOP_VERSION.tar.gz" ]; then
wget -q https://downloads.apache.org/hadoop/common/hadoop-$HADOOP_VERSION/hadoop-$HADOOP_VERSION.tar.gz -P /tmp
fi
使用-q参数让wget静默下载,避免输出干扰。文件保存在/tmp目录,便于系统自动清理。
解压时的目录处理也很讲究:
bash复制mv -f /opt/hadoop-$HADOOP_VERSION $HADOOP_INSTALL_DIR
使用-f强制覆盖,避免因目录已存在导致失败。这种设计让脚本具备更好的容错性。
脚本将Hadoop相关配置写入/etc/profile,确保对所有用户生效:
bash复制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
这里使用heredoc语法,清晰且不易出错。特别注意PATH变量的拼接方式,保留了原有PATH内容。
这部分是脚本的精华所在,处理了三种可能的情况:
实现代码:
bash复制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
使用^确保匹配行首,避免误修改。分隔符改用|而非常用的/,因为路径中包含/。
很多用户会遇到"JAVA_HOME未设置"的错误,通常是因为没有使用-E参数:
bash复制sudo -E ./install_hadoop.sh
-E参数会保留当前用户的环境变量,否则sudo会创建一个干净的环境,导致JAVA_HOME丢失。
脚本最后会尝试执行hdfs version来验证安装:
bash复制if hdfs version &>/dev/null; then
echo "✅ Hadoop 安装成功!"
hdfs version
else
echo "⚠️ Hadoop 安装完成,但无法运行 hdfs,请检查日志。"
fi
这里将命令输出重定向到/dev/null,只关心执行是否成功,避免无关输出干扰。
虽然脚本完成了基础安装,但要运行Hadoop集群还需要额外配置:
hdfs namenode -format这些配置根据你的集群规模和使用场景会有所不同,建议参考Hadoop官方文档进行定制。
可能原因:
解决方案:
sudo -E运行脚本可能原因:
解决方案:
source /etc/profile脚本默认安装Hadoop 3.3.6,这是长期支持版本。如果需要其他版本,只需修改脚本开头的:
bash复制HADOOP_VERSION="3.3.6"
为想要的版本号,并确认该版本在Apache官网存在。
这个脚本已经能满足基本需求,但还可以进一步优化:
我在生产环境中使用的增强版还包含了这些功能,考虑到通用性,这里分享的是基础版本。如果你需要更复杂的功能,可以基于这个脚本进行扩展。
这个脚本在我们团队的应用场景包括:
特别是在需要频繁创建销毁环境的场景下,这个脚本能节省大量重复劳动时间。我们统计过,使用脚本后,Hadoop环境准备时间从原来的30分钟缩短到3分钟以内。
虽然脚本需要root权限运行,但为了安全考虑,建议:
脚本中所有关键操作都有明确的提示和错误检查,避免静默失败导致的安全隐患。
脚本设计时考虑了性能优化:
这些检查虽然增加了少量代码复杂度,但显著提升了脚本的重复执行效率。
这个脚本的模式可以推广到其他大数据组件的安装,比如:
实际上,我已经基于类似的思路开发了一系列自动化部署脚本,形成了一个大数据环境自动化部署工具集。这种模式特别适合需要快速搭建复杂环境的场景。