Hive的安装部署


hive的安装

1.Hive 安装及配置

(1)把 apache-hive-3.1.2-bin.tar.gz 上传到 linux 的/opt/software 目录下
(2)解压 apache-hive-3.1.2-bin.tar.gz 到/opt/module/目录下面

[zx@hadoop102 sofeware]$ tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /opt/module/

(3)修改 apache-hive-1.2.1-bin.tar.gz 的名称为 hive

[zx@hadoop102 module]$ mv apache-hive-3.1.2-bin/ hive

(4)配置环境变量

vim /etc/profile.d/my_env.sh
#添加如下内容
#HIVE_HOME
export HIVE_HOME=/opt/module/hive
export PATH=$PATH:$HIVE_HOME/bin
#使环境变量生效
[zx@hadoop102 hive]$ source /etc/profile

(5)解决日志jar包冲突

[zx@hadoop102 hive]$ mv $HIVE_HOME/lib/log4j-slf4j-impl-2.10.0.jar $HIVE_HOME/lib/log4j-slf4j-impl-2.10.0.bak

(6)初始化元数据库

[zx@hadoop102 hive]$ bin/schematool -dbType derby -initSchema

初始化时报错:Exception in thread “main” java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgumen
报错如下:
Exception in thread “main” java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V
at org.apache.hadoop.conf.Configuration.set(Configuration.java:1380)

at org.apache.hadoop.util.RunJar.main(RunJar.java:236)

原因:
hadoop和hive的两个guava.jar版本不一致
两个位置分别位于下面两个目录:

  • $HIVE_HOME/lib/
  • $HIVE_HOME/share/hadoop/common/lib/

解决办法:
删除低版本的那个,将高版本的复制到低版本目录下

[zx@hadoop102 lib]$ mv guava-19.0.jar guava-19.0.jar_bak
[zx@hadoop102 hive]$ cp /opt/module/hadoop-3.1.3/share/hadoop/common/lib/guava-27.0-jre.jar lib/

再次初始化
在这里插入图片描述
成功

2. 启动并使用Hive

(1)启动hive
[zx@hadoop102 hive]$ bin/hive
(2)查看数据库

hive> show databases;

(3)打开默认数据库

hive> use default;

(4)显示 default 数据库中的表

hive> show tables;

(5)创建一张表

hive> create table student(id int  , name string);

(6)显示数据库中有几张表

hive> show tables;

(7)查看表的结构

hive> desc student;

(8)向表中插入数据

hive> insert into student values(1000,"ss");

(9)查询表中数据

hive> select * from student;

(10)退出 hive

hive> quit;

3.遇到的问题

再打开一个客户端窗口启动 hive,会产生 java.sql.SQLException 异常。
原因是,hive 默认使用发元数据库位 derby ,开启hive后就会占用数据库,且不会与其他用户共享数据,所以我们需要将hive的元数据库地址改为MySQL。

MySQL安装

1.查看 mysql 是否安装,如果安装了,卸载 mysql

(1)查看

[zx@hadoop102 sofeware]$ rpm -qa|grep mariadb
mariadb-libs-5.5.65-1.el7.x86_64

(2)卸载

[zx@hadoop102 sofeware]$ sudo rpm -e --nodeps mariadb-libs

2.驱动拷贝

将MySQL的JDBC驱动拷贝到HIVE的lib目录下
即拷贝/opt/software/mysql-libs/mysql-connector-java-5.1.27 目录下的 mysqlconnector-java-5.1.27-bin.jar 到/opt/module/hive/lib/

[zx@hadoop102 hive]$ cp /opt/sofeware/mysql-connector-java-5.1.27-bin.jar $HIVE_HOME/lib/

3. 配置 Metastore 到 MySql

(1)在/opt/module/hive/conf 目录下创建一个 hive-site.xml

[zx@hadoop102 conf]$ touch hive-site.xml
[zx@hadoop102 conf]$ vi hive-site.xml
#添加如下内容
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
        <!-- jdbc连接的url -->
        <property>
                <name>javax.jdo.option.ConnectionURL</name>
                <value>jdbc:mysql://hadoop102:3306/metastore?useSSL=false</value>
        </property>
        <!-- jdbc连接的Driver -->
        <property>
                <name>javax.jdo.option.ConnectionDriverName</name>
                <value>com.mysql.jdbc.Driver</value>
        </property>
        <!-- jdbc连接的username -->
        <property>
                <name>javax.jdo.option.ConnectionUserName</name>
                <value>root</value>
        </property>
        <!-- jdbc连接的password -->
        <property>
                <name>javax.jdo.option.ConnectionPassword</name>
                <value>000000</value>
        </property>
        <!-- Hive元数据存储版本的验证 -->
        <property>
                <name>hive.metastore.schema.verification</name>
                <value>false</value>
        </property>
        <!-- 元数据存储授权 -->
        <property>
                <name>hive.metastore.event.db.notification.api.auth</name>
                <value>false</value>
        </property>
        <!-- Hive默认在HDFS的工作目录 -->
        <property>
                <name>hive.metastore.warehouse.dir</name>
                <value>/user/hive/warehouse</value>
        </property>
</configuration>

4. 安装MySQL

(1)解压

[zx@hadoop102 sofeware]$ tar -xvf mysql-5.7.28-1.el7.x86_64.rpm-bundle_2.tar 

在这里插入图片描述
(2)在安装目录下执行rpm安装

[zx@hadoop102 sofeware]$ 
sudo rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm

注意:安装顺序依次执行 如果Linux是最小化安装的,在安装mysql-community-server-5.7.28-1.el7.x86_64.rpm时可能出现如下错误
在这里插入图片描述
通过yum安装缺少的依赖,然后重新安装mysql-community-server-5.7.28-1.el7.x86_64.rpm即可

[zx@hadoop102 sofeware]$ yum install -y libaio

(3)删除/etc/my.cnf文件中datadir指向的目录的所有内容(若该目录里无内容可以不做这步处理)
查看datadir的值
在这里插入图片描述
删除/var/lib/mysql目录下的所有内容

[zx@hadoop102 mysql]$ cd /var/lib/mysql
[zx@hadoop102 mysql]$ sudo rm -rf ./*

注意删除时千万不能少点,不然整个系统都会被删,即不能是 rm -rf /*
(4)初始化数据库

[zx@hadoop102 opt]$ sudo mysqld --initialize --user=mysql

(5)查看临时生成的root用户密码

[zx@hadoop102 opt]$ sudo cat /var/log/mysqld.log

在这里插入图片描述
密码:Le_OLmos,4?T
(6)启动MySQL数据库

[zx@hadoop102 opt]$ sudo systemctl start mysqld
[zx@hadoop102 opt]$ sudo systemctl enable mysqld #可以设置开机自启

(7)登录MySQL数据库

[zx@hadoop102 opt]$ mysql -uroot -p[密码]

在这里插入图片描述

(8)必须先修改root用户的密码,否则执行其他的操作会报错

mysql> set password = password("000000");

(9)修改mysql库下的user表中的root用户允许任意ip连接

mysql> update mysql.user set host='%' where user='root';
mysql> flush privileges;

Hive元数据配置到MySQL

1.登录MySQL

[zx@hadoop102 opt]$ mysql -uroot -p000000

2. 新建Hive元数据库

mysql> create database metastore;
mysql> quit;

在这里插入图片描述
创建的数据库名要与之前配置的 hive-site.xml文件中一致

3. 初始化Hive元数据库

[zx@hadoop102 hive]$ schematool -initSchema -dbType mysql -verbose

再次启动Hive

1. 启动hive

[zx@hadoop102 hive]$ bin/hive

2. 使用hive

hive> show databases;
hive> show tables;
hive> create table test (id int);
hive> insert into test values(1);
hive> select * from test;

3. 在 Xshell窗口中开启另一个窗口开启 Hive

hive> show databases;
hive> show tables;
hive> select * from test;

使用元数据服务的方式访问 Hive(让第三方能够连接到hive)

1. 在 hive-site.xml 文件中添加如下配置信息

	<!-- 指定存储元数据要连接的地址 -->
	<property>
		<name>hive.metastore.uris</name>
		<value>thrift://hadoop102:9083</value>
	</property>

2. 启动 metastore

[zx@hadoop202 hive]$ hive --service metastore
2020-04-24 16:58:08: Starting Hive Metastore Server

注意: 启动后窗口不能再操作,需打开一个新的 shell 窗口做别的操作

3. 启动 hive

[zx@hadoop202 hive]$ bin/hive

使用 JDBC 方式访问 Hive

1. 在 hive-site.xml 文件中添加如下配置信息

	<!-- 指定 hiveserver2 连接的 host -->
	<property>
		<name>hive.server2.thrift.bind.host</name>
		<value>hadoop102</value>
	</property>
	<!-- 指定 hiveserver2 连接的端口号 -->
	<property>
		<name>hive.server2.thrift.port</name>
		<value>10000</value>
	</property>

2. 启动 hiveserver2

[zx@hadoop102 hive]$ bin/hive --service hiveserver2

3. 启动 beeline 客户端(需要多等待一会再连接)

[zx@hadoop102 hive]$ bin/beeline -u jdbc:hive2://hadoop102:10000 -n zx

此时会报如下错误

[zx@hadoop102 hive]# bin/beeline -u jdbc:hive2://hadoop102:10000 -n zx
Connecting to jdbc:hive2://hadoop102:10000
22/03/10 19:54:31 [main]: WARN jdbc.HiveConnection: Failed to connect to hadoop102:10000
Error: Could not open client transport with JDBC Uri: jdbc:hive2://hadoop102:10000: Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: zx is not allowed to impersonate zx (state=08S01,code=0)
Beeline version 3.1.2 by Apache Hive

解决方法
注意连接时要启动 metastore和 hiveserver2即:

[zx@hadoop202 hive]$ hive --service metastore
[zx@hadoop102 hive]$ bin/hive --service hiveserver2

4. 看到如下界面就是成功

Connecting to jdbc:hive2://hadoop102:10000
Connected to: Apache Hive (version 3.1.2)
Driver: Hive JDBC (version 3.1.2)
Transaction isolation: TRANSACTION_REPEATABLE_READ
Beeline version 3.1.2 by Apache Hive
0: jdbc:hive2://hadoop102:10000>

编写 hive 服务启动脚本(了解)

1. 前台启动的方式导致需要打开多个 shell 窗口,可以使用如下方式后台方式启动

nohup: 放在命令开头,表示不挂起,也就是关闭终端进程也继续保持运行状态
/dev/null:是 Linux 文件系统中的一个文件,被称为黑洞,所有写入改文件的内容都会被自动丢弃
2>&1 : 表示将错误重定向到标准输出上
&: 放在命令结尾,表示后台运行

一般会组合使用: nohup [xxx 命令操作]> file 2>&1 &,表示将 xxx 命令运行的结果输出到 file 中,并保持命令启动的进程在后台运行。

[zx@hadoop202 hive]$ nohup hive --service metastore 2>&1 &
[zx@hadoop202 hive]$ nohup hive --service hiveserver2 2>&1 &

若想要关闭这两项服务,要使用kill -9 端口号
可以用jps查看端口号
在这里插入图片描述

但metastore,hiveserver2,beeline的名称都是RunJar,所以很难知道哪个端口号对应哪个服务

2. 为了方便使用,可以直接编写脚本来管理服务的启动和关闭

[zx@hadoop102 hive]$ vim $HIVE_HOME/bin/hiveservices.sh

内容如下:此脚本的编写不要求掌握。直接拿来使用即可。

#!/bin/bash
HIVE_LOG_DIR=$HIVE_HOME/logs
if [ ! -d $HIVE_LOG_DIR ]
then
	mkdir -p $HIVE_LOG_DIR
fi
#检查进程是否运行正常,参数 1 为进程名,参数 2 为进程端口
function check_process()
{
	pid=$(ps -ef 2>/dev/null | grep -v grep | grep -i $1 | awk '{print
$2}')
 	ppid=$(netstat -nltp 2>/dev/null | grep $2 | awk '{print $7}' | cut -
d '/' -f 1)
 	echo $pid
 	[[ "$pid" =~ "$ppid" ]] && [ "$ppid" ] && return 0 || return 1
}
function hive_start()
{
	metapid=$(check_process HiveMetastore 9083)
	cmd="nohup hive --service metastore >$HIVE_LOG_DIR/metastore.log 2>&1
&"
 	[ -z "$metapid" ] && eval $cmd || echo "Metastroe 服务已启动"
 	server2pid=$(check_process HiveServer2 10000)
 	cmd="nohup hiveserver2 >$HIVE_LOG_DIR/hiveServer2.log 2>&1 &"
 	[ -z "$server2pid" ] && eval $cmd || echo "HiveServer2 服务已启动"
}
function hive_stop()
{
	metapid=$(check_process HiveMetastore 9083)
 	[ "$metapid" ] && kill $metapid || echo "Metastore 服务未启动"
 	server2pid=$(check_process HiveServer2 10000)
 	[ "$server2pid" ] && kill $server2pid || echo "HiveServer2 服务未启动"
}
case $1 in
"start")
	hive_start
;;
"stop")
	hive_stop
;;
"restart")
 	hive_stop
 	sleep 2
 	hive_start
;;
"status")
 	check_process HiveMetastore 9083 >/dev/null && echo "Metastore 服务运行
正常" || echo "Metastore 服务运行异常"
 	check_process HiveServer2 10000 >/dev/null && echo "HiveServer2 服务运
行正常" || echo "HiveServer2 服务运行异常"
;;
*)
 	echo Invalid Args!
 	echo 'Usage: '$(basename $0)' start|stop|restart|status'
;;
esac

3. 添加执行权限

[zx@hadoop102 hive]$ chmod +x $HIVE_HOME/bin/hiveservices.sh

4. 启动 Hive 后台服务

[zx@hadoop102 hive]$ hiveservices.sh start
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值