標籤:impala impalad hadoop llvm hive
Impala是Cloudera公司主導開發的新型查詢系統,它提供SQL語義,能查詢儲存在Hadoop的HDFS和HBase中的PB級大資料。已有的Hive系統雖然也提供了SQL語義,但由於Hive底層執行使用的是MapReduce引擎,仍然是一個批處理過程,難以滿足查詢的互動性。相比之下,Impala的最大特點也是最大賣點就是它的快速。Impala 為儲存在 HDFS 和 HBase 中的資料提供了一個即時 SQL 查詢介面。
Impala優點
來自zdnet,描述了Impala的一些優點:
從中看出主要的優點:SQL友好,比Hive快,支援多種儲存引擎檔案格式,介面豐富(ODBC,JDBC,Client),開源,部署容易。
Impala架構
Impala方案套件含下面幾大部分:
Clients:包括 Hue, ODBC clients, JDBC clients, and the Impala Shell
Hive Metastore:存放結構定義的中繼資料,當你建立、刪除、修改表結構,或者載入資料到表中時,會自動的通知Impala節點。
Cloudera Impala:運行在資料節點上,分析、調度、執行查詢任務,每個Impala執行個體都可以接收、調度來自用戶端的查詢,這些查詢分發到Impala節點進行查詢,Impala節點相當於背景工作處理序,執行查詢,並將結果返回。
HBase and HDFS:儲存供Impala查詢的資料。
描述了Impala的架構:
中,黃色部分為Impala組件。Impala使用了Hive的SQL介面(包括SELECT、 INSERT、Join等操作),但目前只實現了Hive的SQL語義的子集(例如尚未對UDF提供支援),表的中繼資料資訊儲存在Hive的 Metastore中。StateStore是Impala的一個子服務,用來監控叢集中各個節點的健康情況,提供節點註冊、錯誤偵測等功能。 Impala在每個節點運行了一個後台服務Impalad,Impalad用來響應外部請求,並完成實際的查詢處理。Impalad主要包含Query Planner、Query Coordinator和Query Exec Engine三個模組。QueryPalnner接收來自SQL APP和ODBC的查詢,然後將查詢轉換為許多子查詢,Query Coordinator將這些子查詢分發到各個節點上,由各個節點上的Query Exec Engine負責子查詢的執行,最後返回子查詢的結果,這些中間結果經過聚集之後最終返回給使用者。
Impala進程
從進程的角度看分為如下的三類進程:
The Impala Daemon
是Impala的核心進程,進程名叫做:impalad,運行在所有的資料節點上,可以讀寫資料,並接收用戶端的查詢請求,並存執行來自叢集中其他節點的查詢請求,將中間結果返回給調度節點。調用節點將結果返回給用戶端。
The Impala Statestore
狀態管理進程,定時檢查The Impala Daemon的健康情況,協調各個運行impalad的執行個體之間的資訊關係,Impala正是通過這些資訊去定位查詢請求所要的資料,進程名叫做statestored,在叢集中只需要啟動一個這樣的進程,如果Impala節點由於物理原因、網路原因、軟體原因或者其他原因而下線,Statestore會通知其他節點,避免查詢任務分發到停用節點上。
The Impala Catalog Service
中繼資料管理服務,進程名叫做 catalogd,將資料表變化的資訊分發給各個進程。
在搭建的CDH5環境上找到了這些進程:
Impala進程分布
| hostname |
進程名稱 |
| h1.worker.com |
statestored、catalogd |
| h2.worker.com |
impalad |
| h3.worker.com |
impalad |
| h4.worker.com |
impalad |
[[email protected] ~]# hostnameh1.worker.com[[email protected] ~]# ps -ef | grep impalaimpala 14048 7910 0 04:13 ? 00:00:30 /opt/cloudera/parcels/CDH-5.0.2-1.cdh5.0.2.p0.13/lib/impala/sbin-retail/catalogd --flagfile=/var/run/cloudera-scm-agent/process/57-impala-CATALOGSERVER/impala-conf/catalogserver_flagsimpala 14070 7910 0 04:13 ? 00:03:01 /opt/cloudera/parcels/CDH-5.0.2-1.cdh5.0.2.p0.13/lib/impala/sbin-retail/statestored --flagfile=/var/run/cloudera-scm-agent/process/61-impala-STATESTORE/impala-conf/state_store_flagsroot 48029 31543 0 10:13 pts/0 00:00:00 grep impala[[email protected] ~]#
[[email protected] ~]# hostnameh2.worker.com[[email protected] ~]# ps -ef | grep impalaimpala 13919 4405 0 04:13 ? 00:01:12 /opt/cloudera/parcels/CDH-5.0.2-1.cdh5.0.2.p0.13/lib/impala/sbin-retail/impalad --flagfile=/var/run/cloudera-scm-agent/process/58-impala-IMPALAD/impala-conf/impalad_flagsroot 24212 18173 0 10:16 pts/0 00:00:00 grep impala
Impala快的原因
從網上找了一段Impala快的原因,主要有以下幾方面的原因。
Impala不需要把中間結果寫入磁碟,省掉了大量的I/O開銷。
省掉了MapReduce作業啟動的開銷。MapReduce啟動task的速度很慢(預設每個心跳間隔是3秒鐘),Impala直接通過相應的服務進程來進行作業調度,速度快了很多。
Impala完全拋棄了MapReduce這個不太適合做SQL查詢的範式,而是像Dremel一樣借鑒了MPP並行資料庫的思想另起爐灶,因此可做更多的查詢最佳化,從而省掉不必要的shuffle、sort等開銷。
通過使用LLVM來統一編譯運行時代碼,避免了為支援通用編譯而帶來的不必要開銷。
用C++實現,做了很多有針對性的硬體最佳化,例如使用SSE指令。
使用了支援Data locality的I/O調度機制,儘可能地將資料和計算分配在同一台機器上進行,減少了網路開銷。
Impala原始碼
https://github.com/cloudera/impala
後面重點分析下Impala的原始碼。個人感覺和分散式資料庫查詢引擎的架構比較類型。
參考文檔
Cloudera Impala User Guide
Cloudera aims to bring real-time queries to Hadoop, big data
Impala:新一代開源大資料分析引擎
原創作品,轉載請註明出處 http://blog.csdn.net/yangzhaohui168/article/details/34185579