Hbase高手之路 -- 第七章 -- HBase和Hive(类sql)的整合

8 篇文章 3 订阅
8 篇文章 0 订阅

Hbase高手之路 – 第七章 – HBase和Hive(类sql)的整合

在实际业务中,由于hbase不支持SQL,因此查询很不方便,效率低。由于hive支持SQL(HQL),可以将hbase和hive进行整合,通过使用hive数据仓库操作hbase中的数据。

一、 远程模式安装

1. hive的下载

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 上传安装包

在这里插入图片描述

3. 解压并改名

在这里插入图片描述
在这里插入图片描述

4. 解决hadoop、hive之间guava版本差异

cd /export/servers/hive
rm -rf lib/guava-19.0.jar
cp /export/servers/hadoop-3.1.4/share/hadoop/common/lib/guava-27.0-jre.jar ./lib/

在这里插入图片描述

5. 添加mysql jdbc驱动到hive安装包lib/文件下

在这里插入图片描述

6. 修改配置文件

在这里插入图片描述
使环境变量起的作用

source /etc/profile

在这里插入图片描述

7. 修改hive环境变量文件 添加Hadoop_HOME

cd /export/servers/hive/conf/
mv hive-env.sh.template hive-env.sh

在这里插入图片描述

vi hive-env.sh

在这里插入图片描述

export HADOOP_HOME=/export/servers/hadoop-3.1.4
export HIVE_CONF_DIR=/export/servers/hive/conf
export HIVE_AUX_JARS_PATH=/export/servers/hive/lib

在这里插入图片描述

8. 新增hive-site.xml 配置mysql等相关信息

vi hive-site.xml

在这里插入图片描述

<configuration>
    <!-- 存储元数据mysql相关配置 -->
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value> jdbc:mysql://hadoop01:3306/hive?createDatabaseIfNotExist=true&amp;useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8</value>
    </property>

    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
    </property>

    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
    </property>

    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>Root23!</value>
    </property>

    <!-- H2S运行绑定host -->
    <property>
        <name>hive.server2.thrift.bind.host</name>
        <value>hadoop01</value>
    </property>

    <!-- 远程模式部署metastore 服务地址 -->
    <property>
        <name>hive.metastore.uris</name>
        <value>thrift://hadoop01:9083</value>
    </property>

    <!-- 关闭元数据存储授权  -->
    <property>
        <name>hive.metastore.event.db.notification.api.auth</name>
        <value>false</value>
    </property>

    <!-- 关闭元数据存储版本的验证 -->
    <property>
        <name>hive.metastore.schema.verification</name>
        <value>false</value>
</property>

<property>
        <name>hive.zookeeper.quorum</name>
        <value>hadoop01,hadoop02,hadoop03</value>
    </property>
	<property>
        <name>hive.zookeeper.client.port</name>
        <value>2181</value>
    </property>
</configuration>

9. 初始化metadata

cd /export/servers/hive
bin/schematool -initSchema -dbType mysql -verbos

在这里插入图片描述
在这里插入图片描述
#初始化成功会在mysql中创建74张表

在这里插入图片描述

10. 导入依赖

将hbase的lib目录下的相关依赖的jar包复制到hvie的lib目录下
注意 注意 注意
这一步会导致guava有两个版本,删除低版本,留下之前解决冲突的版本

在这里插入图片描述

11. 前台启动 关闭ctrl+c

/export/servers/hive/bin/hive --service metastore

在这里插入图片描述
克隆一个会话重新启动

/export/servers/hive/bin/hive

在这里插入图片描述
在这里插入图片描述

12. 后台启动 进程挂起 关闭使用jps + kill

#输入命令回车执行 再次回车 进程将挂起后台

nohup /export/servers/hive/bin/hive --service metastore &

在这里插入图片描述
日志输出到了如下文件中(在哪启动,日志就输出到哪)

在这里插入图片描述
再次启动hive
在这里插入图片描述

在这里插入图片描述
退出时记得kill掉后台进程

在这里插入图片描述

13. 前台启动开启debug日志

/export/servers/hive/bin/hive --service metastore --hiveconf hive.root.logger=DEBUG,console

二、 3.2 将hive安装到hadoop03

1. 将安装包上传

在这里插入图片描述

2. 解压改名

在这里插入图片描述
在这里插入图片描述

3. 解决hadoop、hive之间guava版本差异

cd /export/servers/hive
rm -rf lib/guava-19.0.jar
cp /export/servers/hadoop-3.1.4/share/hadoop/common/lib/guava-27.0-jre.jar ./lib/

在这里插入图片描述

4. 修改hive环境变量文件 添加Hadoop_HOME

cd /export/servers/hive/conf
mv hive-env.sh.template hive-env.sh

在这里插入图片描述

vi hive-env.sh

在这里插入图片描述

export HADOOP_HOME=/export/servers/hadoop-3.1.4
export HIVE_CONF_DIR=/export/servers/hive/conf
export HIVE_AUX_JARS_PATH=/export/servers/hive/lib

在这里插入图片描述

5. 新增hive-site.xml 配置mysql等相关信息

vi hive-site.xml

在这里插入图片描述
添加以下信息

<configuration>
    <!-- 远程模式部署metastore 服务地址 -->
    <property>
        <name>hive.metastore.uris</name>
        <value>thrift://hadoop01:9083</value>
    </property>
</configuration>

在这里插入图片描述

6. 启动hive(Hadoop01的 metastore服务必须开启)

在这里插入图片描述

测试,发现成功同步

在这里插入图片描述

三、 3.3 bin/beeline客户端的使用

1. 在matestore服务的基础上启动hiveserver2

/export/servers/hive/bin/hive --service hiveserver2

在这里插入图片描述
注意hiveserver2启动后需要等一会儿才能使用,这一点比较难受

2. 启动beeline

/export/servers/hive/bin/beeline

无日志启动

/export/servers/hive/bin/beeline --hiveconf hive.server2.logging.operation.level=NONE

设置本地运行避免小数据通过mr处理缓慢

set hive.exec.mode.local.auto=true;

在这里插入图片描述

! connect jdbc:hive2://hadoop01:10000

在这里插入图片描述

测试,成功运行
并且发现beeline客户端还可以打印日志信息
在这里插入图片描述

四、 3.4 编写脚本启动hive

以上的⽅式启动、停⽌hive⽐较麻烦,下⾯编写⼀个Hive启动/停⽌脚本hive-
script.sh,⽤于⾃动启停hive。(该脚本仅限启动metastore和hiveserver2服务)

1. 创建脚本

在这里插入图片描述

2. 编写脚本

#!/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 hive --service 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. 为脚本添加运行权限

chmod +x hive-script.sh

在这里插入图片描述

4. 测试脚本

⽤脚本启动、停⽌、重启、检测运⾏状态的命令分别为:

hive-script.sh start
hive-script.sh stop
hive-script.sh restart
hive-script.sh status

注意:hive --service hiveserver2启动较慢,启动后在⽤hive-script.sh status检测服务状态时要多等⼀会⼉,否则报服务运⾏异常。

启动脚本并查看状态
在这里插入图片描述
启动beeline服务端

在这里插入图片描述
关闭服务

在这里插入图片描述

五、 新建Hive表跟HBase建立关联

1. 新建数据库

在这里插入图片描述

2. 新建表

create table book(
    id int,
    name string,
    price double
)
stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' 
with serdeproperties("hbase.columns.mapping"=":key,info:name,info:price")
tblproperties("hbase.table.name"="book");

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值