impala是由cloudera公司開發的新型查詢系統,能夠對儲存在hdfs、hbase以及s3上的資料進行快速的互動式sql查詢。另外,impala與hive使用了統一的儲存系統、同樣的元資料庫、sql語法(hive sql)、odbc驅動和使用者互動介面(hue),impala對實時的或者面向批處理的查詢提供了乙個統一的平台,impala在效能上比hive高出3~30倍。
impala是用於查詢大資料的工具的補充,impala不是取代構建在mapreduce之上的批處理框架,比如hive。hive和其他的基於mapreduce的框架適合處理長時間執行的批處理作業,比如涉及到批處理的etl型別的作業。
注意:impala於2023年11月15日從apache的孵化器畢業。
為了避免延遲,impala繞過mapreduce,採用了與商用並行關聯式資料庫類似的分布式查詢引擎,可以直接與hdfs和hbase進行互動查詢,效能上比hive要快。
impala server 是乙個分布式的大規模並行處理(mpp)的資料庫引擎, 它由執行在集群中特定主機上的不同守護程序組成。其架構圖如下圖所示:
這個程序是執行在集群每個datanode節點上的守護程序,是impala的核心元件。在每個節點上這個程序的名字稱為impalad。主要負責讀寫資料,接受 impala-shell,hue, jdbc或者odbc的查詢請求,與集群中的其他節點分布式並行工作,並將本節點的查詢結果返回給中心協調者節點(central coordinator)。
我們可以向執行在datanode上的任何impalad程序提交乙個查詢,提交查詢的這個節點將作為這個查詢的「協調者節點」(coordinator)為這個查詢提供服務。其他節點的運算結果會被傳輸到協調者節點,協調者節點將最終的運算結果返回。當使用
mpala-shell命令進行功能性測試的時候,為了方便起見,我們總是會連線到同乙個節點上的impalad。但是對於生產環境中的impala集群而言,必須要考慮到各個節點的負載均衡,建議使用jdbc/odbc介面以輪詢(round-robin)的方式提交到不同的impalad程序上。
為了了解其他節點的健康狀況和負載,impalad程序會一直與 statestore保持通訊,用以確保哪個節點是健康的並且可以接受任務的。
當impala集群中建立,修改或者刪除了物件,或者進行了insert/load datat操作,catalogd程序會向所有的節點廣播訊息,以保證每個impalad節點都能夠及時地了解整個集群中物件元資料的最新狀態。後台程序間的通訊最大限度的降低了對 refresh/invalidate metadata命令的依賴。(但是對於和impala1.2版本之前的節點通訊,還是需要顯示指定)
對impala 2.9或者更高版本,可以控制哪乙個節點為查詢協調器( query coordinators ),也可以控制哪乙個節點為查詢協調器(query executors), 能夠提高大型集群上高併發工作負載的可擴充套件性。
statestore檢查集群中impalad程序節點的健康狀況,並不斷地將健康狀況結果**給所有的impalad程序節點。statestore程序的名稱為statestored。乙個impala集群只需要乙個statestored程序,如果impala節點由於硬體故障、網路錯誤、軟體問題或者其他的原因導致節點不可用,statestore將確保這條資訊及時地傳達到所有的impalad程序節點上,當有新的查詢請求時 ,impalad程序節點將不會把查詢請求放鬆到不可用的節點上。
由於statestore的目的是在集群故障時對impalad程序節點同步資訊,所以對於乙個正常執行的impala集群來說,它並不是乙個關鍵程序。如果statestore不可用,impalad程序節點之間仍然可以相互協調正常對外提供分布式查詢。在statestore不可用的情況下,impalad程序節點失敗,只是會讓集群不再那麼強健。當statestore恢復正常時,它重新與impalad程序節點建立通訊,恢復對集群的監控功能。
對於負載平衡和高可用性都適用於impalad守護程序。statestore和catalog程序對高可用性沒有特殊要求,因為即便這些守護程序存在問題,也不會導致資料丟失。如果這些守護程序因中斷而變得不可用,則可以停止impala服務,刪除impala statestore和impala catalog角色,將角色新增到不同的主機上,並重新啟動impala服務。
當impala集群中執行的sql語句會引起元資料變化時,catalog服務會將這些變化推送到其他的impalad程序節點上。catalog服務對應的程序名稱為catalogd,乙個impala集群只需要乙個catalogd程序 。由於所有的請求都是通過statestore程序傳送過來的,所以建議讓statestore和catalog執行在同乙個節點上。
catalog服務大大地減少了對 refresh / invalidate metadata 語句的元資料同步的需求。在建立和刪除表的過程中,catalogd程序負責連線元資料庫並進行元資料更新操作,從而確保不必執行refresh / invalidate metadata這樣的元資料同步語句。但是,如果通過hive執行了建立表 、載入資料等操作,則在impala中執行查詢之前需要先執行 refresh或者invalidate metadata 命令。
第0步,當使用者提交查詢前,impala先建立乙個負責協調客戶端提交的查詢的impalad程序,該程序會向impala state store提交註冊訂閱資訊,state store會建立乙個statestored程序,statestored程序通過建立多個執行緒來處理impalad的註冊訂閱資訊。
第1步,使用者通過cli客戶端提交乙個查詢到impalad程序,impalad的query planner對sql語句進行解析,生成解析樹;然後,planner把這個查詢的解析樹變成若干planfragment,傳送到query coordinator
第3步,coordinator初始化相應impalad上的任務執行,即把查詢任務分配給所有儲存這個查詢相關資料的資料節點。
第4步,query executor通過流式交換中間輸出,並由query coordinator匯聚來自各個impalad的結果。
第5步,coordinator把彙總後的結果返回給cli客戶端。
使用impala查詢例項
連線impala流程 一 匯入impala的包 impalajdbc41.jar 二 載入impala jdbc驅動程式 class.forname com.cloudera.impala.jdbc41.driver 三 連線 impala 資料庫 conn impalajdbcutil.getco...
impala條件查詢問題
使用 impala 查詢hbase 時,如果是 條件查詢,如果不新增 is not null 條件,則會把該列沒有值的記錄也查詢出來 空字串不會 比如 select from user where name xiao wang 該語句會查詢出 name 等於xiao wang 和null 的資料。s...
新型查詢系統impala
這羊頭很酷.apache impala是apache hadoop的開源本地分析資料庫。impala由cloudera,mapr,oracle和amazon提供。在hadoop上進行bi風格的查詢 impala為hadoop上的bi 分析查詢提供了低延遲和高併發性 不是由apache hive等批處...