Impala與HBase整合實踐

咱們知道,HBase是一個基於列的NoSQL數據庫,它能夠實現的數據的靈活存儲。它自己是一個大表,在一些應用中,經過設計RowKey,能夠 實現對海量數據的快速存儲和訪問。可是,對於複雜的查詢統計類需求,若是直接基於HBase API來實現,性能很是差,或者,能夠經過實現MapReduce程序來進行查詢分析,這也繼承了MapReduce所具有的延遲性。
實現Impala與HBase整合,咱們可以得到的好處有以下幾個:html

  • 可使用咱們熟悉的SQL,像操做傳統關係型數據庫同樣,很容易給出複雜查詢、統計分析的SQL設計node

  • Impala查詢統計分析,比原生的MapReduce以及Hive的執行速度快不少數據庫

Impala與HBase整合,須要將HBase的RowKey和列映射到Impala的Table字段中。Impala使用Hive的Metastore來存儲元數據信息,與Hive相似,在於HBase進行整合時,也是經過外部表(EXTERNAL)的方式來實現。apache

準備工做服務器

首先,咱們須要作以下準備工做:app

涉及到相關係統的安裝配置,能夠參考相關文檔和資料。
下面,咱們經過一個示例表test_info來講明,Impala與HBase整合的步驟:

整合過程

  • 在HBase中建立表

首先,咱們使用HBase Shell建立一個表,以下所示:

1 create 'test_info', 'info'

表名爲test_info,只有一個名稱爲info的列簇(Column Family),咱們計劃該列簇中存在4個列,分別爲info:user_id、info:user_type、info:gender、info:birthday。

  • 在Hive中建立外部表

建立外部表,對應的DDL以下所示:

1 CREATE EXTERNAL TABLE sho.test_info(
2      user_id string,
3      user_type tinyint,
4      gender string,
5      birthday string)
6 ROW FORMAT SERDE 'org.apache.hadoop.hive.hbase.HBaseSerDe'
7 STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
8 WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key, info:user_type, info:gender, info:birthday")
9 TBLPROPERTIES("hbase.table.name" = "test_info");

上面DDL語句中,在WITH SERDEPROPERTIES選項中指定Hive外部表字段到HBase列的映射,其中「:key」對應於HBase中的RowKey,名稱爲 「user_id」,其他的就是列簇info中的列名。最後在TBLPROPERTIES中指定了HBase中要進行映射的表名。

  • 在Impala中同步元數據

Impala共享Hive的Metastore,這時須要同步元數據,能夠經過在Impala Shell中執行同步命令:

1 INVALIDATE METADATA;

而後,就能夠查看到映射HBase中表的結構:

1 DESC test_info;

表結構如圖所示:

經過上面三步,咱們就完成了Impala和HBase的整合配置。

驗證整合

下面,咱們經過實踐來驗證上述的配置是否生效。
咱們模擬客戶端插入數據到HBase表中,可使用HBase API或者HBase Thrift來實現,這裏咱們使用了HBase Thrift接口來進行操做,詳見文章 HBase Thrift客戶端Java API實踐
而後,咱們就能夠經過Impala Shell進行查詢分析。基於上面建立整合的示例表,插入20000000(2000萬)記錄,咱們作一個統計分析的示例,SQL語句以下所示:

1 SELECT user_type, COUNT(user_id) AS cnt FROM test_info WHERE gender='M' GROUP BY user_type ORDER BY cnt DESC LIMIT 10;

運行結果信息,以下圖所示:

上述程序運行所在Hadoop集羣共有3個Datanode,執行上述統計SQL共用時88.13s。個人Hadoop集羣配置比較低,2個節點是雙核 CPU,另外一個是4核,內存足夠,大概10G左右,並且還有好多程序在共享這些節點,如數據庫服務器、SOLR集羣等。若是提升配置,作一些優化,針對 20000000(2000萬)條記錄作統計分析,應該能夠在5s之內出來結果。
因爲測試數據是咱們隨機生成的,gender取值爲’M’和’F’,user_type的值爲1到10,通過統計分組後,數據分佈還算均勻。

參考連接

相關文章
相關標籤/搜索