diff --git a/content/post/hdp2.md b/content/post/hdp2.md new file mode 100644 index 0000000..ea59ad7 --- /dev/null +++ b/content/post/hdp2.md @@ -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 + + + + fs.defaultFS + hdfs://hdp-nn:8020 + + + + hadoop.tmp.dir + /tmp/hdp + + + + hadoop.proxyuser.root.hosts + * + + + + hadoop.proxyuser.root.groups + * + + + ``` + +### 修改 hdfs-site.xml +- 编辑 $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 + + + ``` + +### 修改 yarn-site.xml +- 编辑 $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 + + + ``` + +### 修改 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 + + + mapreduce.framework.name + yarn + + + + mapreduce.jobhistory.address + hdp-rm:10020 + + + + mapreduce.jobhistory.webapp.address + hdp-rm:19888 + + + ``` + +### 修改 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 + ``` + diff --git a/content/post/hive2.md b/content/post/hive2.md new file mode 100644 index 0000000..a614099 --- /dev/null +++ b/content/post/hive2.md @@ -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 + + + + javax.jdo.option.ConnectionURL + jdbc:mysql://127.7.7.7: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 + + + + tez.am.staging-dir + /hive/tez/staging + + + ``` + +## 初始化 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 + ``` + diff --git a/content/post/tez.md b/content/post/tez.md new file mode 100644 index 0000000..51d4187 --- /dev/null +++ b/content/post/tez.md @@ -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 + + + tez.lib.uris + string + hdfs://hdp-nn:8020/tez/tez-0.9.2.tar.gz + + + ``` + +### 修改 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; + ``` +