# hadoop在线部署脚本
**Repository Path**: meda/hadoop
## Basic Information
- **Project Name**: hadoop在线部署脚本
- **Description**: 一键傻瓜式安装hadoop安装程序。
- **Primary Language**: Shell
- **License**: ISC
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 6
- **Forks**: 1
- **Created**: 2022-11-28
- **Last Updated**: 2026-06-14
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Hadoop & Hive 自动化安装脚本
[](LICENSE)
[](https://ubuntu.com/)
[](https://hadoop.apache.org/)
[](https://hive.apache.org/)
> 一键式部署 Hadoop + Hive 大数据环境,自动识别国内外网络环境并选择最优镜像源。
## 📖 目录
- [项目介绍](#-项目介绍)
- [核心特性](#-核心特性)
- [系统要求](#-系统要求)
- [快速开始](#-快速开始)
- [脚本详解](#-脚本详解)
- [安装后测试](#-安装后测试)
- [镜像源说明](#-镜像源说明)
- [安全特性](#-安全特性)
- [常见问题](#-常见问题)
- [参考资料](#-参考资料)
- [许可证](#-许可证)
- [联系方式](#-联系方式)
---
## 📝 项目介绍
本项目提供 Hadoop 和 Hive 的自动化安装脚本,实现一键式部署大数据基础环境。
**两个核心脚本:**
| 脚本 | 功能 | 说明 |
|------|------|------|
| `hadoop2026.sh` | 安装 Hadoop + Java + MySQL | 为 Hive 准备基础环境 |
| `hive.sh` | 安装 Hive + 配置元数据库 | 依赖 hadoop2026.sh 的环境 |
---
## ✨ 核心特性
### 🌍 智能镜像源分流
脚本启动时自动检测网络环境,为用户选择最优下载源:
```
检测流程:
1. 测试清华大学镜像站连通性(3秒超时)
2. 检测国内镜像下载速度(5秒超时)
3. 速度正常 → 使用国内镜像(清华源)
4. 无法访问 → 使用国际镜像(Apache 官方)
```
**速度对比:**
| 用户位置 | 默认速度 | 优化后速度 | 提升 |
|---------|---------|-----------|------|
| 国内用户 | 5-10 MB/s | 30-50 MB/s | **3-5倍** ⚡ |
| 国外用户 | 正常 | 正常 | - |
### 🔧 自动问题修复
- **guava.jar 版本冲突**:自动检测 Hadoop 与 Hive 的 guava 版本,不一致时自动统一
- **HADOOP_HOME 智能检测**:环境变量未设置时自动从默认路径检测并临时设置
- **旧版本保护**:检测到已有 Hive 安装时,先备份再覆盖
- **SSH 免密登录自动配置**:自动生成密钥并配置本地免密登录,无需手动操作
- **Hadoop 配置文件自动生成**:自动创建 core-site.xml、hdfs-site.xml 等核心配置
- **HDFS 自动格式化**:首次安装时自动格式化 NameNode,避免手动操作
### 🛡️ 安全防护
- **自动创建非root用户**:以root运行时自动创建 `hadoop` 用户并切换执行
- 严格错误处理(`set -e -u -o pipefail`)
- 所有 `cd` 命令均带错误检查
- 危险操作(`rm -rf`)前先备份
- 安装前检查磁盘空间
- MySQL 密码隐藏输入
---
## 💻 系统要求
| 项目 | 要求 |
|-----|------|
| **操作系统** | Ubuntu 22.04 或更高版本 |
| **CPU** | 2 核心及以上 |
| **内存** | 4 GB 及以上(推荐 8 GB) |
| **磁盘空间** | Hadoop 需 10GB,Hive 需 5GB |
| **网络** | 联网环境 |
| **运行用户** | 任意用户(root或普通用户均可,脚本会自动处理) |
脚本会自动检测并安装以下依赖:OpenJDK 8、MySQL Server、wget、tar。
---
## 🚀 快速开始
### 完整安装流程
#### 方式一:使用 root 用户(推荐新手)
```bash
# 进入项目目录
cd ~/hadoop
# 1️⃣ 以 root 身份运行(脚本会自动创建 hadoop 用户)
sudo bash hadoop2026.sh
# 或者直接以 root 登录后运行
bash hadoop2026.sh
# 脚本会自动:
# - 创建 hadoop 用户(密码: hadoop)
# - 切换到 hadoop 用户继续安装
# - 完成所有配置
# 2️⃣ 切换到 hadoop 用户
su - hadoop
source ~/.bashrc
# 3️⃣ 安装 Hive(会提示输入 MySQL root 密码)
cd ~/hadoop # 确保脚本在正确目录
chmod +x hive.sh
bash hive.sh
source ~/.bashrc
# 4️⃣ 启动并使用
start-dfs.sh # 启动 Hadoop HDFS
hive # 启动 Hive
```
#### 方式二:使用普通用户
```bash
# 进入项目目录
cd ~/hadoop
# 1️⃣ 安装 Hadoop + Java + MySQL(需要 sudo 权限)
chmod +x hadoop2026.sh
bash hadoop2026.sh
source ~/.bashrc
# 2️⃣ 安装 Hive(会提示输入 MySQL root 密码)
chmod +x hive.sh
bash hive.sh
source ~/.bashrc
# 3️⃣ 启动并使用
start-dfs.sh # 启动 Hadoop HDFS
hive # 启动 Hive
```
> ⚠️ **重要提示:**
> - 如果使用方式一(root用户),默认会创建用户名为 `hadoop`,密码为 `hadoop`
> - **强烈建议在安装完成后修改密码**:`passwd`
> - 每个脚本运行完成后,必须执行 `source ~/.bashrc` 使环境变量生效
---
## 📦 脚本详解
### hadoop2026.sh
**安装内容:** OpenJDK 8、Hadoop 3.3.5、MySQL Server、MySQL Connector/J 5.1.49
**执行流程:**
| 步骤 | 函数 | 说明 |
|-----|------|------|
| 1 | `security_check` | 检查用户身份,root用户自动创建hadoop用户并切换 |
| 2 | `detect_mirror` | 检测网络环境,选择镜像源 |
| 3 | `install_java` | 安装 OpenJDK 8 |
| 4 | `install_mysql` | 安装 MySQL Server(交互式设置密码) |
| 5 | `install_hadoop` | 下载并安装 Hadoop 3.3.5 |
| 6 | `configure_hadoop` | 配置 Hadoop 核心文件(core-site.xml、hdfs-site.xml 等) |
| 7 | `install_mysql_connector` | 下载 MySQL JDBC 驱动 |
| 8 | `configure_env` | 配置环境变量和 hadoop-env.sh |
| 9 | `configure_ssh` | 配置 SSH 免密登录 |
| 10 | `format_namenode` | 格式化 HDFS NameNode |
| 11 | `verify_install` | 验证安装结果 |
**配置位置:**
- Hadoop: `/usr/local/hadoop/`
- Hadoop 配置文件: `/usr/local/hadoop/etc/hadoop/`
- core-site.xml(核心配置)
- hdfs-site.xml(HDFS 配置)
- mapred-site.xml(MapReduce 配置)
- yarn-site.xml(YARN 配置)
- 数据目录: `~/hadoop/`
- `~/hadoop/tmp`(临时目录)
- `~/hadoop/hdfs/namenode`(NameNode 数据)
- `~/hadoop/hdfs/datanode`(DataNode 数据)
- 环境变量: `~/.bashrc`
- SSH 配置: `~/.ssh/`
- MySQL 驱动备份: `~/mysql-connector/`
- sudo配置: `/etc/sudoers.d/hadoop`(仅当使用root运行时创建)
> 💡 **用户创建说明:** 以root用户运行时,脚本会自动创建 `hadoop` 用户(密码: `hadoop`),并配置临时的sudo无密码权限以便安装。安装完成后请及时修改密码。
### hive.sh
**安装内容:** Apache Hive 3.1.3、MySQL JDBC 驱动 5.1.40
**执行流程:**
| 步骤 | 函数 | 说明 |
|-----|------|------|
| 0 | `security_check` | 安全检查(root、命令、磁盘) |
| 0 | `detect_mirror` | 选择最优镜像源 |
| 0 | `check_prerequisites` | 检查 Hadoop 和 MySQL |
| 1 | `download_and_extract_hive` | 下载并解压 Hive(旧版本自动备份) |
| 2 | `configure_environment` | 配置 ~/.bashrc 环境变量 |
| 3 | `configure_hive_site` | 创建 hive-site.xml |
| 4 | `install_mysql_connector` | 安装 MySQL JDBC 驱动 |
| 5 | `configure_mysql_database` | 创建 hive 数据库和用户 |
| 6 | `initialize_schema` | schematool 初始化元数据 |
| 7 | `fix_guava_conflict` | 自动修复 guava.jar 冲突 |
**MySQL 默认配置:**
| 项目 | 值 |
|-----|---|
| 数据库 | `hive` |
| 用户名 | `hive` |
| 密码 | `hive` |
> ⚠️ 默认密码仅适用于学习环境,生产环境请修改 `hive.sh` 第 32 行的 `MYSQL_PASSWORD`。
---
## ✅ 安装后测试
### 测试 1:验证 Hadoop
```bash
# 1. 检查版本
hadoop version # 应显示 Hadoop 3.3.5
# 2. 启动 HDFS
start-dfs.sh
# 3. 检查进程
jps # 应看到 NameNode、DataNode、SecondaryNameNode
# 4. 访问 Web UI
# 在浏览器打开: http://localhost:9870
# 应该看到 NameNode 的管理界面
# 5. 测试 HDFS 命令
hdfs dfs -mkdir -p /user/$(whoami)
hdfs dfs -ls /
echo "Hello Hadoop" > test.txt
hdfs dfs -put test.txt /user/$(whoami)/
hdfs dfs -cat /user/$(whoami)/test.txt
rm test.txt
```
### 测试 2:验证 Hive 启动
```bash
hive
# 成功启动后显示:
# hive>
```
### 测试 3:Hive 基本操作
在 `hive>` 提示符下依次执行:
```sql
-- 1. 查看数据库
SHOW DATABASES;
-- 2. 创建测试数据库
CREATE DATABASE test_db;
USE test_db;
-- 3. 创建测试表
CREATE TABLE students (
id INT,
name STRING,
age INT
) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
-- 4. 插入数据
INSERT INTO students VALUES (1, 'Alice', 20);
INSERT INTO students VALUES (2, 'Bob', 22);
INSERT INTO students VALUES (3, 'Charlie', 21);
-- 5. 查询数据
SELECT * FROM students;
-- 6. 聚合查询
SELECT COUNT(*) FROM students;
-- 7. 条件查询
SELECT * FROM students WHERE age > 20;
-- 8. 清理测试数据
DROP TABLE students;
DROP DATABASE test_db;
exit;
```
**预期查询结果:**
```
OK
1 Alice 20
2 Bob 22
3 Charlie 21
Time taken: 0.3 seconds, Fetched: 3 row(s)
```
### 测试 4:验证 MySQL 元数据
```bash
mysql -u root -p
mysql> USE hive;
mysql> SHOW TABLES; # 应看到 TBLS、DBS、COLUMNS_V2 等元数据表
mysql> exit;
```
### 测试 5:词频统计完整示例
```bash
# 准备测试数据
mkdir -p ~/hive_test && cd ~/hive_test
echo "hello world" > file1.txt
echo "hello hadoop" > file2.txt
echo "hello hive" > file3.txt
# 启动 Hive
hive
```
```sql
-- 创建表并加载数据(注意替换 <用户名>)
CREATE TABLE docs(line STRING);
LOAD DATA LOCAL INPATH '/home/<用户名>/hive_test/file1.txt' INTO TABLE docs;
LOAD DATA LOCAL INPATH '/home/<用户名>/hive_test/file2.txt' INTO TABLE docs;
LOAD DATA LOCAL INPATH '/home/<用户名>/hive_test/file3.txt' INTO TABLE docs;
-- 词频统计
CREATE TABLE word_count AS
SELECT word, COUNT(1) AS count FROM
(SELECT EXPLODE(SPLIT(line,' ')) AS word FROM docs) w
GROUP BY word
ORDER BY word;
SELECT * FROM word_count;
```
**预期输出:**
```
hadoop 1
hello 3
hive 1
world 1
```
> ✅ 如果以上测试全部通过,说明 Hive 安装成功!
---
## 🌐 镜像源说明
### 国内镜像源(清华大学 TUNA)
| 组件 | 镜像地址 |
|-----|---------|
| Hadoop | `https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common` |
| Hive | `https://mirrors.tuna.tsinghua.edu.cn/apache/hive` |
| MySQL 驱动 | `https://mirrors.tuna.tsinghua.edu.cn/mysql/downloads/Connector-J` |
### 国际镜像源
| 组件 | 镜像地址 |
|-----|---------|
| Hadoop | `https://dlcdn.apache.org/hadoop/common` |
| Hive | `https://dlcdn.apache.org/hive` |
| MySQL 驱动 | `https://repo1.maven.org/maven2/mysql/mysql-connector-java`(Hadoop脚本)
`https://downloads.mysql.com/archives`(Hive脚本) |
镜像选择完全自动,无需手动配置。脚本日志会显示实际使用的下载源。
---
## 🛡️ 安全特性
脚本经过完整的安全审计,包含以下防护措施:
| 防护项 | 实现方式 |
|-------|---------|
| 用户安全 | root用户运行时自动创建普通用户 `hadoop` 并切换执行,避免直接以root运行服务 |
| SSH 安全 | 自动生成 RSA 密钥对,配置本地免密登录,避免密码泄露风险 |
| 错误处理 | `set -e`(出错退出)+ `set -u`(未定义变量报错)+ `set -o pipefail`(管道错误检测) |
| 命令检查 | 验证 wget、tar、sudo、mysql 等必要命令是否存在 |
| 磁盘检查 | 安装前检查可用空间(Hadoop 10GB / Hive 5GB) |
| 目录切换 | 所有 `cd` 命令带 `|| error` 错误处理 |
| 删除保护 | 删除旧版本前先 `mv` 备份 |
| 密码保护 | `read -sp` 隐藏密码输入 |
| 资源清理 | 安装完成自动清理临时文件 |
| 权限控制 | 自动设置正确的文件和目录权限 |
---
## ❓ 常见问题
### Q1: guava.jar 版本冲突
**错误:** `java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument`
**说明:** hive.sh 的 `fix_guava_conflict` 步骤会自动修复。如仍有问题,手动执行:
```bash
rm /usr/local/hive/lib/guava-*.jar
cp /usr/local/hadoop/share/hadoop/common/lib/guava-*.jar /usr/local/hive/lib/
```
### Q2: 元数据库未初始化
**错误:** `Hive metastore database is not initialized`
**解决:**
```bash
cd /usr/local/hive
./bin/schematool -initSchema -dbType mysql
```
### Q3: 默认创建的 hadoop 用户密码是什么?
**说明:** 如果使用 root 用户运行 `hadoop2026.sh`,脚本会自动创建 `hadoop` 用户。
**默认凭据:**
- 用户名:`hadoop`
- 密码:`hadoop`
**安全建议:** 安装完成后立即修改密码:
```bash
passwd
# 按提示输入新密码
```
### Q4: 如何删除自动创建的 hadoop 用户?
**在切换回 root 或其他管理员用户后:**
```bash
# 1. 停止该用户的所有进程
sudo pkill -u hadoop
# 2. 删除用户及其主目录
sudo userdel -r hadoop
# 3. 删除 sudo 配置文件
sudo rm -f /etc/sudoers.d/hadoop
```
### Q5: 提示 "请不要以 root 用户运行此脚本"(旧版本)
**原因:** 脚本禁止 root 用户运行以保证安全。
**解决(最新版本已自动处理):** 切换到普通用户运行,脚本会在需要时自动调用 sudo:
```bash
su - your_username
bash hadoop2026.sh
```
**或者直接以 root 运行(推荐):** 最新版脚本会自动创建 hadoop 用户并切换执行。
### Q6: HADOOP_HOME 未设置
**错误:** `Hadoop 未找到`
**解决:**
```bash
# 1. 重新加载环境变量
source ~/.bashrc
# 2. 检查 Hadoop 是否已安装
ls /usr/local/hadoop
# 3. 手动设置(如果需要)
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
```
### Q7: start-dfs.sh 启动失败
**常见错误及解决方案:**
**错误 1:** `localhost: Permission denied (publickey,password)`
**原因:** SSH 免密登录未配置
**解决:**
```bash
# 生成 SSH 密钥
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
# 配置免密登录
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
# 添加 localhost 到 known_hosts
ssh-keyscan -H localhost >> ~/.ssh/known_hosts
```
**错误 2:** `NameNode is not formatted`
**原因:** NameNode 未格式化
**解决:**
```bash
# 格式化 NameNode
hdfs namenode -format
```
**错误 3:** `java.net.BindException: Port in use`
**原因:** 端口被占用(通常是 HDFS 已经在运行)
**解决:**
```bash
# 停止所有 Hadoop 进程
stop-dfs.sh
# 检查是否还有残留进程
jps
# 如有残留,手动杀掉
kill -9 <进程ID>
# 重新启动
start-dfs.sh
```
### Q8: MySQL 连接失败
**错误:** `Unable to open a test connection to the given database`
**排查步骤:**
```bash
# 1. 确认 MySQL 服务运行
sudo service mysql status
# 2. 检查 hive 用户权限
mysql -u root -p -e "SELECT user,host FROM mysql.user WHERE user='hive';"
# 3. 重新授权(如有需要)
mysql -u root -p
mysql> GRANT ALL ON *.* TO 'hive'@'localhost' IDENTIFIED BY 'hive';
mysql> FLUSH PRIVILEGES;
```
### Q9: 环境变量未生效
**症状:** 运行 `hadoop` 或 `hive` 提示 "command not found"
**解决:**
```bash
source ~/.bashrc
# 或重新打开终端窗口
```
---
## 📚 参考资料
- [Hadoop3.3.5安装教程_单机/伪分布式配置_Hadoop3.3.5/Ubuntu22.04(20.04/18.04/16.04)- 厦门大学数据库实验室](https://dblab.xmu.edu.cn/blog/4193/)
- [Hive3.1.3 安装和使用指南 - 厦门大学数据库实验室](https://dblab.xmu.edu.cn/blog/4309/)
- [Ubuntu 安装 MySQL - 厦门大学数据库实验室](https://dblab.xmu.edu.cn/blog/1002/)
- [Apache Hadoop 官方文档](https://hadoop.apache.org/)
- [Apache Hive 官方文档](https://hive.apache.org/)
- [清华大学开源软件镜像站](https://mirrors.tuna.tsinghua.edu.cn/)
---
## 📄 许可证
**使用限制:** 仅限个人学习和研究,禁止商业用途。
---
## 📧 联系方式
**一键安装脚本作者:**
- QQ:1653611988(加好友请注明来意,作者会在有时间时提供免费帮助)
---
⭐ 如果这个项目对你有帮助,请给个 Star!
最后更新时间:2026年6月14日 | 版本:v2.2 - 新增 Hadoop 完整配置与 SSH 免密登录