Apache Impala介紹&架構

Apache Impala

概述

Impala直接對存儲在HDFS,HBase或Amazon Simple Storage Service(S3)中的Apache Hadoop數據提供快速,交互式SQL查詢。除了使用相同的統一存儲平臺之外,Impala還使用與Apache Hive相同的元數據,SQL語法(Hive SQL),ODBC驅動程序和用戶界面(Hue中的Impala查詢UI)。這爲實時或面向批處理的查詢提供了一個熟悉且統一的平臺。 Impala是可用於查詢大數據的工具的補充。 Impala不會替代基於MapReduce構建的批處理框架,例如Hive。基於MapReduce構建的Hive和其他框架最適合長時間運行的批處理作業,例如涉及對Extract,Transform和Load(ETL)類型的作業進行批處理的框架。

Note: Impala於2017年11月15日從Apache Incubator畢業。在文檔以前稱爲“ Cloudera Impala”的地方,現在的正式名稱是“ Apache Impala”。

Impala優勢

  • 數據科學家和分析師已經知道的熟悉的SQL接口。
  • 能夠查詢Apache Hadoop中的大量數據(“大數據”)。
  • 集羣環境中的分佈式查詢,可方便地擴展並利用具有成本效益的商品硬件。
  • 無需複製或導出/導入步驟即可在不同組件之間共享數據文件;例如,使用Pig編寫,使用Hive進行轉換以及使用Impala進行查詢。 Impala可以讀寫Hive表,從而可以使用Impala對Hive生成的數據進行分析,從而實現簡單的數據交換。
  • 用於大數據處理和分析的單一系統,因此客戶可以避免僅用於分析的昂貴建模和ETL。

Impala執行原理

Impala服務器是一個分佈式的大規模並行處理(MPP)數據庫引擎。它由運行在羣集內特定主機上的不同守護進程組成。Impala解決方案由以下組件組成:
在這裏插入圖片描述
Impala Daemon

Impala的核心組件是Impala守護程序,由impalad進程物理表示。Impala守護程序與StateStore保持持續通信,以確認哪些守護程序是健康的並且可以接受新工作。每當集羣中的任何Impala守護程序創建,更改或刪除任何類型的對象,或者通過Impala處理INSERT或LOAD DATA語句時,它們還從catalogd daemon(在Impala 1.2中引入)接收廣播消息。這種後臺通信最大程度地減少了在Impala 1.2之前的跨Impala守護程序協調元數據所需的REFRESH或INVALIDATE METADATA語句的需要。在Impala 2.9和更高版本中,您可以控制哪些主機充當查詢協調器,哪些主機充當查詢執行器,以提高大型集羣上高併發工作負載的可伸縮性。 Impala守護程序執行的一些關鍵功能是:

  • Reads and writes to data files.
  • Accepts queries transmitted from the impala-shell command, Hue, JDBC, or ODBC.
  • Parallelizes the queries and distributes work across the cluster.
  • Transmits intermediate query results back to the central coordinator.

Impala Statestore

稱爲StateStore的Impala組件會檢查羣集中所有Impala守護程序的運行狀況,並將其發現結果不斷傳遞給每個守護程序。它由名爲statestored的守護進程物理表示。您只需要在羣集中的一臺主機上執行此過程。如果因硬件故障,網絡錯誤,軟件問題或其他原因而使Impala守護程序脫機,則StateStore會通知所有其他Impala守護程序,以便將來的查詢可以避免向無法訪問的Impala守護程序發出請求。

因爲StateStore的目的是在出現問題時提供幫助,並向Coordinators廣播元數據,所以它對Impala羣集的正常運行並不總是至關重要的。如果StateStore未運行或變得不可訪問,則在處理Impala已知的數據時,Impala守護程序將繼續運行並像往常一樣在它們之間分配工作。如果其他Impala守護程序失敗,則羣集的健壯性就會降低,並且在StateStore脫機時,隨着元數據的更改,元數據的一致性也會降低。當StateStore重新聯機時,它將與Impala守護程序重新建立通信並恢復其監視和廣播功能。

如果在StateStore關閉時發出DDL語句,則訪問DDL創建的新對象的查詢將失敗。

負載平衡和高可用性的大多數注意事項都適用於impalad守護程序。Statestored 和 catalogd對高可用性沒有特殊要求,因爲這些守護程序的問題不會導致數據丟失。如果這些守護程序由於特定主機上的中斷而變得不可用,則可以停止Impala服務,刪除Impala StateStore和Impala Catalog Server角色,在其他主機上添加角色,然後重新啓動Impala服務。

Impala Catalog Service

稱爲目錄服務的Impala組件將元數據更改從Impala SQL語句中繼到集羣中的所有Impala守護程序。它由名爲cataloged的守護進程物理表示。您只需要在羣集中的一臺主機上執行此過程。因爲請求是通過StateStore守護程序傳遞的,所以在同一主機上運statestored和catalogd服務是有意義的。

當元數據更改由通過Impala發出的語句執行時,Catalog Service避免了發出REFRESH和INVALIDATE METADATA語句的需要。當您通過Hive創建表,加載數據等時,您確實需要在Impala守護程序上發出REFRESH或INVALIDATE METADATA,然後在該處執行查詢。

Impala&Hadoop協作

mpala利用了Hadoop生態系統中許多熟悉的組件。 Impala可以將數據與其他Hadoop組件(作爲使用者和生產者)互換,因此可以靈活地將其放入ETL和ELT管道中。

How Impala Works with Hive

Impala的主要目標是使SQL-on-Hadoop操作足夠快速高效,以吸引新的用戶類別,並向Hadoop開放新的用例類型。在可行的情況下,它利用許多Hadoop用戶已經擁有的現有Apache Hive基礎結構來執行長時間運行的,面向批處理的SQL查詢。

特別是,Impala將其表定義保存在稱爲元存儲的傳統MySQL或PostgreSQL數據庫中,而Hive保留了這種類型的數據庫。因此,只要所有列都使用Impala支持的數據類型,文件格式和壓縮編解碼器,Impala就可以訪問Hive定義或加載的表。

最初側重於查詢功能和性能意味着Impala與INSERT語句相比,可以使用SELECT語句讀取更多類型的數據。要使用Avro,RCFile或SequenceFile文件格式查詢數據,請使用Hive加載數據。

Metadata and the Metastore

對於具有大量數據和/或許多分區的表,檢索表的所有元數據可能很耗時,在某些情況下會花費幾分鐘。因此,每個Impala節點都會緩存所有這些元數據,以供將來針對同一表的查詢重用。

如果表定義或表中的數據已更新,則在對該表發出查詢之前,集羣中的所有其他Impala守護程序必須接收最新的元數據,以替換過時的緩存元數據。在Impala 1.2及更高版本中,元數據更新是自動的,並通過catalogd 守護程序對通過Impala發佈的所有DDL和DML語句進行協調。

對於通過Hive發出的DDL和DML,或對HDFS中的文件進行手動更改,您仍然使用REFRESH語句(將新數據文件添加到現有表時)或INVALIDATE METADATA語句(對於全新表,或刪除表,執行HDFS重新平衡操作或刪除數據文件)。本身發出INVALIDATE METADATA即可檢索元存儲所跟蹤的所有表的元數據。如果您知道在Impala之外僅更改了特定的表,則可以爲每個受影響的表發出REFRESH table_name,以僅檢索這些表的最新元數據。

How Impala Uses HDFS

Impala使用分佈式文件系統HDFS作爲其主要數據存儲介質。 Impala依靠HDFS提供的冗餘來防止單個節點上的硬件或網絡中斷。使用熟悉的HDFS文件格式和壓縮編解碼器,將Impala表數據物理上表示爲HDFS中的數據文件。當新表的目錄中存在數據文件時,Impala會全部讀取它們,而不管文件名如何。新數據將添加到名稱由Impala控制的文件中。

How Impala Uses HBase

HBase是HDFS的替代方案,可作爲Impala數據的存儲介質。它是建立在HDFS之上的數據庫存儲系統,沒有內置的SQL支持。許多Hadoop用戶已經對其進行了配置,並在其中存儲了大型(通常是稀疏的)數據集。通過在Impala中定義表並將它們映射到HBase中的等效表,您可以通過Impala查詢HBase表的內容,甚至可以執行包括Impala和HBase表在內的聯接查詢。

總結

Clients - 包括Hue,ODBC客戶端,JDBC客戶端和Impala Shell在內的實體都可以與Impala進行交互。這些接口通常用於發出查詢或完成管理任務,例如連接到Impala。

Hive Metastore - 存儲有關可用於Impala的數據的信息。例如,Metastore使Impala知道哪些數據庫可用以及這些數據庫的結構是什麼。在創建,刪除和更改Schema對象,通過Impala SQL語句將數據加載到表等時,相關的元數據更改將通過Impala 1.2中引入的專用目錄服務(catalog service)自動廣播到所有Impala節點。

Impala - 該過程在DataNodes上運行,可以協調並執行查詢。 Impala的每個實例都可以接收,計劃和協調來自Impala客戶端的查詢。查詢分佈在Impala節點之間,然後這些節點充當工作程序,執行並行查詢片段。

HBase and HDFS - 存儲要查詢的數據

使用Impala執行的查詢的處理方式如下:

1、用戶應用程序通過提供標準化查詢接口的ODBC或JDBC將SQL查詢發送到Impala。用戶應用程序可以連接到羣集中的任何impalad。該impalad成爲查詢的協調器。
2、 Impala解析查詢並對其進行分析,以確定跨集羣的impalad實例需要執行哪些任務。執行計劃是爲了獲得最佳效率。
3、本地impalad實例訪問諸如HDFS和HBase之類的服務以提供數據。
4、每個impalad將數據返回到協調impalad,後者將這些結果發送到客戶端。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章