Apache Tajo - 与HBase集成

Apache Tajo支持HBase集成.这使我们能够访问Tajo中的HBase表. HBase是一个构建在Hadoop文件系统之上的分布式面向列的数据库.它是Hadoop生态系统的一部分,可在Hadoop文件系统中提供对数据的随机实时读/写访问.配置HBase集成需要以下步骤.

设置环境变量

将以下更改添加到"conf/tajo-env.sh"文件.

$ vi conf/tajo-env.sh  
# HBase home directory. It is opitional but is required mandatorily to use HBase. 
# export HBASE_HOME = path/to/HBase

包含HBase路径后,Tajo会将HBase库文件设置为类路径.

创建外部表

使用以下语法创建外部表 :

CREATE [EXTERNAL] TABLE [IF NOT EXISTS] <table_name> [(<column_name> <data_type>, ... )] 
USING hbase WITH ('table' = '<hbase_table_name>' 
, 'columns' = ':key,<column_family_name>:<qualifier_name>, ...' 
, 'hbase.zookeeper.quorum' = '<zookeeper_address>' 
, 'hbase.zookeeper.property.clientPort' = '<zookeeper_client_port>') 
[LOCATION 'hbase:zk://<hostname>:<port>/'] ;

要访问HBase表,您必须配置表空间位置.

此处,

  • : 设置hbase原始表名.如果要创建外部表,该表必须存在于HBase上.

  • : 键指的是HBase行键.列条目数必须等于Tajo表列的数量.

  • hbase.zookeeper.quorum : 设置zookeeper法定人数地址.

  • hbase.zookeeper.property.clientPort : 设置zookeeper客户端端口.

查询

CREATE EXTERNAL TABLE students (rowkey text,id int,name text) 
USING hbase WITH ('table' = 'students', 'columns' = ':key,info:id,content:name') 
LOCATION 'hbase:zk://<hostname>:<port>/';

此处,位置路径字段设置zookeeper客户端端口ID.如果你没有设置端口,Tajo将引用hbase-site.xml文件的属性.

在HBase中创建表

你可以使用"hbase shell"命令启动HBase交互式shell,如以下查询所示.

查询

/bin/hbase shell

结果

上述查询将生成以下结果.

 hbase(main):001:0>

查询HBase的步骤

要查询HBase,您应该完成以下步骤 :

第1步 : 将以下命令传递给HBase shell以创建"教程"表.

查询

hbase(main):001:0> create ‘students’,{NAME => ’info’},{NAME => ’content’} 
put 'students', ‘row-01', 'content:name', 'Adam' 
put 'students', ‘row-01', 'info:id', '001' 
put 'students', ‘row-02', 'content:name', 'Amit' 
put 'students', ‘row-02', 'info:id', '002' 
put 'students', ‘row-03', 'content:name', 'Bob' 
put 'students', ‘row-03', 'info:id', ‘003'

第2步 : 现在,在hbase shell中发出以下命令,将数据加载到表中.

main):001:0> cat ../hbase/hbase-students.txt | bin/hbase shell

第3步 : 现在,返回Tajo shell并执行以下命令以查看表的元数据 :

default> \d students;  

table name: default.students 
table path: 
store type: HBASE 
number of rows: unknown 
volume: 0 B 
Options: 
   'columns' = ':key,info:id,content:name' 
   'table' = 'students'  

schema: 
rowkey  TEXT 
id  INT4 
name TEXT

第4步 : 要从表格中获取结果,请使用以下查询 :

查询

default> select * from students

结果

以上查询将获取以下结果 :

rowkey,  id,  name 
------------------------------- 
row-01,  001,  Adam 
row-02,  002,  Amit 
row-03   003,  Bob