hbase表与hive表的映射操作(代码片段)

yangxusun9 yangxusun9     2023-04-09     798

关键词:

一、环境准备

需要将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表中的列的顺序一致

 

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

hbase与hive的集成操作(代码片段)

...进行Join和Union等复杂查询,同时也可以将hive表中的数据映射到HBase中;2.模型概念  2.1将ETL操作的数据存入HBase      2.2HBase作为Hive的数据源      2.3构建低延时的数据仓库    3.搭建环境  3.1修改hive-site.xm... 查看详情

建立hive和hbase的映射关系,通过spark将hive表中数据导入clickhouse(代码片段)

...43;Spark+ClickHouse​在HBase中建表,通过Hive与HBase建立映射关系,实现双方新增数据后彼此都可以查询到。通过spark将Hive中的数据读取到并经过处理保存到ClickHouse中一Hbase1Hbase表操作1.1创建命名空间hbase(main):008:0>create_nam... 查看详情

HiveContext - 无法访问在 hive 中映射为外部表的 hbase 表

】HiveContext-无法访问在hive中映射为外部表的hbase表【英文标题】:HiveContext-unabletoaccesshbasetablemappedinhiveasexternaltable【发布时间】:2017-06-2211:26:22【问题描述】:我正在尝试使用Spark中的HiveContext访问在hive中映射的hbase表。但我得... 查看详情

hbase总结(代码片段)

HBase概述HBase表的核心概念总结HBase的架构MasterRegionServer结构功能HBase的安装与shell操作安装启动与关闭ddl与dml操作ddl(表操作)dml(数据操作)HBase进阶HBase的高性能原理架构细节读写流程MemStoreFlushMemStore刷写时机合并与切分JAVAAPITOCHBase... 查看详情

hbase与hive集成(代码片段)

...集成使用案例一建立Hive表,关联HBase表,插入数据到Hive表的同时能够影响HBase表在Hive中创建表同时关联HBaseCREATETABLEhive_hbase_emp_table(empnoint,enamestring,jobstring,mgrint,hiredatestring,saldouble,commdouble,deptnoint)STOREDBY'org.apache.hadoop.hive.hbase.H... 查看详情

6-[表操作]--foreignkey表与表的关系(代码片段)

1、foreignkey  (1)快速理解foreignkey  员工信息表有三个字段:工号姓名部门  公司有3个部门,但是有1个亿的员工,那意味着部门这个字段需要重复存储,部门名字越长,越浪费        解决方法:  我们... 查看详情

hbase(代码片段)

...ase部署2.1.4HBase服务的启动2.2HBaseShell操作2.2.1基本操作2.2.2表的操作3HBase进阶3.1架构原理3.2写流程3.3MemStoreFlush3.4读流程3.5StoreFileCompaction3.6RegionSplit4.2HBaseAPI4.3MapReduce4.3.1官方HBase-MapReduce4.3.2使用MapReduce将本地数据导入到HBase4.3.3自定... 查看详情

hive表的常用操作(代码片段)

...询练习,如groupby、having、join、sortby、orderby等。一:hive表的操作1.1.1hive的库的创建与数据库的查看:hive(default)>createdatabaseyangyang;hive(default) 查看详情

hbase(代码片段)

...的集成,使得能够在HBase表上使用hivesql语句进行查询插入操作以及进行Join和Union等复杂查询、同时也可以将 查看详情

用idea操作hbase数据库,并映射到hive

...件:需要有Hadoop,hive,zookeeper,hbase环境映射:每一个在Hive表中的域都存在于HBase中,而在Hive表中不需要包含所有HBase中的列。HBase中的RowKey对应到Hive中为选择一个域使用:key来对应,列族(cf:)映射到Hive... 查看详情

hive表的创建的操作与测试(代码片段)

Hive中创建表的三种方式,应用场景说明及练习截图内部表和外部表的区别,练习截图分区表的功能、创建,如何向分区表中加载数据、如何检索分区表中的数据,练习截图一:hiveHQL的表操作:1.1.1创建数据库:hive>createdatabasey... 查看详情

hive表的创建的操作与测试(代码片段)

Hive中创建表的三种方式,应用场景说明及练习截图内部表和外部表的区别,练习截图分区表的功能、创建,如何向分区表中加载数据、如何检索分区表中的数据,练习截图一:hiveHQL的表操作:1.1.1创建数据库:hive>createdatabasey... 查看详情

单链表与顺序表的对比(代码片段)

时间复杂度的对比:操作链表顺序表访问元素O(n)O(1)从头部删除元素O(1)O(n)从尾部删除元素O(n)O(1)在中间插入元素O(n)O(n)总结:链表失去了顺序表随机读取的优点,同时链表由于增加了节点的指针域,空间开销比较大,但对存储空间使用... 查看详情

更改 Hive 表的架构

】更改Hive表的架构【英文标题】:AltertheschemaofHivetable【发布时间】:2014-02-2006:30:28【问题描述】:我想更改在Hive中创建的映射到HBase字段的表。最近我在HBase中添加了更多列,因此也希望将这些字段添加到Hive中。我使用的创作... 查看详情

hbase操作命令(代码片段)

hbase操作命令增删表、增删域名空间、修改表的属性查询、插入、删除数据增删表、增删域名空间、修改表的属性进入hbase客户端:[atguigu@hadoop1hbase-1.3.1]$hbaseshell SLF4J:ClasspathcontainsmultipleSLF4Jbindings. SLF4J:Foundbindingin[jar:file:/op... 查看详情

hive入门(代码片段)

...1创建数据库4.3修改数据库4.4删除数据库4.5创建表4.5.1管理表与外部表4.5.2管理表与外部表的互相转换4.6修改表5DML数据操作5.1数据导入5.1.1向表中装载数据(Load)5.1.2通过查询语句向表中插入数据5.2数据导出6查询7分区表和... 查看详情

hive+hbase,用hql查询hbase(代码片段)

Hive整合HBase:数据实时写Hbase,实现在Hive中用sql查询以下操作的Hive版本:2.3.6,HBase版本:2.0.4在HBase中创建表:t_hbase_stu_infocreate‘t_hbase_stu_info‘,‘st1‘在Hive中创建外部表:t_hive_stu_infocreateexternaltablet_hive_stu_info(idint,namestring,ageint,s... 查看详情

hive表与外部表的区别

相信很多用户都用过关系型数据库,我们可以在关系型数据库里面创建表(createtable),这里要讨论的表和关系型数据库中的表在概念上很类似。我们可以用下面的语句在Hive里面创建一个表:hive>createtablewyp(idint,  >nam... 查看详情