0


一篇文章教会你搭建Hive分布式集群

一、环境描述

系统环境描述:本教程基于CentOS 8.0版本虚拟机

hadoop集群:

hive 集群规划:

软件版本:

提示:Hive 是基于Hadoop的,在开始Hive之前,需要确保你的Hadoop集群是可用的。同时,本次部署需要的zookeeper,我使用的是Hadoop集群中的,关于zookeeper的部署,这里不做描述。因为该文章是基于部署Hadoop之后,所以一些机器的基本配置这里也不做描述,比如机器的免密登录,机器的hosts文件设置,包括基本的JDK安装等,如果对于这些部分有操作上的疑问,欢迎查看之前Hadoop的系列文章。Hadoop 集群部署可参考该文章:一篇文章带你学会Hadoop-3.3.4集群部署_夜夜流光相皎洁_小宁的博客-CSDN博客

二、安装mysql

2.1 卸载mysql

2.1.1 列出安装的mysql

rpm -qa | grep -i mysql

2.1.2 卸载mysql

-- 依次卸载上一步骤罗列出来的依赖

yum remove mysql-common-8.0.26-1.module_el8.4.0+915+de215114.x86_64

yum remove mysql57-community-release-el7-10.noarch

2.1.3 删除mysql文件目录

2.1.3.1 查看mysql 目录

find / -name mysql

2.1.3.2 依次删除

rm -rf /var/lib/selinux/targeted/active/modules/100/mysql

2.2 在线安装

2.2.1 下载安装源

wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm

2.2.2 安装源rpm

yum -y install mysql57-community-release-el7-10.noarch.rpm

2.2.3 加入rpm密钥

rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

2.2.4 执行安装

yum -y install mysql-community-server

在CentOS 8 下会报错:错误:没有任何匹配: mysql-community-server
原因是:【注】出现问题的核心原因为:基于RHEL 8和Oracle Linux 8的基于EL8的系统,在默认情况下附带了一个名为mysql的模块。 除非禁用此模块,否则它将屏蔽,
存储库提供的软件包。只要是 EL8系统安装任何版本的 MySQL 都会有这样的问题。

需要执行一下命令:yum module disable mysql

接着再执行:yum -y install mysql-community-server

然后安装是,执行事务检查报错:
错误:事物测试失败:
file /etc/my.cnf from install of mysql-community-server-5.7.43-1.el7.x86_64 conflicts with file from package mariadb-connector-c-config-3.1.11-2.el8_3.noarch

原因分析:
网上搜了下,说是我的yum 里面安装了mariadb-connector-c-config.noarch ,于是就要执行命令查看一下
yum list installed

果然如此,于是,就要删除掉mariadb-connector-c-config.noarch,

yum remove mariadb-connector-c-config.noarch

接着再执行:yum -y install mysql-community-server
成功了

2.2.5 设置开机自启动

systemctl start mysqld.service

systemctl status mysqld.service

查看状态,发现mysql 服务处于active(running)状态,说明Mysql 服务启动成功。

2.2.6 修改密码

2.2.6.1 获取临时密码

grep "password" /var/log/mysqld.log

2.2.6.2 登录MySQL

mysql -uroot -p

2.2.6.3 设置密码策略

设置密码策略为LOW,此策略只检查密码的长度

set global validate_password_policy=LOW;

2.2.6.4 设置密码最小长度

set global validate_password_length=6;

2.2.6.5 设置root密码

ALTER USER 'root'@'localhost' IDENTIFIED BY 'xiaoning';

2.2.6.6 开启MySQL远程连接权限

grant all privileges on . to 'root'@'%' identified by 'xiaoning' with grant option;

三、安装hive

3.1 解压hive包

tar -zxvf apache-hive-3.1.3-bin.tar.gz

3.2 移动解压包

mv apache-hive-3.1.3-bin /usr/local/hive-3.1.3

3.3 hive基本配置

3.3.1 配置环境变量

vim /etc/profile

export HIVE_HOME=/usr/local/hive-3.1.3
export PATH=$PATH:$HIVE_HOME/bin

3.3.2 刷新环境变量

source /etc/profile

3.3.3 拷贝重命名hive-env.sh.template

cd /usr/local/hive-3.1.3/conf

cp hive-env.sh.template hive-env.sh

3.3.4 修改hive-env.sh

export HADOOP_HOME=/usr/local/hadoop-3.3.4
export HIVE_CONF_DIR=/usr/local/hive-3.1.3/conf
export HIVE_AUX_JARS_PATH=/usr/local/hive-3.1.3/lib
export JAVA_HOME=/usr/local/jdk1.8.0_211

3.3.5 拷贝重命名hive-log4j2.properties.template

cp hive-log4j2.properties.template hive-log4j2.properties

3.3.6 拷贝mysql-connector-java-8.0.30.jar驱动包

mv mysql-connector-java-8.0.30.jar /usr/local/hive-3.1.3/lib/

3.3.7 决hadoop 和 hive 中guava.har 版本不一致问题

cd /usr/local/hadoop-3.3.4/share/hadoop/common/lib
cp guava-27.0-jre.jar /usr/local/hive-3.1.3/lib/
cd /usr/local/hive-3.1.3/lib
rm -rf guava-19.0.jar

3.4 分发Hive

3.4.1 分发hive包

scp -r /usr/local/hive-3.1.3/ root@node1:/usr/local/
scp -r /usr/local/hive-3.1.3/ root@node2:/usr/local/
scp -r /usr/local/hive-3.1.3/ root@node3:/usr/local/
scp -r /usr/local/hive-3.1.3/ root@node4:/usr/local/

3.4.2 分发环境配置文件

scp /etc/profile root@node1:/etc/profile
scp /etc/profile root@node2:/etc/profile
scp /etc/profile root@node3:/etc/profile
scp /etc/profile root@node4:/etc/profile

注意:执行source /etc/profile 使环境生效

3.5 配置 metastore

3.5.1 创建hdfs目录

hdfs dfs -mkdir -p /usr/local/hive-3.1.3/hive_local/{warehouse,tmp,logs}
hdfs dfs -chmod -R 755 /usr/local/hive-3.1.3/hive_local/

提示:只需要执行一次

3.5.2 配置metastore-site.xml

cd /usr/local/hive-3.1.3/conf

cat > metastore-site.xml

vim metastore-site.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- hdfs 上 Hive元数据存放的位置 -->
<property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/usr/local/hive-3.1.3/hive_local/warehouse</value>
</property>

<!-- Hive作业的HDFS根目录位置 -->
<property>
    <name>hive.exec.scratchdir</name>
    <value>/usr/local/hive-3.1.3/hive_local/tmp</value>
</property>
<!-- Hive作业的HDFS根目录创建权限 -->
<property>
    <name>hive.scratch.dir.permission</name>
    <value>775</value>
</property>

<property>
    <name>hive.metastore.local</name>
    <value>true</value>
</property>
<!-- 数据库连接驱动 -->
<property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
</property>
<!-- 数据库地址,名称 -->
<property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://node2:3306/hive?createDatabaseIfNotExist=true</value>
</property>
<!-- 数据库连接用户 -->
<property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>root</value>
</property>
<!-- 数据库连接密码 -->
<property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>xiaoning</value>
</property>
<!-- 指定metastore连接地址 -->
<property>
    <name>hive.metastore.uris</name>
    <value>thrift://node3:9083</value>
</property>
</configuration>

3.5.3 启动metastore

3.5.3.1 初始化元数据

注意:任意node3、node4等部署metastore的节点选一个初始化,且只需要初始化一次
schematool -initSchema -dbType mysql -verbose

分别到 node3、node4启动 metastore

初始化数据后,使用连接工具连接上Mysql ,可以查看到hive数据库

3.5.3.2 创建日志目录

mkdir -pv $HIVE_HOME/logs

3.5.3.3 执行启动命令

hive --service metastore >> $HIVE_HOME/logs/metastore.log 2>&1 &

注意:Node4节点上启动metastore 前,需要修改 hive.metastore.uris地址为: thrift://node4:9083

3.5.3.4 查看是否启动成功

netstat -anp | grep 9083

如果出现端口号进程占用,说明启动成功了

3.6 配置hiveserver2

3.6.1 配置hiveserver2-site.xml

cd $HIVE_HOME/conf
cat > hiveserver2-site.xml

vim hiveserver2-site.xml

<configuration>
<!-- 远程metastore地址 -->
<property>
    <name>hive.metastore.uris</name>
    <value>thrift://node3:9083,thrift://node4:9083</value>
</property>
<!-- 开启hiveserver2高可用-->
<property>
  <name>hive.server2.support.dynamic.service.discovery</name>
  <value>true</value>
</property>

<property>
  <name>hive.server2.active.passive.ha.enable</name>
  <value>true</value>
</property>

<property>
  <name>hive.server2.zookeeper.namespace</name>
  <value>hiveserver2_zk</value>
</property>
<!--zookeeper连接地址 -->
<property>
  <name>hive.zookeeper.quorum</name>
  <value>node2:2181,node3:2181,node4:2181</value>
</property>

<property>
  <name>hive.zookeeper.client.port</name>
  <value>2181</value>
</property>

<property>
  <name>hive.server2.thrift.bind.host</name>
  <value>master</value>
</property>

<property>
  <name>hive.server2.thrift.port</name>
  <value>10001</value> 
</property>

<!--开启权限认证 -->
<property>
  <name>hive.security.authorization.enabled</name>
  <value>true</value>
</property>

<property>
  <name>hive.server2.enable.doAs</name>
  <value>false</value>
</property>

<property>
  <name>hive.users.in.admin.role</name>
  <value>root</value>
</property>

<property>
  <name>hive.security.authorization.manager</name>  <value>org.apache.hadoop.hive.ql.security.authorization.plugin.sqlstd.SQLStdHiveAuthorizerFactory</value>
</property>

<property>
  <name>hive.security.authenticator.manager</name>
  <value>org.apache.hadoop.hive.ql.security.SessionStateUserAuthenticator</value>
</property>
</configuration>

3.6.2 修改hadoop 配置

在hadoop安装目录下的core-site.xml中,需要开启hadoop代理用户配置

<property>
    <name>hadoop.proxyuser.root.hosts</name>
    <value>*</value>
</property>

<property>
    <name>hadoop.proxyuser.root.groups</name>
    <value>*</value>
</property>

说明:hadoop.proxyuser.xxx.hosts和hadoop.proxyuser.xxx.groups,其中xxx为启动HiveServer2的用户

配置完成后,需要重启hadoop集群,因为我上次部署hadoop集群,已经配置了上述各项配置,这里我可以忽略该步骤

3.6.3 启动hiveserver2服务

分别在master 、 node1、node2启动
其中node1,node2需要修改hiveserver2-site.xml文件,

#node1:
<property>
  <name>hive.server2.thrift.bind.host</name>
  <value>node1</value>
</property>

#node2:
<property>
  <name>hive.server2.thrift.bind.host</name>
  <value>node2</value>
</property>
3.6.3.1 创建日志目录

mkdir -pv $HIVE_HOME/logs

3.6.3.2 执行启动命令

hive --service hiveserver2 >> $HIVE_HOME/logs/hiveserver2.log 2>&1 &

3.6.3.3 查看启动是否成功

netstat -anp | grep 10001

3.7 配置Hive 客户端

3.7.1 配置hive-site.xml

touch hive-site.xml

vim hive-site.xml

<configuration>
<!--显示表的列名 -->
<property>
    <name>hive.cli.print.header</name>
    <value>true</value>
</property>

<!-- 显示数据库名称 -->
<property>
    <name>hive.cli.print.current.db</name>
    <value>true</value>
</property>
</configuration>

3.7.2 启动hive

hive

3.8 配置Beeline CLI

3.8.1 启动Beeline CLI 连接

提示:使用Beeline CLI连接需要配置hadoop中hdfs-site.xml 配置文件。需要启动webhdfs;

<!-- 开启webhdfs -->
<property>
    <name>dfs.webhdfs.enabled</name>
    <value>true</value>
</property>

配置完成后,需要重启hadoop集群,因为我上次部署hadoop集群,已经配置了上述各项配置,这里我可以忽略该步骤.

3.8.2 启动beeline

beeline

3.8.3 测试通过beeline连接hive2

!connect jdbc:hive2://master:10001

3.9 访问hive2页面

我们配置启动了三个hiveserver2服务,分别在master、node1、node2节点,所以三个节点均可访问到我们的hive2页面

HiveServer2

HiveServer2

HiveServer2

到此,我们就是实现了hive两个metastore节点,三个hiveserver2节点的分布式集群部署。

好了,今天Hive分布式集群部署的相关内容就分享到这里,如果帮助到大家,欢迎大家点赞+关注+收藏,有疑问也欢迎大家评论留言!


本文转载自: https://blog.csdn.net/qq_25409421/article/details/133072213
版权归原作者 夜夜流光相皎洁_小宁 所有, 如有侵权,请联系我们删除。

“一篇文章教会你搭建Hive分布式集群”的评论:

还没有评论