Impala與HBase整合測試
說明:
1、測試思路:
使用sqoop將測試數據從關係數據庫mysql導入到hbase中;接着進行Impala與HBase的整合測試;最後,如果環境允許,對比關係型數據庫進行性能測試。
2、測試環境:
Cloudera5.3.0版本
IP地址 | 主機名 | 說明 |
172.16.30.2 | h1 | 監控節點、mysql數據庫 |
172.16.30.3 | h2 | NAMENODE、Hive、HBase等服務 |
172.16.30.4 | h3 | Sqoop、Impala服務 |
數據準備:
1、 創建數據庫bigdata
2、 創建測試表
客戶基本信息表:
客戶交易明細表:
測試數據:
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
1、 如果沒有操作hdfs的權限,添加環境變量HADOOP_USER_NAME=hdfs到/etc/profile
2、 Rowkey不能爲null;如果rowkey有重複,加載到HBase中只有一條記錄
整合過程:
使用HBase中已創建的表(custom_info、custom_trans)
1、 在Hive中創建外部表
WITHSERDEPROPERTIES選項中指定Hive外部表字段到HBase列的映射,其中“:key”對應於HBase中的RowKey,名稱爲“user_id”,其餘的就是列簇info中的列名。最後在TBLPROPERTIES中指定了HBase中要進行映射的表名。
注意:由於在使用sqoop創建hbase表名爲大寫,創建外部表默認只識別小寫表名,導致報錯!包括列族的大小寫!
2、 在Impala中同步元數據
Impala共享Hive的Metastore,這時需要同步元數據,可以通過在Impala Shell中執行同步命令。
3、 在Impala中查看HBase中表信息:
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
由於Mysql中數據庫字符集的設置,導致這裏的查詢出現亂碼。
OK,通過上面幾步就可以使用Impala查詢HBase中的表了。
性能測試
由於個人PC資源限制(8GB內存、128GB SSD),無法測試在數據量大的情況下,Impala與關係數據庫的性能對比,以及Impala與Spark的性能對比。後續將簡單給出測試思路。