---
title: "hadoop3.3 集群部署"
date: 2023-07-28T14:00:00+08:00
lastmod: 2026-02-03T11:00:00+08:00
keywords: []
tags: ["hadoop", "hive", "tez", "hbase", "spark"]
categories: ["hadoop"]
---
## 环境
主机名 | 地址 | 数据目录 | 组件
---- | ---- | ---- | ----
hdp-nn | 192.168.8.1/24 | /data/hdp-nn | Namenode
hdp-snn | 192.168.8.2/24 | /data/hdp-snn | SecondaryNamenode
hdp-rm | 192.168.8.3/24 | - | ResourceManager
hdp-worker0 | 192.168.8.10/24 | /data/hdp-dn | Datanode NodeManager
hdp-worker1 | 192.168.8.11/24 | /data/hdp-dn | Datanode NodeManager
hive-hs | 192.168.8.20/24 | - | HiveServer2 Tez
hive-ms | 192.168.8.21/24 | - | HiveMetastore Tez
## 部署 hadoop 集群
### 服务器初始配置
- 在**全部主机**上执行如下操作
- 禁用防火墙
- 禁用 selinux
- 配置时间同步
- 配置主机名解析,修改 /etc/hosts,增加如下内容
```bash
# hadoop
192.168.8.1 hdp-nn
192.168.8.2 hdp-snn
192.168.8.3 hdp-dn
192.168.8.10 hdp-worker0
192.168.8.11 hdp-worker1
```
### ssh 免密登录
- 在 **hdp-nn** 配置 ssh 免密登录 hdp-nn、hdp-snn 和 hdp-workerX
```bash
ssh-copy-id hdp-nn
ssh-copy-id hdp-snn
ssh-copy-id hdp-worker0
ssh-copy-id hdp-worker1
```
- 在 **hdp-rm** 上配置 ssh 免密登录 hdp-rm 和 hdp-workerX
```bash
ssh-copy-id hdp-rm
ssh-copy-id hdp-worker0
ssh-copy-id hdp-worker1
```
### 部署 jdk8 环境
- 在**全部主机**上下载**最新的 jdk8 安装包**,解压
```bash
tar zxf jdk-8u471-linux-x64.tar.gz
mv jdk1.8.0_471 /opt/jdk
# 无需配置 jdk 环境变量
```
### 部署 dfs 和 yarn 集群
- 在**全部主机**上执行如下操作
- 下载 hadoop 3.3.6 部署包,解压
```bash
curl -LO https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz
tar zxf hadoop-3.3.6.tar.gz
mv hadoop-3.3.6 /opt/hdp
```
- 配置 hadoop 环境变量
```bash
echo 'export HADOOP_HOME=/opt/hdp' > /etc/profile.d/hdp.sh
echo 'export PATH=$HADOOP_HOME/bin:$PATH' >> /etc/profile.d/hdp.sh
# 不推荐把 $HADOOP_HOME/sbin 加入环境变量 PATH,避免与 spark 冲突
source /etc/profile.d/hdp.sh
```
- 编辑 $HADOOP_HOME/etc/hadoop/hadoop-env.sh,指定 JAVA_HOME 环境变量和运行各组件的用户
```bash
export JAVA_HOME=/opt/jdk
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
```
- 编辑 $HADOOP_HOME/etc/hadoop/core-site.xml,参考内容如下
```xml
fs.defaultFS
hdfs://hdp-nn:8020
hadoop.tmp.dir
/tmp/hdp
hadoop.proxyuser.root.hosts
*
hadoop.proxyuser.root.groups
*
```
- 编辑 $HADOOP_HOME/etc/hadoop/hdfs-site.xml,参考内容如下
```xml
dfs.namenode.name.dir
/data/hdp_nn
dfs.namenode.checkpoint.dir
/data/hdp_snn
dfs.datanode.data.dir
/data/hdp_dn
dfs.namenode.http-address
hdp-nn:9870
dfs.namenode.secondary.http-address
hdp-snn:9868
dfs.replication
2
dfs.webhdfs.enabled
true
```
- 编辑 $HADOOP_HOME/etc/hadoop/yarn-site.xml,参考内容如下
```xml
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.resourcemanager.hostname
hdp-rm
yarn.resourcemanager.webapp.address
hdp-rm:8088
yarn.log-aggregation-enable
true
yarn.log-aggregation.retain-seconds
604800
yarn.nodemanager.vmem-check-enabled
false
yarn.nodemanager.pmem-check-enabled
false
```
- 无需修改 $HADOOP_HOME/etc/hadoop/mapred-env.sh
- 编辑 $HADOOP_HOME/etc/hadoop/mapred-site.xml,参考内容如下
```xml
mapreduce.framework.name
yarn
mapreduce.jobhistory.address
hdp-rm:10020
mapreduce.jobhistory.webapp.address
hdp-rm:19888
yarn.app.mapreduce.am.env
HADOOP_MAPRED_HOME=/opt/hdp
mapreduce.map.env
HADOOP_MAPRED_HOME=/opt/hdp
mapreduce.reduce.env
HADOOP_MAPRED_HOME=/opt/hdp
```
- 编辑 $HADOOP_HOME/etc/hadoop/workers,替换成全部的 worker 主机,参考内容如下
```
hdp-worker0
hdp-worker1
```
### 格式化 namenode
- 在 **hdp-nn** 上执行如下操作
```bash
hdfs namenode -format
```
## 启动 hadoop 集群
- 在 **hdp-nn** 上启动 dfs 集群
```bash
/opt/hdp/sbin/start-dfs.sh
```
- 在 **hdp-rm** 上启动 yarn 集群
```bash
/opt/hdp/sbin/start-yarn.sh
```
- 在 **hdp-X** 上查看 java 进程
```bash
/opt/jdk/bin/jps
```
---
## 部署 hive 集群
### 前提
- [已部署好 mysql 8](/post/mysql-install/#安装-mysql84-通用二进制包)
- 已创建好 mysql 用户机器数据库,参考 sql 如下
```sql
create user hive@'%' identified by 'Hive_1234';
create database hive default charset utf8mb4;
grant all on hive.* to hive@'%';
```
### 服务器初始配置
- 在 **hive-X** 上配置主机名解析,修改 /etc/hosts,增加如下内容
```
# 注意前面的 hadoop 解析记录不能删
# hive
192.168.8.20 hive-hs
192.168.8.21 hive-ms
```
### 部署 tez 环境
- 在 **hive-X** 上下载 tez 0.10.4 安装包,解压
```bash
curl -LO https://mirrors.tuna.tsinghua.edu.cn/apache/tez/0.10.4/apache-tez-0.10.4-bin.tar.gz
tar zxf apache-tez-0.10.4-bin.tar.gz
mv apache-tez-0.10.4-bin /opt/tez
```
- 在 **hive-hs** 上 put tez.tar.gz 到 hdfs
```bash
hdfs dfs -mkdir /tez
hdfs dfs -put /opt/tez/share/tez.tar.gz /tez/
```
- 在**全部主机**上修改 $HADOOP_HOME/etc/hadoop/mapred-site.xml,关闭 yarn 虚拟内存检查(已关闭)
- 在**全部主机**上创建 $HADOOP_HOME/etc/hadoop/tez-site.xml,参考内容如下
```xml
tez.lib.uris
string
${fs.defaultFS}/tez/tez.tar.gz
```
- 重启 hadoop dfs 和 yarn 集群
### 部署 hive 环境
- 在 **hive-X** 上执行如下操作
- 下载 hive 4.0.1 部署包,解压
```bash
curl -LO https://archive.apache.org/dist/hive/hive-4.0.1/apache-hive-4.0.1-bin.tar.gz
tar zxf apache-hive-4.0.1-bin.tar.gz
mv apache-hive-4.0.1-bin /opt/hive
```
- 下载 mysql 连接库,解压到 hive 库目录下
```bash
curl -LO https://downloads.mysql.com/archives/get/p/3/file/mysql-connector-j-8.0.33.tar.gz
tar zxf mysql-connector-j-8.0.33.tar.gz mysql-connector-j-8.0.33/mysql-connector-j-8.0.33.jar
mv mysql-connector-j-8.0.33/mysql-connector-j-8.0.33.jar /opt/hive/lib/
rm -rf mysql-connector-j-8.0.33*
```
- 配置环境变量
```bash
echo 'export HIVE_HOME=/opt/hive' > /etc/profile.d/hive.sh
echo 'export PATH=$HIVE_HOME/bin:$PATH' >> /etc/profile.d/hive.sh
source /etc/profile.d/hive.sh
```
- 编辑 $HIVE_HOME/conf/hive-env.sh,指定 HADOOP_HOME 环境变量和 tez 库
```bash
HADOOP_HOME=/opt/hdp
export TEZ_HOME=/opt/tez
export HIVE_AUX_JARS_PATH=$TEZ_HOME/lib
export HADOOP_CLASSPATH=$TEZ_HOME:$TEZ_HOME/lib
```
- 创建 $HIVE_HOME/conf/hive-site.xml,参考内容如下
```xml
javax.jdo.option.ConnectionURL
jdbc:mysql://mysql-ip:3306/hive?createDatabaseIfNotExist=true&useSSL=false
javax.jdo.option.ConnectionDriverName
com.mysql.cj.jdbc.Driver
javax.jdo.option.ConnectionUserName
hive
javax.jdo.option.ConnectionPassword
Hive_1234
datanucleus.schema.autoCreateAll
true
hive.cli.print.header
true
hive.cli.print.current.db
true
hive.server2.webui.port
10002
hive.metastore.warehouse.dir
/hive/warehouse
hive.metastore.uris
thrift://hive-ms:9083
hive.execution.engine
tez
```
### 初始化 hive
- 在 **hive-ms** 上初始化 mysql 库
```bash
schematool -dbType mysql -initSchema
```
### 启动 hive 集群
- 在 **hive-ms** 上启动 hive metastore
```bash
hive --service metastore
```
- 在 **hive-hs** 上启动 hive server
```bash
hive --service hiveserver2
```
### 客户端
- beeline 连接,需要先在 $HADOOP_HOME/etc/hadoop/core-site.xml 中配置 proxyuser(已配置)
```bash
beeline -u jdbc:hive2://hive-hs:10000 -n root
```