hbase 数据导出乱码_hbase集成hive

46b5325329d28b96e3ca411643380d71.png

前言

hive提供了与Hbase的集成,是的能够在Hbase表上使用hive sql语句进行查询、插入操作以及进行join和Union等复杂查询、同时也可以将hive表中的数据映射到Hbase中。

当我们在使用hive时候,在数据量多的时候就会发现非常的慢,一个简单的sql都要半天,其实我们追寻他的原因很简单,首先他是把sql翻译成mapreduce来执行,然后mapreduce又是提交给yarn去运行,可以说过程漫长,加上mapreduce本身就足够慢,所以本文从集成hbase的方面来调优,或者说是加快查询速度,当然了,最后,还会探讨如何用sql语言去查询,毕竟hbase是nosql的。

官方配置文档地址

https://cwiki.apache.org/confluence/display/Hive/HBaseIntegration 

这个是在hive的用户说明文档中。

配置

1.修改hive-site.xml文件,添加配置属性

<property>      
        <name>hbase.zookeeper.quorum</name>
        <value>node1:2181,node2:2181,node3:2181</value>
    </property>

2.修改hive-env.sh文件,添加hbase的依赖包到hive的classpath中。

export HIVE_CLASSPATH=$HIVE_CLASSPATH:/opt/bigdata/hbase/lib/*

注意:1.这里后面的路径换成自己的安装目录2.hive-env.sh这个文件不存在,但是存在hive-env.sh-template文件,复制一份修改为hive-env.sh即可。

3.使用编译好的hive-hbase-handler-1.2.1.jar替换hive之前lib目录下面的该jar包

这里说的编译主要是解决hive和hbase不兼容的情况下做的,主要是更改pom.xml中的依赖,然后重新编译一下。如果本身安装就是兼容的版本,这步就可以省略了。

将hbase表映射到hive表中

配置完上面的内容,就可以做个实验来检查一下了。

1.在hbase中创建一张表

create 'hbase_test','f1','f2','f3'

2.加载数据到hbase_test表中

put 'hbase_test','r1','f1:name','zhangsan'
put 'hbase_test','r1','f2:age','20'
put 'hbase_test','r1','f3:sex','male'
put 'hbase_test','r2','f1:name','lisi'
put 'hbase_test','r2','f2:age','30'
put 'hbase_test','r2','f3:sex','female'
put 'hbase_test','r3','f1:name','wangwu'
put 'hbase_test','r3','f2:age','40'
put 'hbase_test','r3','f3:sex','male'

3.创建基于hbase的hive表

create 

4.查看hive表中的数据

cd0afa6d04092f0209ee086d0122d23c.png

如果您跟我一样也看到如此,那说明您搭建成功了,以后就可以仿照这种情况来做了。比如使用hbase来不断的插入数据,然后遇到比较复杂的sql的查询的时候

就可以用hive来写sql做这个事情,相互配合。

将hive表映射到hbase表中

1.创建一张映射hbase的表

create  table hive_test(
id string,
name string,
age int,
address string
)STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,f1:name,f2:age,f3:address")
TBLPROPERTIES ("hbase.table.name" = "hbaseFromhive");

这里的hbaseFromhive表本身hbase没有,也是可以的,他会自动在hbase中创建,所以不再需要在hbase中创建了。

2.向hive表中加载数据

这里有些特殊,向hive表中加载的数据来源于另外一张表中。

比如我们创建一个hive_source表

建表语法:

create table hive_source(
id int,
name string,
age string
address string
)row format delimited fields terminated by 't';

在Linux本地创建了一个order.txt文件写入下面这些内容

1       zhang   10      M
2       li      20      F
3       mei     30      M
4       wang    40      F
5       guo     60      M

注意他们之间的间隔用tab来间隔

然后导入到hive_source表中

load data local inpath 'order.txt' into table hive_source;

查看是否导入成功

ddc561a68df0ce4ee2f389a9c5011d1f.png

成功之后导入到hive_test表中

insert into table hive_test select * from hive_source;

3.在hbase中查看是否已经有数据了

e58063008c03dd8cb621e2db2345980f.png

看到这个说明成功了。

总结

以上就是全部内容了,点击关注不迷路哟,后续有文章更新也会推送给您,您有什么问题也可以下方留言。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值