Hive
Impala
HBase
HiveQL
大數據
javascript
Hive是基於Hadoop的一個數據倉庫工具,能夠將結構化的數據文件映射爲一張數據庫表,並提供簡單的SQL查詢功能,能夠將SQL語句轉換爲MapReduce任務進行運行。
HBase(Hadoop Database),是一個高可靠性、高性能、面向列、可伸縮的分佈式存儲系統,只能經過Rowkey來取數據,沒法進行SQL查詢。
所以若是Hive能夠從HBase中取數據,並結合Hive的SQL查詢功能,便能作到較爲複雜的SQL查詢操做。
Impala對存儲在HDFS、HBase的數據提供直接查詢互動的SQL。除了像Hive使用相同的統一存儲平臺,Impala也使用相同的元數據,SQL語法(Hive SQL),ODBC驅動程序和用戶界面(Hue Beeswax)。Impala還提供了一個熟悉的面向批量或實時查詢和統一平臺。css
達成目標:一、支持HBase多表聯接查詢等較複雜的SQL查詢操做。html
CentOS-6.5
JDK-1.7
hive:hive-0.13.1+cdh5.3.6+397,impala:impala-2.1.5+cdh5.3.6+0,spark:spark-1.2.0+cdh5.3.6+379,
elasticsearch:elasticsearch-1.7.1,elasticsearch-hadoop-hive:elasticsearch-hadoop-hive-2.1.1html5
不管是使用Hive仍是Impala仍是Spark,第一步都是讓他們先知道數據的表結構。
Hive的內置數據類型能夠分爲兩大類:(1)、基礎數據類型;(2)、複雜數據類型。其中,基礎數據類型包括:TINYINT、SMALLINT、INT、BIGINT、BOOLEAN、FLOAT、DOUBLE、STRING、BINARY、TIMESTAMP、DECIMAL、CHAR、VARCHAR、DATE。java
CREATE EXTERNAL TABLE default.hive_hbase_anqi( id BIGINT, name STRING, visible BOOLEAN, cdecimal DECIMAL(12,2), cdate TIMESTAMP) ROW FORMAT SERDE 'org.apache.hadoop.hive.hbase.HBaseSerDe' STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key, angel:name, angel:visible, angel:cdecimal, angel:cdate") TBLPROPERTIES("hbase.table.name" = "hbaseanqi");
能夠看到,語句中經過WITH SERDEPROPERTIES指定了Hive與HBase的列映射關係。經過以上語句,在Hive中能夠看到結構正確的表,並能夠在Hue中看到HBase中的數據。 linux
注意:
創建起的Hive表中全部字段均變爲小寫。這同ES-Hive同樣。詳情見:使用Hive或Impala執行SQL語句,對存儲在Elasticsearch中的數據操做。android
咱們選擇如下幾條有表明性的SQL查詢語句,來驗證使用Hive能夠對存儲在HBase中的數據進行正確的查詢操做。css3
Decimal類型數據求和
SELECT SUM(cdecimal) FROM default.hive_hbase_anqi;
經驗證,能夠正確的獲得精確的求和值。git
TIMESTAMP類型數據排序
SELECT * from default.hive_hbase_anqi ORDER BY cdate limit 5;
經驗證,能夠依據TIMESTAMP值正確排序。github
普通表與外表關聯
select * from hive_hbase_anqi,sample_08 WHERE hive_hbase_anqi.id=sample_08.salary;
其中sample_08表是Hive普通表,hive_hbase_anqi是數據存儲在HBase中的Hive外表。
經驗證,經過執行上面語句,能夠將Hive普通表與Hive的HBase外表進行正確的關聯。
insert OVERWRITE table hive_hbase_anqi select salary,dtime,sdecimal,sname,svisible from sample_09;
將Hive普通表sample_09中的數據導入Hive外部表anqi中,去HBase中查看,能夠看到數據被正確導入。
Hive四種數據導入方式:從本地文件系統中導入數據到Hive表;從HDFS上導入數據到Hive表;從別的表中查詢出相應的數據並導入到Hive表中;在建立表的時候經過從別的表中查詢出相應的記錄並插入到所建立的表中。
向HBase寫不是很方便。
在Impala中執行INVALIDATE METADATA
、REFRESH table_name
語句即可讓 Impala識別在Hive中新建的或已發生變更的表。
Hive中創建的表,impala能夠直接讀取使用。執行復雜SQL語句時,impala明顯比hive快不少。
一樣的,咱們選擇上面(一.2)節中的典型SQL語句進行驗證,Impala-SQL都可以快速正確的返回結果,結果與Hive-SQL執行結果一致。
Impala的插入數據SQL語句與Hive相差很大,Impala更接近標準SQL。
insert into hive_hbase_anqi values(0,'1999-09-09',8.88,'name',true);
insert into hive_hbase_anqi(id,name,cdate) select id,name,udate from hive_hbase_xi;
數據存儲在HBase中,使用Impala或Hive執行SQL語句進行操做是一個好主意。雖然使用Impala和使用Hive一樣能夠正確執行,但使用Impala比使用Hive更加方便且更高效。目標達成。
做者 @王安琪
aitanjupt@hotmail.com