Hive on Hbase
Hive on Hbase介绍
-
功能:实现Hive与Hbase集成,使用Hive SQL对Hbase的数据进行处理
-
原理
-
Hive的功能:使用HQL对表的数据进行处理
-
本质:通过MapReduce对HDFS中的文件进行处理
-
原理
-
TextInputFormat:读文件
-
TextOutputFormat:写文件
-
-
-
MapReduce的功能:读取数据进行分布式计算
-
InputFormat:输入类
- TextInputFormat:默认的输入类,用于读取文件系统
- DBInputFormat:用于读取JDBC数据库
- 实现Sqoop导入的:将MySQL数据导入到Hive或者HDFS
- TableInputFormat:用于读取Hbase数据
-
OutputFormat:输出类
-
TextOutputFormat:默认的输出类,用于将结果写入文件系统
-
DBOutputFormat:用于写入JDBC数据库
- 实现Sqoop导出的:将HDFS数据写入MySQL
-
TableOutputFormat:用于写入HBase数据库
-
-
-
原理:Hive可以通过MapReduce来实现映射读写Hbase表的数据
-
-
特点
-
优点:支持完善的SQL语句,可以实现各种复杂SQL的数据处理及计算,通过分布式计算程序实现,对大数据量的数据处理比较友好
-
缺点:不支持二级索引,数据量不是特别大的情况下,性能一般
-
-
应用
- 基于大数据高性能的离线读写,并且使用SQL来开发
Hive on Hbase 配置
-
需求
- 配置Hive与Hbase集成,实现Hive中可以读写Hbase表
-
分析
- step1:修改Hive配置文件,指定Hbase的Zookeeper地址
- step2:按顺序启动HDFS、ZK、Hbase、Hive
-
实现
-
全部操作在装有hive的节点配置
-
修改hive-site.xml:Hive通过SQL访问Hbase,就是Hbase的客户端,就要连接zookeeper
cd /export/server/hive-2.1.0-bin/ vim conf/hive-site.xml
<property> <name>hive.zookeeper.quorum</name> <value>node1,node2,node3</value> </property> <property> <name>hbase.zookeeper.quorum</name> <value>node1,node2,node3</value> </property> <property> <name>hive.server2.enable.doAs</name> <value>false</value> </property>
-
修改hive-env.sh
export HBASE_HOME=/export/server/hbase-2.1.0
-
启动HDFS、ZK、Hbase:第一台机器
start-dfs.sh /export/server/zookeeper-3.4.6/bin/start-zk-all.sh start-hbase.sh
-
启动Hive和YARN:第三台机器
#启动YARN start-yarn.sh #先启动metastore服务 start-metastore.sh #然后启动hiveserver start-hiveserver2.sh #然后启动beeline start-beeline.sh
-
-
总结
- 先配置Hive的配置文件:添加Hbase的地址
- 然后按照先后顺序启动即可
Hive on Hbase 实现
-
需求
- 在Hive中实现对Hbase表的数据读写
-
分析
- step1:如果表在Hbase中没有,Hive中没有,在Hive中创建表,指定在Hbase中创建关联表
- 场景比较少
- 在Hive中建一张表,自动在Hbase中也创建一张对应的表
- step2:如果表在Hbase中有,但是Hive中没有,Hive中创建一张外部表,关联Hbase表
- 主要应用的方式
- Hbase中的表已经存在,已经有数据,构建一张Hive关联表,使用SQL进行查询
- step1:如果表在Hbase中没有,Hive中没有,在Hive中创建表,指定在Hbase中创建关联表
-
实现
-
在安装hive的机器中测试
-
如果Hbase中表不存在:【用的比较少】
-
创建测试数据文件
vim /export/data/hive-hbase.txt 1,zhangsan,80 2,lisi,60 3,wangwu,30 4,zhaoliu,70
-
创建测试表
--创建测试数据库 create database course; --切换数据库 use course; --创建原始数据表 create external table if not exists course.score( id int, cname string, score int ) row format delimited fields terminated by ',' stored as textfile ; --加载数据文件 load data local inpath '/export/data/hive-hbase.txt' into table score;
-
创建一张Hive与HBASE的映射表
create table course.hbase_score( id int, cname string, score int ) stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with serdeproperties("hbase.columns.mapping" = "cf:name,cf:score") tblproperties("hbase.table.name" = "hbase_score");
-
将测试表的数据写入映射表
set hive.exec.mode.local.auto=true; insert overwrite table course.hbase_score select id,cname,score from course.score;
-
-
如果Hbase中表已存在,只能创建外部表
create external table course.t1( key string, name string, age string, addr string, phone string ) stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with serdeproperties("hbase.columns.mapping" = ":key,basic:name,basic:age,other:addr,other:phone") tblproperties("hbase.table.name" = "itcast:t1");
-
-
总结
-
Hive中的只是关联表,并没有数据,数据存储在Hbase表中
-
在Hive中创建Hbase的关联表,关联成功后,使用SQL处理关联表
-
如果Hbase中表不存在,默认使用Hive的第一列作为rowkey
-
如果Hbase中表已存在,只能建外部表,使用:key来表示rowkey
-
HIve中与Hbase关联的表,不能使用load加载,只能使用insert,通过MR读写数据
-