您现在的位置 >> Hadoop教程 >> Hadoop实战 >> hbase,hive专题  
 

Hive HBase 集群整合

【作者:Hadoop实战专家】【关键词:可以看到 查询 】 【点击:42491次】【2013-07-0】
界面中显示的是当前可以使用的数据库信息,只包含一个数据库(default),我们再点击default,就可以看到default数据库中包含的所有表的信息了。 在创建Hive查询之前,我们需要创建一个会话(session),点击Create Session即可。-hbase-jiqun-combin  

相关热门搜索:

大数据标签:hadoop hbase hive zookeeper bigdata

Hive HBase 集群整合

1)启动Hbase,

要求hbase-0.20.3,zookeeper-3.2.2
如果使用的不是hbase-0.20.3需要重新编译hive_hbase-handler.jar

2)单节点HBase的连接
./bin/hive -hiveconf hbase.master=master:60000

3)集群HBase的连接
1.启动zookeeper
2.启动hbase
3.启动hive,添加zookeeper的支持

./bin/hive -hiveconf hbase.zookeeper.quorum= master,slave-A,slave-B

//所有的zookeeper节点

插入数据
启动

./bin/hive --auxpath /data/soft/hive/lib/hive_hbase-handler.jar,/data/soft/hive/lib/hbase-0.20.3.jar,/data/soft/hive/lib/zookeeper-3.2.2.jar  -hiveconf hbase.zookeeper.quorum=slave-001,slave-002,slave-003

hive
1.创建hbase识别的数据库

Java代码
CREATE TABLE hbase_table_1(key int, value string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf1:val")
TBLPROPERTIES ("hbase.table.name" = "xyz");

hbase.table.name 定义在hbase的table名称
hbase.columns.mapping 定义在hbase的列族

2.使用sql导入数据
i.预先准备数据
a)新建hive的数据表

Java代码
CREATE TABLE pokes (foo INT, bar STRING);

b)批量插入数据

Java代码
hive> LOAD DATA LOCAL INPATH './examples/files/kv1.txt' OVERWRITE INTO TABLE pokes;

这个文件位于hive的安装目录下,examples/files/kv1.txt

Java代码
ii.使用sql导入hbase_table_1

Java代码
INSERT OVERWRITE TABLE hbase_table_1 SELECT * FROM pokes WHERE foo=86;

注意,默认的启动会报错的
FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.ExecDriver
启动的时候要添加

Java代码
-auxpath /data/soft/hive/lib/hive_hbase-handler.jar,/data/soft/hive/lib/hbase-0.20.3.jar,/data/soft/hive/lib/zookeeper-3.2.2.jar

3查看数据

Java代码
hive> select * from  hbase_table_1;

会显示刚刚插入的数据
86      val_86

hbase
1.登录hbase

Java代码
[root@master hbase]# ./bin/hbase shell

2.查看表结构

Java代码
hbase(main):001:0> describe 'xyz'
DESCRIPTION                                                             ENABLED
{NAME => 'xyz', FAMILIES => [{NAME => 'cf1', COMPRESSION => 'NONE', VE true
RSIONS => '3', TTL => '2147483647', BLOCKSIZE => '65536', IN_MEMORY =>
'false', BLOCKCACHE => 'true'}]}
1 row(s) in 0.7460 seconds

3.查看加载的数据

Java代码
hbase(main):002:0> scan 'xyz'
ROW                          COLUMN+CELL
86                          column=cf1:val, timestamp=1297690405634, value=val_86

1 row(s) in 0.0540 seconds
可以看到,在hive中添加的数据86,已经在hbase中了

4.添加数据

Java代码
' hbase(main):008:0> put 'xyz','100','cf1:val','www.360buy.com'
0 row(s) in 0.0630 seconds

Hive
参看hive中的数据

Java代码
hive> select * from hbase_table_1;
OK
100     www.360buy.com
86      val_86
Time taken: 8.661 seconds

刚刚在hbase中插入的数据,已经在hive里了

hive访问已经存在的hbase
使用CREATE EXTERNAL TABLE

Java代码
CREATE EXTERNAL TABLE hbase_table_2(key int, value string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = "cf1:val")
TBLPROPERTIES("hbase.table.name" = "some_existing_table");

三、多列和多列族(Multiple Columns and Families)
1.创建数据库

Java代码
CREATE TABLE hbase_table_2(key int, value1 string, value2 int, value3 int)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES (
"hbase.columns.mapping" = ":key,a:b,a:c,d:e"
);

2.插入数据

Java代码
INSERT OVERWRITE TABLE hbase_table_2 SELECT foo, bar, foo+1, foo+2
FROM pokes WHERE foo=98 OR foo=100;

这个有3个hive的列(value1和value2,value3),2个hbase的列族(a,d)
Hive的2列(value1和value2)对应1个hbase的列族(a,在hbase的列名称b,c),hive的另外1列(value3)对应列(e)位于列族(d)

3.登录hbase查看结构

Java代码
hbase(main):003:0> describe "hbase_table_2"
DESCRIPTION                                                             ENABLED
{NAME => 'hbase_table_2', FAMILIES => [{NAME => 'a', COMPRESSION => 'N true
ONE', VERSIONS => '3', TTL => '2147483647', BLOCKSIZE => '65536', IN_M
EMORY => 'false', BLOCKCACHE => 'true'}, {NAME => 'd', COMPRESSION =>
'NONE', VERSIONS => '3', TTL => '2147483647', BLOCKSIZE => '65536', IN
_MEMORY => 'false', BLOCKCACHE => 'true'}]}
1 row(s) in 1.0630 seconds

4.查看hbase的数据

Java代码
hbase(main):004:0> scan 'hbase_table_2'
ROW                          COLUMN+CELL
100                         column=a:b, timestamp=1297695262015, value=val_100
100                         column=a:c, timestamp=1297695262015, value=101
100                         column=d:e, timestamp=1297695262015, value=102
98                          column=a:b, timestamp=1297695242675, value=val_98
98                          column=a:c, timestamp=1297695242675, value=99
98                          column=d:e, timestamp=1297695242675, value=100
2 row(s) in 0.0380 seconds

5.在hive中查看

Java代码
hive> select * from hbase_table_2;
OK
100     val_100 101     102
98      val_98  99      100
Time taken: 3.238 seconds

使用HIVE的WEB界面:HWI

HWI是Hive Web Interface的简称,是hive cli的一个web替换方案。

关于如何搭建Hive平台,可以参考:搭建Hive平台

但是目前这个功能做的比较简陋,这篇文章我们一起来看看如何使用hive中自带的hwi来进行操作。

打开HWI

假设hive部署在10.20.151.7机器上,conf/hive-default.xml文件都是默认值,那么我们直接在浏览器中输入:http://10.20.151.7:9999/hwi/ 就可以访问了。

访问SCHEMA信息(BROWSE SCHEMA)

我们在web界面点击Browsers Schema或者输入:http://10.20.151.7:9999/hwi/show_databases.jsp,就可以浏览了:

界面中显示的是当前可以使用的数据库信息,只包含一个数据库(default),我们再点击default,就可以看到default数据库中包含的所有表的信息了。

我们可以看到,有3个表的信息,继续点击表名,就可以看到更加详细的表结构信息了,如我们点击pokes:

这就是浏览schema信息的功能,用于替换cli中的show tables的功能。

查看系统诊断信息(DIAGNOSTICS)

我们点击Diagnostics,就可以看到系统的相关诊断信息,如:

用户认证(AUTHORIZE),创建会话(CREATE SESSION)与会话管理(LIST SESSIONS)

在讲解这些功能之前,我们需要先了解一下用户认证与会话之间的关系。

在hwi中的用户认证需要输入用户名和用户组,如:

每一个用户认证(Authorize)信息对应着一组会话(session)。这些数据在hive重启后,session信息都会丢失。

在创建Hive查询之前,我们需要创建一个会话(session),点击Create Session即可。

我们再点击List Sessions,就可以看到该用户认证(Authorize)上所对应的所以的会话组了。

执行查询

绝大多数情况下,我们不需要设置用户认证(Authorize)信息,假设我们没有设置用户认证(Authorize)信息,然后创建了一个session为s1

点击List Sessions后,可以看到如下界面:

点击Manager后,我们就进入到查询界面了:

我们可以直接在Query中填写查询语句,然后在Result中执行输出文件名称,同时将Start Query设置为Yes,如:

注意,这里的查询语句与cli有一点点不同,查询语句最后没有分号(;)。

点击“提交查询内容”后,我们可以看到如下界面:

这个时候,我们可以点击View File查看结果信息:

这样,我们就完成查询了。

同时我们可以在hive的安装目录的更目录下找到这个s1_result文件。

HWI与CLI对比

如果使用过cli的朋友看了上面的介绍,一定会发现一个很严重的问题:执行的过程没有提示。我们不知道某一个查询执行是什么时候结束的。

总结一下HWI与CLI对比的优缺点:

优点:HWI支持浏览器的方式浏览,方便直观。

缺点:无执行过程提示。

我个人还是更倾向于使用cli的方式:)

从此学习网 http://www.congci.com/item/hive-hbase-jiqun-combin

大数据系列hbase,hive相关文章:

最新评论
夢ω鷗2014-09-10 12:59:24
发表了博文 《HBase exception & solution 2》 - Problem: java.io.IOException: Cannot run program "cygpath": C http://t.cn/8FE1xn8
毕先森2014-09-10 02:35:49
hadoop下自带的例子呀
筇筇2014-09-09 07:10:12
我们有计划对HBase、Cassandra这类NoSQL做一些深度定制,跑在Linux下,满足传统行业的数据处理需求,主要还是想用开源的东西节省成本,也能更方便的控制,数据访问客户端语言倒是其次(遗留系统要重点照顾),连Cassandra都有C#的driver。C#也有一些NoSQL产品,考虑到Mono项目的稳定性,还是Java靠谱点。
小鱼儿2014-09-08 01:49:46
windows上安装putty可以
siuwash2014-09-08 12:51:14
夜店3D/Video live 小时巡回派对 蜂巢创意Hive ideas。。 |夜店3D/Video live 小时巡回派对 蜂巢创意Hive ideas
sidely2014-09-07 04:39:02
at org.apache.hadoop.hdfs.server.namenode.FSEditLog.loadFSEdits(FSEditLog.java:774)
梦雨卓萱2014-09-06 01:38:49
ha不能自动切换
杜京伟2014-09-06 06:35:23
文文2014-09-05 04:58:08
夜店3D/Video live 小时巡回派对 蜂巢创意Hive ideas
为你写诗2014-09-04 11:48:20
大数据概念包含大数据智能分析,但普遍只停留在大数据的数据规模理解上,包括流行的hadoop和nosql,也就停留在大数据存储和管理层次,要做好#数据驱动的企业# 需要与大数据科学家一起合作才行。 详情:http://t.cn/8kXvIQt
 
  • Hadoop生态系统资料推荐