Hbase 表与Hive 表的映射操作

一、环境准备

需要将HBase的jar包拷贝到Hive中,以便Hive运行时能访问到Hbase

这里演示创建软连接的方式

ln -s $HBASE_HOME/lib/HBase-common-1.3.1.jar  $HIVE_HOME/lib/HBase-common-1.3.1.jar
ln -s $HBASE_HOME/lib/HBase-server-1.3.1.jar $HIVE_HOME/lib/HBase-server-1.3.1.jar
ln -s $HBASE_HOME/lib/HBase-client-1.3.1.jar $HIVE_HOME/lib/HBase-client-1.3.1.jar
ln -s $HBASE_HOME/lib/HBase-protocol-1.3.1.jar $HIVE_HOME/lib/HBase-protocol-1.3.1.jar
ln -s $HBASE_HOME/lib/HBase-it-1.3.1.jar $HIVE_HOME/lib/HBase-it-1.3.1.jar
ln -s $HBASE_HOME/lib/htrace-core-3.1.0-incubating.jar $HIVE_HOME/lib/htrace-core-3.1.0-incubating.jar
ln -s $HBASE_HOME/lib/HBase-hadoop2-compat-1.3.1.jar $HIVE_HOME/lib/HBase-hadoop2-compat-1.3.1.jar
ln -s $HBASE_HOME/lib/HBase-hadoop-compat-1.3.1.jar $HIVE_HOME/lib/HBase-hadoop-compat-1.3.1.jar

二、Hbase中无表数据

此时hive需要建立一个内部表来管理数据,并且导入数据时只能用insert

数据如下

depid    deptname         sal
10      ACCOUNTING      1700
20      RESEARCH        1800
30      SALES           1900
40      OPERATIONS      1700    

2.1hive建表语句

create table hive_table(
deptid int,
deptname string,
sal string
)
--固定格式,什么跟hive映射,就是XXXStorageHandler
STORED BY ‘org.apache.hadoop.hive.hbase.HBaseStorageHandler‘
--这里字段要跟上面的保持一致,意思为deptid作为rowkey,deptname作为info列族中的deptname列
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:deptname,info:num")
--Hbase中的表名
TBLPROPERTIES ("hbase.table.name" = "dept2");

这里解释下为什么要用Stored by 而不是  row Format

Hive建表时分本地表(native table)和非本地表(non-native table):

本地表(native table): 指传统情况下。hive中表的数据是直接存储在hdfs上!建表时,可以指定ROW FORMAT 和 STORED AS

非本地表(non-native table): hive表中的数据没有存储在hdfs上!而是存储在其他的数据库中(例如hbase中,mongdb中,kafka中,ES中等等)

建表时指定STORED BY ’类名‘

STORED BY 代表,在向表中读写数据时,借助此handler类完成操作!

------------------------------------------------------------------------------------------------------

这时可能会报错:xecution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. org.apache.hadoop.hbase.HTableDescriptor.addFamily(Lorg/apache/hadoop/hbase/HColumnDescriptor;)V

原因是hive跟Hbase版本不兼容,需要编译hive源码

2.2利用insert导入数据

insert into hive_table select * from dept;

三、Hbase已有表数据

跟上个不同的是,这里只允许建外部表

3.1建表语句

CREATE external TABLE hive_HBase_dept_table(
deptid int,
deptname string,
num int
)
STORED BY ‘org.apache.hadoop.hive.hbase.HBaseStorageHandler‘--这里要跟Hbase表中的列族和列对应起来
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:deptname,info:num")
TBLPROPERTIES ("hbase.table.name" = "dept")

注意点

hive中表的列的类型,需要和hbase表中存储的数据类型一致,或需要保证转换不能失败!

在进行列的映射时,字段的顺序要和hive表中的列的顺序一致

这样建出来的表直接就是带有数据的

原文地址:https://www.cnblogs.com/yangxusun9/p/12552200.html

时间: 2024-08-25 07:33:05

Hbase 表与Hive 表的映射操作的相关文章

利用hive-hbase表做hive表快速入库hbase功能,纬度表的查询

有个需求是纬度表需要秒出数据,首先表刚好也是1-1批对的情况,首先想到了利用hbase的索引机制.(表数据大概在4--30E之间) 虽然网上有很多直接建立hive表,自动创建hbase表的例子,但是这种情况不能进行hbase表的region预分区,导致热点问题比较严重.所以hive和hbase表要分开建立再关联起来. 1.建立hbase表 create 'xxxxx', {NAME => 'info',COMPRESSION => 'SNAPPY'},SPLITS => ['xxx|',

优雅的将hbase的数据导入hive表

v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} wgx wgx 2 67 2016-04-02T15:15:00Z 2016-04-02T15:15:00Z 1 233 1332 11 3 1562 15.00 Clean Clean false 7.8 磅 0

Hive表操作以及原理

hive    hive是基于hadoop的一个数据仓库工具,可将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可将sql转换为MapReduce任务运行.hive不适合用于联机事务处理,也不提供实时查询,他适合应用在基于大量不可变的批处理作业.    hive架构分为四个部分:        用户接口:            CLI:hive的命令模式,启动命令hive            Client:hive的远程服务,启动命令hive --service hivese

hive-hbase-handler方式导入hive表数据到hbase表中

Hive与HBase的整合功能的实现是利用两者本身对外的API接口互相进行通信,相互通信主要是依靠hive-hbase-handler.jar工具类 : hive-hbase-handler.jar在hive的lib包中而不是在hbase的lib中,hive0.6版本以后: 创建hive表的同时创建hbase表,删除 hive表的同时也会删除对应的hbase表. 参见官方文档:https://cwiki.apache.org/confluence/display/Hive/HBaseIntegr

创建Hive/hbase相关联的表异常

hive> CREATE TABLE hperson(id string, name string,email string) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":id,cf1:name,cf2:email") TBLPROPERTIES ("hbase.table.

Hive基础之Hive表常用操作

本案例使用的数据均来源于Oracle自带的emp和dept表 创建表 语法: CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name [(col_name data_type [COMMENT col_comment], ...)] [COMMENT table_comment] [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] [CLUSTERED

hive表信息查询:查看表结构、表操作等--转

原文地址:http://www.aboutyun.com/forum.PHP?mod=viewthread&tid=8590&highlight=Hive 问题导读:1.如何查看hive表结构?2.如何查看表结构信息?3.如何查看分区信息?4.哪个命令可以模糊搜索表? 1.hive模糊搜索表  show tables like '*name*'; 2.查看表结构信息  desc formatted table_name;  desc table_name; 3.查看分区信息  show p

Hive命令行常用操作(数据库操作,表操作)

数据库操作 查看所有的数据库 hive> show databases ; 使用数据库default hive> use default; 查看数据库信息 hive > describe database default; OK db_name comment location owner_name owner_type parameters default Default Hive database hdfs://hadoop1:8020/user/hive/warehouse pub

hive表信息查询:查看表结构、表操作等

转自网友的,主要是自己备份下 有时候不记得! 问题导读:1.如何查看hive表结构?2.如何查看表结构信息?3.如何查看分区信息?4.哪个命令可以模糊搜索表 1.hive模糊搜索表 show tables like '*name*'; 2.查看表结构信息  desc formatted table_name;  desc table_name; 3.查看分区信息  show partitions table_name; 4.根据分区查询数据  select table_coulm from ta