一、环境描述
系统环境描述:本教程基于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分布式集群部署的相关内容就分享到这里,如果帮助到大家,欢迎大家点赞+关注+收藏,有疑问也欢迎大家评论留言!
版权归原作者 夜夜流光相皎洁_小宁 所有, 如有侵权,请联系我们删除。