# 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://img.shields.io/badge/License-Educational-blue.svg)](LICENSE) [![Platform](https://img.shields.io/badge/Platform-Ubuntu%2022.04%2B-orange.svg)](https://ubuntu.com/) [![Hadoop](https://img.shields.io/badge/Hadoop-3.3.5-green.svg)](https://hadoop.apache.org/) [![Hive](https://img.shields.io/badge/Hive-3.1.3-yellow.svg)](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 免密登录