天天看點

Hadoop的加速發動機Impala應用場景1. Impala介紹2. Impala VS Phoenix

應用場景

在使用Hive的過程中,編寫了HQL語句,發現HQL執行過程是非常慢的,因為hive采用的是把HQL轉化成hadoop的MapReduce任務,然後編譯,打包成jar包,分發到各個server上去執行,這個過程會很慢很慢!而impala也可以執行SQL,但是比Hive快很多,而Impala根本不用Hadoop的Mapreduce機制,直接調用HDFS的API擷取檔案,在記憶體中快速計算!

但是Impala也并不是完全比Hive好。Impala的容錯機制沒有Hive好,而且沒有Hive那麼成熟。

是以一般使用以下方法來決定使用哪個:

如果是ETL任務使用Hive

如果是實時的熱查詢則用Impala

1. Impala介紹

Impala是Cloudera公司主導開發的新型查詢系統,它提供SQL語義,能查詢存儲在Hadoop的HDFS和HBase中的PB級大資料。已有的Hive系統雖然也提供了SQL語義,但由于Hive底層執行使用的是MapReduce引擎,仍然是一個批處理過程,難以滿足查詢的互動性。相比之下,Impala的最大特點也是最大賣點就是它的快速。

1.1 Impala的優點

  1. Impala不需要把中間結果寫入磁盤,省掉了大量的I/O開銷。
  2. 省掉了MapReduce作業啟動的開銷。MapReduce啟動task的速度很慢(預設每個心跳間隔是3秒鐘),Impala直接通過相應的服務程序來進行作業排程,速度快了很多。
  3. Impala完全抛棄了MapReduce這個不太适合做SQL查詢的範式,而是像Dremel一樣借鑒了MPP并行資料庫的思想另起爐竈,是以可做更多的查詢優化,進而省掉不必要的shuffle、sort等開銷。
  4. 通過使用LLVM來統一編譯運作時代碼,避免了為支援通用編譯而帶來的不必要開銷。
  5. 用C++實作,做了很多有針對性的硬體優化,例如使用SSE指令。
  6. 使用了支援Data locality的I/O排程機制,盡可能地将資料和計算配置設定在同一台機器上進行,減少了網絡開銷。

1.2 Impala的功能

  1. Impala可以根據Apache許可證作為開源免費提供。
  2. Impala支援記憶體中資料處理,它通路/分析存儲在Hadoop資料節點上的資料,而無需資料移動。
  3. 使用類SQL查詢通路資料。
  4. Impala為HDFS中的資料提供了更快的通路。
  5. 可以将資料存儲在Impala存儲系統中,如Apache HBase和Amazon s3。
  6. Impala支援各種檔案格式,如LZO,序列檔案,Avro,RCFile和Parquet。

2. Impala VS Phoenix

現有hbase的查詢工具有很多如:Hive,Tez,Impala,Shark/Spark,Phoenix等。

phoenix,中文譯為“鳳凰”,很美的名字。Phoenix是由saleforce.com開源的一個項目,後又捐給了Apache基金會。它相當于一個Java中間件,提供jdbc連接配接,操作hbase資料表。

但是在生産環境中,不可以用在OLTP中。線上事務處理的環境中,需要低延遲,而Phoenix在查詢HBase時,雖然做了一些優化,但延遲還是不小。是以依然是用在OLAT中,再将結果傳回存儲下來。

Phoenix的團隊用了一句話概括Phoenix:”We put the SQL back in NoSQL” 意思是:我們把SQL又放回NoSQL去了!這邊說的NoSQL專指HBase,意思是可以用SQL語句來查詢Hbase,你可能會說:“Hive和Impala也可以啊!”。但是Hive和Impala還可以查詢文本檔案,Phoenix的特點就是,它隻能查Hbase,别的類型都不支援!但是也因為這種專一的态度,讓Phoenix在Hbase上查詢的性能超過了Hive和Impala!

是以Impala可以針對文本檔案,impala可以操作hdfs,hive,hbase等,而Phoenix隻針對Hbase。