Impala使用筆記(一)

ImpalaHBase整合測試

說明:

1、測試思路:

使用sqoop將測試數據從關係數據庫mysql導入到hbase中;接着進行ImpalaHBase的整合測試;最後,如果環境允許,對比關係型數據庫進行性能測試。

2、測試環境:

    Cloudera5.3.0版本


IP地址主機名說明
172.16.30.2h1監控節點、mysql數據庫
172.16.30.3h2NAMENODEHiveHBase等服務
172.16.30.4h3SqoopImpala服務


數據準備:


1、  創建數據庫bigdata

wKioL1VNyVXD8oPQAAClQtWyfsc671.jpg


2、  創建測試表

    客戶基本信息表:

wKioL1VNyYbgwpzEAADZKagxIgw306.jpg

    客戶交易明細表:

wKiom1VNyDfAm6_5AACVvNdGMUI741.jpg

    測試數據:

wKiom1VNyGKQPi6qAAPUMJskyRY680.jpg



3、  使用sqoop將數據從關係數據庫(mysql)加載到HBase

sqoop import --connect jdbc:mysql://h1:3306/bigdata--username root --password mysql -m 1 --table custom_info --hbase-create-table--hbase-table custom_info --column-family customInfo --hbase-row-key custom_id

wKioL1VNyg3TxEBxAAD_wqUkl-k653.jpg注意:

    1、  如果沒有操作hdfs的權限,添加環境變量HADOOP_USER_NAME=hdfs/etc/profile

    2、  Rowkey不能爲null;如果rowkey有重複,加載到HBase中只有一條記錄


整合過程:

使用HBase中已創建的表(custom_infocustom_trans

1、  Hive中創建外部表

wKioL1VNyomxRbwqAAGiKquNAdY800.jpg

WITHSERDEPROPERTIES選項中指定Hive外部表字段到HBase列的映射,其中“:key”對應於HBase中的RowKey,名稱爲“user_id”,其餘的就是列簇info中的列名。最後在TBLPROPERTIES中指定了HBase中要進行映射的表名。

注意:由於在使用sqoop創建hbase表名爲大寫,創建外部表默認只識別小寫表名,導致報錯!包括列族的大小寫!


2、  Impala中同步元數據

Impala共享HiveMetastore,這時需要同步元數據,可以通過在Impala Shell中執行同步命令。

wKioL1VNyuLS2Z9DAACOH60Mmws972.jpg


3、  Impala中查看HBase中表信息:

wKiom1VNyY3y9khiAAG_hZ-x71w770.jpg

4、  查詢HBase中的數據:

selectb.custom_id,b.custom_name,b.custom_code,b.sex,b.addr,sum(cast(a.trans_amt asDOUBLE)) from custom_trans a left join custom_info b on a.custom_id=b.custom_idgroup by b.custom_id,b.custom_name,b.custom_code,b.sex,b.addr;

注意:hive有隱式轉換的功能,可以直接sum(string字段)(如果是數字型的值),impala的話需要手動cast

wKiom1VNyfKwImPAAAPEesiwzxg824.jpg

    由於Mysql中數據庫字符集的設置,導致這裏的查詢出現亂碼。


OK,通過上面幾步就可以使用Impala查詢HBase中的表了。


性能測試

由於個人PC資源限制(8GB內存、128GB SSD),無法測試在數據量大的情況下,Impala與關係數據庫的性能對比,以及ImpalaSpark的性能對比。後續將簡單給出測試思路。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章