Impala簡介
Impala是Cloudera公司主導開發的新型查詢系統,它提供SQL語義,能查詢存儲在Hadoop的HDFS和HBase中的PB級大數據。
已有的Hive系統雖然也提供了SQL語義,但由於Hive底層執行使用的是MapReduce引擎,仍然是一個批處理過程,難以滿足查詢的交互性。
相比之下,Impala的最大特點也是最大賣點就是它的快速。
Impala特性
a.沒有使用MapReduce作為底層執行計算框架,雖然MapReduce是非常好的並行計算框架,但它更多地是面向批處理模式,而不是面向交互式的SQL執行模式。
b.與MapReduce相比Impala將整個查詢分成一批查詢計划樹,而不是一連串的MapReduce執行任務,在將查詢計划分發之后,Impala采用拉鏈式的方式拉取計算結果,把結果數據組成執行樹並進行流式傳遞匯集。減少了把中間結果寫入磁盤的步驟,最后有從磁盤讀取數據的開銷。即相比沒有了hive中mapreduce的啟動時間。Impala的數據執行模式沒有像Hive那樣map->shuffle->reduce模式來處理數據保證了Impala的並發性和避免了中間過程中不必要的sort和shuffle。
關系數據庫和Impala
Impala使用類似於SQL和HiveQL的Query語言。 下表描述了SQL和Impala查詢語言之間的一些關鍵差異。
Impala | 關系型數據庫 |
---|---|
Impala使用類似於HiveQL的類似SQL的查詢語言。 | 關系數據庫使用SQL語言。 |
在Impala中,您無法更新或刪除單個記錄。 | 在關系數據庫中,可以更新或刪除單個記錄。 |
Impala不支持事務。 | 關系數據庫支持事務。 |
Impala不支持索引。 | 關系數據庫支持索引。 |
Impala存儲和管理大量數據(PB)。 | 與Impala相比,關系數據庫處理的數據量較少(TB)。 |
Impala與hive相同點
1.數據儲存:使用相同的數據存儲池,都可以將數據的儲存在HDFS或HBase中。
2.元數據:兩者使用相同的元數據
3.SQL解釋處理:比較相似的就是都是通過詞法分析生成執行計划。
4.查詢計划樹
不同點
1.執行計划
hive依賴於MapReduce執行框架,執行計划分成map->shuffle-reduce->…的模型。如果是一個Query則會有跟多的寫中間結果,由於MapReduce的執行特點,MapReudce任務的開啟過程會增加過多的時間
Impala將執行計划表現為一顆完整的執行計划樹,Impala將所有的執行計划分發到Impala進行查詢執行,避免了MR中sort和shuffle過程中的時間浪費。
2.數據流
hive:采用push推的方式,將每次計算的結果都push達到下一個節點。
Impala:采用pull拉取的方式,將本節點需要的結果從上一個節點執行完的結果中進行pull拉取。
3.內存使用
Hive: 在執行過程中如果內存放不下所有數據,則會使用外存,以保證Query能順序執行完。每一輪MapReduce結束,中間結果也會寫入HDFS中,同樣由於MapReduce執行架構的特性,shuffle過程也會有寫本地磁盤的操作。
Impala: 在遇到內存放不下數據時,當前版本0.1是直接返回錯誤,而不會利用外存,以后版本應該會進行改進。這使用得Impala目前處理Query會受到一定的限制,最好還是與Hive配合使用。Impala在多個階段之間利用網絡傳輸數據,在執行過程不會有寫磁盤的操作(insert除外)
4.調度
hive任務調度依賴於hadoop的調度策略
Impala調度由自己完成,目前只有一種調度器,simple schedule,它會盡量滿足數據的局部性,掃描數據的進程盡量靠近數據本身所在的節點服務器。調度器目前還比較簡單,在Simple Scheduler::GetBackend中可以看到,現在還沒有考慮負載,網絡IO狀況等因素進行調度。但目前Impala已經有對執行過程的性能統計分析,應該以后版本會利用這些統計信息進行調度吧。
5.容錯
Hive依賴於Hadoop的容錯能力。
Impalad:在查詢過程中,沒有容錯邏輯,如果在執行過程中,發生故障,則直接返回錯誤(這與Impalad的設計有關,因為Impala定位於實時查詢,一次查詢失敗,再查詢一次就好,再查一次的成本很低)。但從整體來看,Impala是能很好的容錯,所有的Impalad是對等的結構,用戶可以向任何一個Impalad提交查詢,如果一個Impalad失效,其上正在運行的所有Query都將失敗,但用戶可以重新提交查詢由其它Impalad代替執行,不會影響服務。對於State Store目前只有一個,但當State Store失效,也不會影響服務,因為每個Impala都同步了State store的信息。只是不能再次更新集群的狀態了。有可能會將執行計划分配給已經失效的Impalad執行。
6.適用場景
Hive:復雜的批處理查詢任務,數據轉換任務。
Impala:實時數據分析,因為不支持UDF,能處理的問題有一定的限制,與Hive配合使用,對Hive的結果數據集進行實時分析。
Hive,Hbase和Impala
HBase | Hive | Impala |
---|---|---|
HBase是基於Apache Hadoop的寬列存儲數據庫。 它使用BigTable的概念。 | Hive是一個數據倉庫軟件。 使用它,我們可以訪問和管理基於Hadoop的大型分布式數據集。 | Impala是一個管理,分析存儲在Hadoop上的數據的工具。 |
HBase的數據模型是寬列存儲。 | Hive遵循關系模型。 | Impala遵循關系模型。 |
HBase是使用Java語言開發的。 | Hive是使用Java語言開發的。 | Impala是使用C ++開發的。 |
HBase的數據模型是無模式的。 | Hive的數據模型是基於模式的。 | Impala的數據模型是基於模式的。 |
HBase提供Java,RESTful和Thrift API。 | Hive提供JDBC,ODBC,Thrift API。 | Impala提供JDBC和ODBC API。 |
支持C,C#,C ++,Groovy,Java PHP,Python和Scala等編程語言。 | 支持C ++,Java,PHP和Python等編程語言。 | Impala支持所有支持JDBC / ODBC的語言。 |
HBase提供對觸發器的支持。 | Hive不提供任何觸發器支持。 | Impala不提供對觸發器的任何支持。 |
所有這三個數據庫 -
-
是NOSQL數據庫。
-
可用作開源。
-
支持服務器端腳本。
-
按照ACID屬性,如Durability和Concurrency。
-
使用分片進行分區。
Impala的優缺點
優點
1.支持JDBC/ODBC遠程訪問,支持SQL查詢,快速查詢大數據。
2.無需轉換為MR,直接讀取HDFS數據。
3.支持Data Local,可以對已有數據進行查詢,減少數據的加載,轉換。
4.支持列式存儲,多種存儲格式可以選擇(Parquet, Text, Avro, RCFile, SequeenceFile)。
5.可以與Hive配合使用,兼容HiveSQL, 可對hive數據直接做數據分析。
6.基於內存進行計算,能夠對PB級數據進行交互式實時查詢、分析。
缺點
1.不支持用戶定義函數UDF。
2.不支持text域的全文搜索。
3.不支持Transforms。
4.不支持查詢期的容錯。(發生故障,則直接返回錯誤)
5.對內存要求高。
6.完全依賴於hive。
7.實踐過程中 分區超過1w 性能嚴重下降。
8.Impala不提供任何對序列化和反序列化的支持。
9.Impala只能讀取文本文件,而不能讀取自定義二進制文件。
10.每當新的記錄/文件被添加到HDFS中的數據目錄時,該表需要被刷新。