初識 Cloudera Impala

來源:互聯網
上載者:User

標籤: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



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.