比較Hadoop上的SQL引擎Hive,Spark,Impala

簡單的介紹

Spark,Hive,Impala和Presto是基於SQL的引擎。

Impala由Cloudera開發和交付。 就Impala而言,它也是一個基於Hadoop設計的SQL查詢引擎。 Impala查詢不會轉換為MapReduce作業,而是本地執行。

Presto是一個開放源代碼的分佈式SQL查詢引擎,旨在運行甚至PB級的SQL查詢。 它是由Facebook人設計的。

Spark SQL是一個分佈式內存計算引擎。 它的內存處理能力很高。 Spark還支持Hive,現在也可以通過Spike對其進行訪問。

Hive也由Apache引入作為查詢引擎。 這使數據庫工程師的工作更加輕鬆,他們可以輕鬆地在結構化數據上編寫ETL作業。 在發佈Spark之前,Hive被認為是最快速的數據庫之一。

什麼是Spark?

Apache Spark是最受歡迎的SQL引擎之一。 它是通用數據處理引擎。 在核心火花數據處理的頂部還有很多其他庫,例如圖形計算,機器學習和流處理。 這些庫可以在應用程序中一起使用。 Spark支持以下語言,例如Spark,Java和R應用程序開發。

Spark應用程序運行幾個獨立的進程,這些進程由驅動程序中的SparkSession對象協調。 Spark應用程序作為獨立進程運行,這些進程由驅動程序中的Spark Session對象協調。 集群或資源管理器還將任務分配給工作人員。 任務將其工作單位應用於數據集,結果,創建了一個新的數據集分區。 最終結果可以存儲並保存在磁盤上,也可以發送回驅動程序。

Spark可以處理PB級的數據,並在分佈於幾個物理和虛擬群集之間的數千個群集中以分佈式方式處理數據。 Spark被用於各種應用程序,例如

· 流處理· 機器學習· 互動分析· 資料整合

由於其有益的功能(例如速度,簡便性和支持),Spark被許多用戶選擇。 可以通過一組豐富的API來訪問Spark的功能,這些API專門用於快速,輕鬆地與數據進行交互。 Apache Spark社區龐大且支持您快速,快速地獲得查詢的答案。

什麼是Impala?

Impala是一個大規模並行處理引擎,是一個開源引擎。 它要求將數據庫存儲在運行Apache Hadoop的計算機群集中。 這是一個SQL引擎,由Cloudera在2012年推出。

Hadoop程序員可以以出色的方式在Impala上運行其SQL查詢。 它被認為是一種高效的引擎,因為它在處理之前不會移動或轉換數據。 該引擎可以輕鬆實現。 Impala的數據格式,元數據,文件安全性和資源管理與MapReduce相同。

它具有Hadoop的所有特質,還可以支持多用戶環境。 以下列出了使Impala非常有用的兩個最有用的品質:

1)列存儲

2)樹結構

Impala的一些流行功能:

· 支持Apache HBase存儲和HDFS或Hadoop分佈式文件系統· 支持Kerberos身份驗證或Hadoop安全性· 它可以輕鬆讀取Apache Hive的元數據,SQL語法和ODBC驅動程序· 它可以識別Hadoop文件格式,RCFile,Parquet,LZO和SequenceFile· Apache Sentry基於角色的授權。

Impala在2年內崛起,已成為最重要的SQL引擎之一。 現在,甚至Amazon Web Services和MapR都已列出了對Impala的支持。

什麼是Hive?

用於查詢和管理大型數據集的Apache Hive數據倉庫軟件設施使用分佈式存儲作為其後端存儲系統。 它建立在Apache之上。 該工具是在Hadoop文件系統或HDFS的頂部開發的。 Hadoop可簡化以下任務:

· 臨時查詢· 數據封裝· 龐大的數據集和分析

Hive特徵

· 在Hive中,首先創建數據庫表,然後將數據加載到這些表中· Hive旨在管理和查詢存儲表中的結構化數據· Map Reduce沒有可用性和優化功能,但是Hive具有這些功能。 查詢優化可以高效地執行查詢· Hive的啟發性語言降低了Map Reduce編程的複雜性,並重用了其他數據庫概念,例如行,列,模式等。· Hive使用目錄結構進行數據分區並提高性能· Hive的大多數交互都是通過CLI或命令行界面進行的,並且HQL或Hive查詢語言用於查詢數據庫· Hive支持四種文件格式,即TEXTFILE,ORC,RCFILE和SEQUENCEFILE

Hive的三個核心部分

· Hive客戶端· Hive服務端· Hive存儲和計算

通過不同的驅動程序,Hive與各種應用程序進行通信。 與基於Java的應用程序一樣,它使用JDBC驅動程序,對於其他應用程序,它使用ODBC驅動程序。 Hive客戶端和驅動程序然後再次與Hive服務和Hive服務器通信。 Hive客戶端可以通過Hive服務解決其查詢。

CLI或命令行界面在這裡就像Hive服務一樣,用於數據定義語言操作。 來自不同應用程序的請求由驅動程序處理,並轉發到不同的Meta商店和現場系統進行進一步處理。

Hive服務(如作業客戶端,文件系統和元存儲)與Hive存儲進行通信,並用於執行以下操作:

· 在Hive中創建並存儲了表的元數據信息,也稱為"元存儲數據庫"· 數據和查詢結果加載到表中,這些表以後存儲在HDFS上的Hadoop集群中

配置單元在本地模式或地圖縮小模式下執行。 如果數據大小較小或處於偽模式下,則使用Hive的本地模式可以提高處理速度。 對於大量數據或多節點處理,使用Hive的Map Reduce模式可提供更好的性能。

參考文獻:

janbasktraining.com/blog/how-to-compare-hive-spark-impala-and-presto/

(本文翻譯自Z² Little的文章《Hive, Spark, Impala, Hadoop》,參考:https://medium.com/@xzz201920/hive-spark-impala-presto-6ddde773ccd4)