This commit is contained in:
colben
2026-03-24 22:07:34 +08:00
parent 1c4eae243e
commit c973462dfb
3 changed files with 553 additions and 0 deletions

262
content/post/hdp2.md Normal file
View File

@@ -0,0 +1,262 @@
---
title: "hadoop2 集群部署"
date: 2023-05-23T10:00:00+08:00
lastmod: 2023-05-23T10:00:00+08:00
keywords: []
tags: ["hadoop"]
categories: ["storage"]
---
## 环境
操作系统 | 主机名 | 地址 | 数据目录 | 运行组件
---- | ---- | ---- | ---- | ----
Rocky9 | hdp-nn | 192.168.8.1/24 | /data/hdp-nn | Namenode
Rocky9 | hdp-snn | 192.168.8.2/24 | /data/hdp-snn | SecondaryNamenode
Rocky9 | hdp-rm | 192.168.8.3/24 | - | ResourceManager
Rocky9 | hdp-slave10 | 192.168.8.10/24 | /data/hdp-dn | Datanode, NodeManager
Rocky9 | hdp-slave11 | 192.168.8.11/24 | /data/hdp-dn | Datanode, NodeManager
## 服务器初始配置
- 在**全部主机**上执行如下操作
- 禁用防火墙
- 禁用 selinux
- 配置时间同步
- 配置主机名解析
```bash
echo "192.168.8.1 hdp-nn" >> /etc/hosts
echo "192.168.8.2 hdp-snn" >> /etc/hosts
echo "192.168.8.3 hdp-dn" >> /etc/hosts
echo "192.168.8.10 hdp-slave10" >> /etc/hosts
echo "192.168.8.11 hdp-slave11" >> /etc/hosts
```
## ssh 免密登录
- 配置 **hdp-nn** 可以 ssh 免密登录 hdp-nn、hdp-snn 和 hdp-slaveXX
```bash
# 在 hdp-nn 上执行如下操作
ssh-copy-id hdp-nn
ssh-copy-id hdp-snn
ssh-copy-id hdp-slave10
ssh-copy-id hdp-slave11
```
- 配置 **hdp-rm** 可以 ssh 免密登录 hdp-rm 和 hdp-slaveXX
```bash
# 在 hdp-rm 上执行如下操作
ssh-copy-id hdp-rm
ssh-copy-id hdp-slave10
ssh-copy-id hdp-slave11
```
## 部署 jdk8 环境
- 在**全部主机**上执行如下操作
- 上传 jdk-8u311-linux-x64.tar.gz解压
```bash
tar zxf jdk-8u311-linux-x64.tar.gz
mv jdk1.8.0_311 /opt/jdk
```
- 配置 jdk 环境变量
```bash
echo 'export JAVA_HOME=/opt/jdk' > /etc/profile.d/jdk.sh
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile.d/jdk.sh
source /etc/profile.d/jdk.sh
```
## 部署 hadoop 环境
- 在**全部主机**上执行如下操作
- 下载 hadoop 2.10.2 部署包,解压
```bash
curl -LO https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.10.2/hadoop-2.10.2.tar.gz
tar zxf hadoop-2.10.2.tar.gz
mv hadoop-2.10.2 /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.
source /etc/profile.d/hdp.sh
```
### 修改 hadoop-env.sh
- 编辑 $HADOOP_HOME/etc/hadoop/hadoop-env.sh指定 JAVA_HOME 环境变量
```bash
export JAVA_HOME=/opt/jdk
```
### 修改 core-site.xml
- 编辑 $HADOOP_HOME/etc/hadoop/core-site.xml参考内容如下
```xml
<configuration>
<property>
<!-- namenode 的 hdfs 协议通信地址 -->
<name>fs.defaultFS</name>
<value>hdfs://hdp-nn:8020</value>
</property>
<property>
<!-- hadoop 集群存储临时文件的目录datanode 里建议挂载独立盘 -->
<name>hadoop.tmp.dir</name>
<value>/tmp/hdp</value>
</property>
<property>
<!-- hive beeline 登录用户 root -->
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<!-- hive beeline 登录用户 root -->
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
</configuration>
```
### 修改 hdfs-site.xml
- 编辑 $HADOOP_HOME/etc/hadoop/hdfs-site.xml参考内容如下
```xml
<configuration>
<property>
<!-- namenode 元数据存放位置,可指定多个目录(用逗号分隔)实现容错 -->
<name>dfs.namenode.name.dir</name>
<value>/data/hdp_nn</value>
</property>
<property>
<!-- secondary namenode 镜像数据存放位置,可指定多个目录(用逗号分隔)实现容错 -->
<name>dfs.namenode.checkpoint.dir</name>
<value>/data/hdp_snn</value>
</property>
<property>
<!-- datanode 数据块存放位置,可指定多个目录(用逗号分隔)实现容错 -->
<name>dfs.datanode.data.dir</name>
<value>/data/hdp_dn</value>
</property>
<property>
<!-- namenode 的 Web UI 访问地址 -->
<name>dfs.namenode.http-address</name>
<value>hdp-nn:9870</value>
</property>
<property>
<!-- secondary namenode 的主机和端口 -->
<name>dfs.namenode.secondary.http-address</name>
<value>hdp-snn:9868</value>
</property>
<property>
<!-- hdfs 副本数量默认3这里设置为2保证两个 datanode 时数据有冗余 -->
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<!-- 启用 webhdfs api -->
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
```
### 修改 yarn-site.xml
- 编辑 $HADOOP_HOME/etc/hadoop/yarn-site.xml参考内容如下
```xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<!--resourcemanager 的主机名-->
<name>yarn.resourcemanager.hostname</name>
<value>hdp-rm</value>
</property>
<property>
<!-- resourcemanager 的 Web UI 访问地址 (默认端口8088) -->
<name>yarn.resourcemanager.webapp.address</name>
<value>hdp-rm:8088</value>
</property>
<property>
<!-- (可选) 开启日志聚集功能方便在Web UI上查看已完成任务的日志 -->
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<!-- (可选) 日志保留时间(7天) -->
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
<property>
<!-- 使用 tez 时需关闭 yarn 虚拟内存检查 -->
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
</configuration>
```
### 修改 mapred-env.sh
- 编辑 $HADOOP_HOME/etc/hadoop/mapred-env.sh指定 JAVA_HOME 环境变量
```bash
export JAVA_HOME=/opt/jdk
```
### 修改 mapred-site.xml
- 编辑 $HADOOP_HOME/etc/hadoop/mapred-site.xml参考内容如下
```xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<!-- MapReduce JobHistory Server 地址 -->
<name>mapreduce.jobhistory.address</name>
<value>hdp-rm:10020</value>
</property>
<property>
<!-- MapReduce JobHistory Server Web UI 地址 (默认端口19888) -->
<name>mapreduce.jobhistory.webapp.address</name>
<value>hdp-rm:19888</value>
</property>
</configuration>
```
### 修改 slaves
- 编辑 $HADOOP_HOME/etc/hadoop/slaves替换成全部的 slave 主机,参考内容如下
```txt
hdp-slave10
hdp-slave11
```
### 创建临时目录和数据目录
- 在 **hdp-nn** 上创建临时目录和数据目录
```bash
mkdir /tmp/hdp
mkdir /data/hdp_nn
```
- 在 **hdp-snn** 上创建临时目录和数据目录
```bash
mkdir /tmp/hdp
mkdir /data/hdp_snn
```
- 在 **hdp-rm** 上创建临时目录
```bash
mkdir /tmp/hdp
```
- 在 **hdp-slaveXX** 上创建临时目录和数据目录
```bash
mkdir /tmp/hdp #建议挂载独立盘
mkdir /data/hdp_dn #建议挂载独立盘
```
## 启动 hadoop 集群
- 在 **hdp-nn** 上启动 dfs 集群
```bash
/opt/hdp/sbin/start-dfs.sh
```
- 在 **hdp-rm** 上启动 yarn 集群
```bash
/opt/hdp/sbin/start-yarn.sh
```

173
content/post/hive2.md Normal file
View File

@@ -0,0 +1,173 @@
---
title: "hive2 部署"
date: 2023-05-23T11:00:00+08:00
lastmod: 2023-05-23T11:00:00+08:00
keywords: []
tags: ["hadoop", "hive"]
categories: ["storage"]
---
## 环境
操作系统 | 主机名 | 地址 | 运行组件
---- | ---- | ---- | ----
Rocky9 | hive-hs20 | 192.168.8.20/24 | Hive Server
Rocky9 | hive-ms21 | 192.168.8.21/24 | Hive Metastore, MySQL8.0
## 服务器初始配置
- 在**全部主机**上执行如下操作
- 禁用防火墙
- 禁用 selinux
- 配置时间同步
- 配置主机名解析
```bash
echo "192.168.8.1 hdp-nn" >> /etc/hosts
echo "192.168.8.2 hdp-snn" >> /etc/hosts
echo "192.168.8.3 hdp-dn" >> /etc/hosts
echo "192.168.8.10 hdp-slave10" >> /etc/hosts
echo "192.168.8.11 hdp-slave11" >> /etc/hosts
echo "192.168.8.20 hdp-hs20" >> /etc/hosts
echo "192.168.8.21 hdp-ms21" >> /etc/hosts
```
## 创建 mysql 数据库
- 在 **hive-ms21** 上执行如下操作
- 部署 mysql8.0,略过
- 创建用户及其数据库,参考 sql 如下
```sql
create user hive@127.7.7.7 identified by 'Hive_1234';
create database hive default charset utf8mb4;
grant all on hive.* to hive@127.7.7.7;
```
## 复制 jdk 和 hadoop 环境
- 在**全部主机**上执行如下操作
- 从 hdp-nn 复制 jdk 和 hadoop 环境
```bash
scp -r hdp-nn:/opt/{jdk,hdp} /opt/
scp hdp-nn:/etc/profile.d/{jdk,hdp}.sh /etc/profile.d/
source /etc/profile.d/jdk.sh
source /etc/profile.d/hdp.sh
```
## 部署 hive 环境
- 在**全部主机**上执行如下操作
- 下载 hive 2.3.9 部署包,解压
```bash
curl -LO https://archive.apache.org/dist/hive/hive-2.3.9/apache-hive-2.3.9-bin.tar.gz
tar zxf apache-hive-2.3.9.tar.gz
mv apache-hive-2.3.9 /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-env.sh
- 编辑 $HIVE_HOME/conf/hive-env.sh指定 HADOOP_HOME 环境变量
```bash
export HADOOP_HOME=/opt/hdp
```
### 创建 hive-site.xml
- 创建 $HIVE_HOME/conf/hive-site.xml参考内容如下
```xml
<configuration>
<property>
<!-- mysql 地址 -->
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://127.7.7.7:3306/hive?createDatabaseIfNotExist=true&amp;useSSL=false</value>
</property>
<property>
<!-- mysql 驱动 -->
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.cj.jdbc.Driver</value>
</property>
<property>
<!-- mysql 用户 -->
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
</property>
<property>
<!-- mysql 密码 -->
<name>javax.jdo.option.ConnectionPassword</name>
<value>Hive_1234</value>
</property>
<property>
<!-- 自动初始化 hive 库 -->
<name>datanucleus.schema.autoCreateAll</name>
<value>true</value>
</property>
<property>
<name>hive.cli.print.header</name>
<value>true</value>
</property>
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
<property>
<!-- hive server 端口 -->
<name>hive.server2.webui.port</name>
<value>10002</value>
</property>
<property>
<!-- 数据存储位置(hdfs) -->
<name>hive.metastore.warehouse.dir</name>
<value>/hive/warehouse</value>
</property>
<property>
<!-- hive metastore 端口-->
<name>hive.metastore.uris</name>
<value>thrift://hive-ms:9083</value>
</property>
<!-- hive 使用 tez 引擎
<property>
<name>hive.execution.engine</name>
<value>tez</value>
</property> -->
<property>
<name>tez.am.staging-dir</name>
<value>/hive/tez/staging</value>
</property>
</configuration>
```
## 初始化 hive 库
- 在 **hive-ms21** 上执行如下操作
```bash
schematool -dbType mysql -initSchema
```
## 启动 hive
- 在 **hive-ms21** 上启动 hive metastore
```bash
hive --service metastore
```
- 在 **hive-hs20** 上启动 hive server
```bash
hive --service hiveserver2
```
## 客户端连接
- 本地直接连接
```bash
hive
```
- beeline 连接,需要[在 $HADOOP_HOME/etc/hadoop/core-site.xml 中配置 proxyuser](/hdp2#修改 core-site.xml)
```bash
beeline -u jdbc:hive2://hive-hs20:10000 -n root
```

118
content/post/tez.md Normal file
View File

@@ -0,0 +1,118 @@
---
title: "hive2 tez 部署"
date: 2023-05-23T12:00:00+08:00
lastmod: 2023-05-23T12:00:00+08:00
keywords: []
tags: ["hadoop", "hive", "tez"]
categories: ["storage"]
---
## 环境
操作系统 | 主机名 | 地址 | 运行组件
---- | ---- | ---- | ----
Rocky8 | 编译服务器 | - | 编译工具
Rocky9 | hive-hs20 | 192.168.8.20/24 | Hive Server, Tez
Rocky9 | hive-ms21 | 192.168.8.21/24 | Hive Metastore, MySQL8.0, Tez
## 准备 protoc 2.5.0 环境
- 在**编译服务器**上执行如下操作
- 下载源码,解压
```bash
curl -LO https://github.com/protocolbuffers/protobuf/releases/download/v2.5.0/protobuf-2.5.0.tar.gz
tar zxf protobuf-2.5.0.tar.gz
cd protobuf-2.5.0.tar.gz
```
- 编译
```bash
mkdir /opt/protoc-2.5.0
./configure --prefix=/opt/protoc-2.5.0
make
make check
make install
```
## 编译 tez
- 在**编译服务器**上执行如下操作
- 下载 tez 部署包,解压
```bash
curl -LO https://mirrors.tuna.tsinghua.edu.cn/apache/tez/0.9.2/apache-tez-0.9.2-src.tar.gz
tar zxf apache-tez-0.9.2-src.tar.gz
cd apache-tez-0.9.2-src
```
- 编译
```bash
export PATH=/opt/protoc-2.5.0/bin:/opt/jdk8/bin:/opt/maven3/bin:$PATH
mvn clean package -DskipTests=true -Dtar -Dhadoop.version=2.10.2 -Dmaven.javadoc.skip=true -pl tez-dist -am
```
- 上传 tez-dist/target/tez-0.9.2-minimal.tar.gz 到**全部 hive 服务器**中
- 上传 tez-dist/target/tez-0.9.2.tar.gz 到 **hive-hs20** 中
## 部署 tez 环境
- 在 **hive-hs20** 执行如下操作
- 上传 tez-0.9.2.tar.gz 到 hdfs
```bash
hdfs dfs -mkdir /tez
hdfs dfs -put tez-0.9.2.tar.gz /tez/
```
- 创建 tez staging 目录
```bash
hdfs dfs -mkdir -p /hive/tez/staging
```
- 在**全部 hive 主机**上解压 tez 部署包
```bash
mkdir /opt/tez
tar zxf tez-0.9.2-minimal.tar.gz -C /opt/tez/
```
### 修改 yarn-site.xml
- 在**全部主机(包括 hadoop)**上执行如下操作
- 参考[在 $HADOOP_HOME/etc/hadoop/yarn-site.xml 中关闭 yarn 虚拟内存检查](/hdp2#修改 yarn-site.xml)
### 创建 tez-site.xml
- 在**全部主机(包括 hadoop)**上执行如下操作
- 创建 $HADOOP_HOME/etc/hadoop/tez-site.xml参考内容如下
```xml
<configuration>
<property>
<name>tez.lib.uris</name>
<type>string</type>
<value>hdfs://hdp-nn:8020/tez/tez-0.9.2.tar.gz</value>
</property>
</configuration>
```
### 修改 hive-site.xml
- 在**全部 hive 主机**上执行如下操作
- 参考[在 $HIVE_HOME/etc/hadoop/yarn-site.xml 中配置 tez staging 目录](/hive2#创建 hive-site.xml)
### 修改 hive-env.sh
- 在**全部 hive 主机**上执行如下操作
- 编辑 $HIVE_HOME/conf/hive-env.sh在文件最后增加如下内容
```bash
export TEZ_HOME=/opt/tez
TEZ_JARS=""
for jar in $(ls $TEZ_HOME | grep jar); do
TEZ_JARS=$TEZ_JARS:$TEZ_HOME/$jar
done
for jar in $(ls $TEZ_HOME/lib); do
TEZ_JARS=$TEZ_JARS:$TEZ_HOME/lib/$jar
done
export HIVE_AUX_JARS_PATH=$TEZ_HOME/lib
export HADOOP_CLASSPATH=$TEZ_JARS
```
## 重启环境
- 重启 hadoop dfs 和 yarn 集群
- 重启 hive metastore 和 hiveserver2
## 设置引擎
- 设置 hive 引擎为 tez执行 sql 语句
```sql
set set hive.execution.engine=tez;
```