spark sql合并小文件_如何比较Hive,Spark,Impala和Presto?
Spark,Hive,Impala和Presto是基于SQL的引擎,Impala由Cloudera開發(fā)和交付。在選擇這些數(shù)據(jù)庫來管理數(shù)據(jù)庫時(shí),許多Hadoop用戶會(huì)感到困惑。Presto是一個(gè)開放源代碼的分布式SQL查詢引擎,旨在運(yùn)行甚至PB級(jí)的SQL查詢,它是由Facebook人設(shè)計(jì)的。
Spark SQL是一個(gè)分布式內(nèi)存計(jì)算引擎,它的內(nèi)存處理能力很高。Hive也由Apache作為查詢引擎引入,這使數(shù)據(jù)庫工程師的工作更加輕松,他們可以輕松地在結(jié)構(gòu)化數(shù)據(jù)上編寫ETL作業(yè)。在發(fā)布Spark之前,Hive被認(rèn)為是最快速的數(shù)據(jù)庫之一。
現(xiàn)在,Spark還支持Hive,也可以通過Spike對(duì)其進(jìn)行訪問。就Impala而言,它也是一個(gè)基于Hadoop設(shè)計(jì)的SQL查詢引擎。Impala查詢不會(huì)轉(zhuǎn)換為mapreduce作業(yè),而是本地執(zhí)行。
這是對(duì)Hive,Spark,Impala和Presto的簡(jiǎn)要介紹。在本文中,我們會(huì)講解這些SQL查詢引擎的功能描述,并根據(jù)它們的屬性介紹這些引擎之間的差異。
Hive,Spark,Impala和Presto之間的區(qū)別
讓我們看一下所有這些功能特性的描述:
什么是Hive?
用于查詢和管理大型數(shù)據(jù)集的Apache Hive數(shù)據(jù)倉庫軟件設(shè)施將分布式存儲(chǔ)用作其后端存儲(chǔ)系統(tǒng)。它建立在Apache之上。該工具是在Hadoop文件系統(tǒng)或HDFS的頂部開發(fā)的。Hadoop可簡(jiǎn)化以下任務(wù):
- 臨時(shí)查詢
- 數(shù)據(jù)封裝
- 龐大的數(shù)據(jù)集和分析
Hive特征
- 在Hive中,首先創(chuàng)建數(shù)據(jù)庫表,然后將數(shù)據(jù)加載到這些表中
- Hive旨在管理和查詢存儲(chǔ)表中的結(jié)構(gòu)化數(shù)據(jù)
- Map Reduce沒有可用性和優(yōu)化功能,但是Hive具有這些功能。查詢優(yōu)化可以高效地執(zhí)行查詢
- Hive的靈感語言降低了Map Reduce編程的復(fù)雜性,并重用了其他數(shù)據(jù)庫概念,例如行、列、模式等。
- Hive使用目錄結(jié)構(gòu)進(jìn)行數(shù)據(jù)分區(qū)并提高性能。
- Hive的大多數(shù)交互都是通過CLI或命令行界面進(jìn)行的,并且HQL或Hive查詢語言用于查詢數(shù)據(jù)庫
- Hive支持四種文件格式,即TEXTFILE,ORC,RCFILE和SEQUENCEFILE
Hive的三個(gè)核心部分
- Hive客戶
- Hive服務(wù)
- Hive存儲(chǔ)和計(jì)算
通過不同的驅(qū)動(dòng)程序,Hive與各種應(yīng)用程序進(jìn)行通信。與基于Java的應(yīng)用程序一樣,它使用JDBC驅(qū)動(dòng)程序,對(duì)于其他應(yīng)用程序,它使用ODBC驅(qū)動(dòng)程序。Hive客戶端和驅(qū)動(dòng)程序然后再次與Hive服務(wù)和Hive服務(wù)器通信。Hive客戶端可以通過Hive服務(wù)解決其查詢。
CLI或命令行界面在這里就像Hive服務(wù)一樣,用于數(shù)據(jù)定義語言操作。來自不同應(yīng)用程序的請(qǐng)求由驅(qū)動(dòng)程序處理,并轉(zhuǎn)發(fā)到不同的Meta商店和現(xiàn)場(chǎng)系統(tǒng)進(jìn)行進(jìn)一步處理。
Hive服務(wù)(如作業(yè)客戶端,文件系統(tǒng)和元存儲(chǔ))與Hive存儲(chǔ)進(jìn)行通信,并用于執(zhí)行以下操作:
- 在Hive中創(chuàng)建并存儲(chǔ)了表的元數(shù)據(jù)信息,也稱為“元存儲(chǔ)數(shù)據(jù)庫”
- 數(shù)據(jù)和查詢結(jié)果加載到表中,這些表以后存儲(chǔ)在HDFS上的Hadoop集群中
配置單元在本地模式或地圖縮小模式下執(zhí)行。如果數(shù)據(jù)大小較小或處于偽模式下,則使用Hive的本地模式可以提高處理速度。而對(duì)于大量數(shù)據(jù)或用于多節(jié)點(diǎn)處理,則使用Hive的Map Reduce模式,以提供更好的性能。
什么是Impala?
Impala是一個(gè)大規(guī)模并行處理引擎,是一個(gè)開源引擎。它要求將數(shù)據(jù)庫存儲(chǔ)在運(yùn)行Apache Hadoop的計(jì)算機(jī)群集中。這是一個(gè)SQL引擎,由Cloudera在2012年推出。
Hadoop程序員可以以出色的方式在Impala上運(yùn)行其SQL查詢,它被認(rèn)為是一種高效的引擎,因?yàn)樗谔幚碇安粫?huì)移動(dòng)或轉(zhuǎn)換數(shù)據(jù),該引擎可以輕松實(shí)現(xiàn)。Impala的數(shù)據(jù)格式、元數(shù)據(jù)、文件安全性和資源管理與MapReduce相同。
它具有Hadoop的所有特質(zhì),還可以支持多用戶環(huán)境。以下列出了使Impala非常有用的兩個(gè)最有用的品質(zhì):
1)列存儲(chǔ)
2)樹結(jié)構(gòu)
Impala的一些流行功能:
- 支持Apache HBase存儲(chǔ)和HDFS或Hadoop分布式文件系統(tǒng)
- 支持Kerberos身份驗(yàn)證或Hadoop安全性
- 它可以輕松讀取Apache Hive的元數(shù)據(jù),SQL語法和ODBC驅(qū)動(dòng)程序
- 它可以識(shí)別Hadoop文件格式,RCFile,Parquet,LZO和SequenceFile
- Apache Sentry基于角色的授權(quán)。
Impala在2年內(nèi)崛起,已成為最重要的SQL引擎之一。現(xiàn)在,甚至Amazon Web Services和MapR都已列出了對(duì)Impala的支持。
什么是Spark?
Apache Spark是最受歡迎的QL引擎之一,它是通用數(shù)據(jù)處理引擎,在核心火花數(shù)據(jù)處理的頂部還有很多其他庫,例如圖形計(jì)算、機(jī)器學(xué)習(xí)和流處理,這些庫可以在應(yīng)用程序中一起使用。Spark支持以下語言,例如Spark、Java和R應(yīng)用程序開發(fā)。
Spark應(yīng)用程序運(yùn)行幾個(gè)獨(dú)立的進(jìn)程,這些進(jìn)程由驅(qū)動(dòng)程序中的SparkSession對(duì)象協(xié)調(diào),簇或資源管理器也將該任務(wù)分配給工作人員。任務(wù)將其工作單位應(yīng)用于數(shù)據(jù)集、結(jié)果,創(chuàng)建了一個(gè)新的數(shù)據(jù)集分區(qū),最終結(jié)果可以存儲(chǔ)并保存在磁盤上,也可以發(fā)送回驅(qū)動(dòng)程序。
Spark可以處理PB級(jí)的數(shù)據(jù),并以分布式方式在成千上萬個(gè)群集中進(jìn)行處理,這些群集分布在幾個(gè)物理和虛擬群集之間。Spark被用于多種應(yīng)用,例如:
- 流處理
- 機(jī)器學(xué)習(xí)
- 互動(dòng)分析
- 資料整合
由于其有益的功能(例如速度,簡(jiǎn)單性和支持),Spark被許多用戶選擇。可以通過一組豐富的API來訪問Spark的功能,這些API專門用于快速,輕松地與數(shù)據(jù)進(jìn)行交互。Apache Spark社區(qū)龐大且支持您快速,快速地獲得查詢的答案。
什么是Presto?
Presto是一個(gè)分布式的開源SQL查詢引擎,用于運(yùn)行交互式分析查詢。它可以處理從GB到PB的任何大小的查詢。Presto是由Facebook人設(shè)計(jì)的。它旨在加速商業(yè)數(shù)據(jù)倉庫查詢處理。它可以擴(kuò)大與Facebook相匹配的組織規(guī)模。
Presto在一組機(jī)器上運(yùn)行。Presto設(shè)置包括多個(gè)工作人員和協(xié)調(diào)員。Presto查詢由其客戶提交給協(xié)調(diào)器。然后,Presto協(xié)調(diào)器分析查詢并創(chuàng)建其執(zhí)行計(jì)劃。稍后,處理過程將分配給工人。
在處理PB級(jí)或TB級(jí)數(shù)據(jù)時(shí),用戶將不得不使用大量工具與HDFS和Hadoop進(jìn)行交互。Presto可以幫助用戶通過Hive和Pig等MapReduce作業(yè)管道查詢數(shù)據(jù)庫。Presto可以幫助用戶處理不同類型的數(shù)據(jù)源,例如Cassandra和許多其他傳統(tǒng)數(shù)據(jù)源。
Presto的功能
- 可以幫助從其駐留位置查詢數(shù)據(jù),例如Hive,Cassandra,專有數(shù)據(jù)存儲(chǔ)或關(guān)系數(shù)據(jù)庫。
- 可以合并來自多個(gè)數(shù)據(jù)源的單個(gè)查詢的數(shù)據(jù)
- Presto的響應(yīng)時(shí)間非常快,通過昂貴的商業(yè)解決方案,他們可以快速解決查詢
- 它使用矢量化的柱狀處理
- Presto具有流水線執(zhí)行
- 其架構(gòu)簡(jiǎn)單而廣泛
Facebook每天都使用Presto在一天中運(yùn)行PB級(jí)數(shù)據(jù)。這可能包括幾個(gè)內(nèi)部數(shù)據(jù)存儲(chǔ)。它還支持為查詢提供數(shù)據(jù)的可插拔連接器。Presto支持以下連接器:
- TPC-H
- Cassandra
- Hadoop /Hive
就Presto應(yīng)用程序而言,它支持Facebook,Teradata和Airbnb等許多工業(yè)應(yīng)用程序。Presto支持標(biāo)準(zhǔn)的ANSI SQL,這對(duì)于數(shù)據(jù)分析人員和開發(fā)人員而言非常容易。Presto是用Java開發(fā)和編寫的,但沒有與Java代碼相關(guān)的問題,例如:
內(nèi)存分配和垃圾回收。Presto具有Hadoop友好的連接器體系結(jié)構(gòu)。
推薦用法
就這些查詢引擎的用途而言,您可以考慮以下幾點(diǎn):
對(duì)于任何類似BI的交互式工作負(fù)載,Impala可能是您的最佳選擇。由于Impala查詢的延遲最低,如果是為了減少查詢延遲,您可以果斷選擇Impala,尤其是對(duì)于并發(fā)執(zhí)行。
但對(duì)于低延遲和多用戶支持要求,Hive也是不錯(cuò)的選擇。選擇Hive,僅出于您的ETL或批處理要求。但Hive不會(huì)減少太多查詢處理所需的時(shí)間,因此它可以成為BI的合適選擇。
Spark SQL,用戶可以有選擇地使用SQL構(gòu)造為Spark管道編寫查詢。Spark SQL重用Hive元存儲(chǔ)和前端,與現(xiàn)有的Hive查詢,數(shù)據(jù)和UDF完全兼容。通過基于成本的查詢優(yōu)化器,代碼生成器和列式存儲(chǔ)Spark查詢的執(zhí)行速度得以提高。
Presto在BI類型查詢中處于領(lǐng)先地位,與主要用于性能豐富查詢的Spark不同,Presto對(duì)并發(fā)查詢工作負(fù)載的支持至關(guān)重要。因此從并發(fā)查詢執(zhí)行和增加的工作量的角度出發(fā),您可以使用它。
選擇合適的數(shù)據(jù)庫或SQL引擎完全取決于您的要求。在這里,我們列出了所有SQL引擎的一些常用和有益的功能。您可以選擇Presto或Spark或Hive或Impala。數(shù)據(jù)庫的選擇取決于技術(shù)規(guī)格和功能的可用性。
寫在最后
如果你不確定數(shù)據(jù)庫或SQL查詢引擎的選擇,那只需進(jìn)行詳細(xì)比較它們特定的屬性和登記功能,你就能更輕松地選擇合適的數(shù)據(jù)庫或SQL引擎了。
青牛:Hadoop與 Spark —選擇正確的大數(shù)據(jù)框架
總結(jié)
以上是生活随笔為你收集整理的spark sql合并小文件_如何比较Hive,Spark,Impala和Presto?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python用缩进来标明代码的层次关系_
- 下一篇: 如何在android studio中设置