大數(shù)據(jù)服務(wù)上云的思考">大數(shù)據(jù)服務(wù)上云的思考
932
2025-03-31
Impala和Hive的關(guān)系
Impala是基于Hive的大數(shù)據(jù)實時分析查詢引擎,直接使用Hive的元數(shù)據(jù)庫Metadata,意味著impala元數(shù)據(jù)都存儲在Hive的metastore中。并且impala兼容Hive的sql解析,實現(xiàn)了Hive的SQL語義的子集,功能還在不斷的完善中。
與Hive的關(guān)系
Impala 與Hive都是構(gòu)建在Hadoop之上的數(shù)據(jù)查詢工具各有不同的側(cè)重適應(yīng)面,但從客戶端使用來看Impala與Hive有很多的共同之處,如數(shù)據(jù)表元數(shù) 據(jù)、ODBC/JDBC驅(qū)動、SQL語法、靈活的文件格式、存儲資源池等。Impala與Hive在Hadoop中的關(guān)系如下圖所示。Hive適合于長時間的批處理查詢分析,而Impala適合于實時交互式SQL查詢,Impala給數(shù)據(jù)分析人員提供了快速實驗、驗證想法的大數(shù) 據(jù)分析工具。可以先使用hive進行數(shù)據(jù)轉(zhuǎn)換處理,之后使用Impala在Hive處理后的結(jié)果數(shù)據(jù)集上進行快速的數(shù)據(jù)分析。
Impala相對于Hive所使用的優(yōu)化技術(shù)
1、沒有使用 MapReduce進行并行計算,雖然MapReduce是非常好的并行計算框架,但它更多的面向批處理模式,而不是面向交互式的SQL執(zhí)行。與 MapReduce相比:Impala把整個查詢分成一執(zhí)行計劃樹,而不是一連串的MapReduce任務(wù),在分發(fā)執(zhí)行計劃后,Impala使用拉式獲取 數(shù)據(jù)的方式獲取結(jié)果,把結(jié)果數(shù)據(jù)組成按執(zhí)行樹流式傳遞匯集,減少的了把中間結(jié)果寫入磁盤的步驟,再從磁盤讀取數(shù)據(jù)的開銷。Impala使用服務(wù)的方式避免 每次執(zhí)行查詢都需要啟動的開銷,即相比Hive沒了MapReduce啟動時間。
2、使用LLVM產(chǎn)生運行代碼,針對特定查詢生成特定代碼,同時使用Inline的方式減少函數(shù)調(diào)用的開銷,加快執(zhí)行效率。
3、充分利用可用的硬件指令(SSE4.2)。
4、更好的IO調(diào)度,Impala知道數(shù)據(jù)塊所在的磁盤位置能夠更好的利用多磁盤的優(yōu)勢,同時Impala支持直接數(shù)據(jù)塊讀取和本地代碼計算checksum。
5、通過選擇合適的數(shù)據(jù)存儲格式可以得到最好的性能(Impala支持多種存儲格式)。
6、最大使用內(nèi)存,中間結(jié)果不寫磁盤,及時通過網(wǎng)絡(luò)以stream的方式傳遞。
Impala與Hive的異同
數(shù)據(jù)存儲:使用相同的存儲數(shù)據(jù)池都支持把數(shù)據(jù)存儲于HDFS, HBase。
元數(shù)據(jù):兩者使用相同的元數(shù)據(jù)。
SQL解釋處理:比較相似都是通過詞法分析生成執(zhí)行計劃。
執(zhí)行計劃:
Hive: 依賴于MapReduce執(zhí)行框架,執(zhí)行計劃分成 map->shuffle->reduce->map->shuffle->reduce…的模型。如果一個Query會 被編譯成多輪MapReduce,則會有更多的寫中間結(jié)果。由于MapReduce執(zhí)行框架本身的特點,過多的中間過程會增加整個Query的執(zhí)行時間。
Impala: 把執(zhí)行計劃表現(xiàn)為一棵完整的執(zhí)行計劃樹,可以更自然地分發(fā)執(zhí)行計劃到各個Impalad執(zhí)行查詢,而不用像Hive那樣把它組合成管道型的 map->reduce模式,以此保證Impala有更好的并發(fā)性和避免不必要的中間sort與shuffle。
數(shù)據(jù)流:
Hive: 采用推的方式,每一個計算節(jié)點計算完成后將數(shù)據(jù)主動推給后續(xù)節(jié)點。
Impala: 采用拉的方式,后續(xù)節(jié)點通過getNext主動向前面節(jié)點要數(shù)據(jù),以此方式數(shù)據(jù)可以流式的返回給客戶端,且只要有1條數(shù)據(jù)被處理完,就可以立即展現(xiàn)出來,而不用等到全部處理完成,更符合SQL交互式查詢使用。
內(nèi)存使用:
Hive: 在執(zhí)行過程中如果內(nèi)存放不下所有數(shù)據(jù),則會使用外存,以保證Query能順序執(zhí)行完。每一輪MapReduce結(jié)束,中間結(jié)果也會寫入HDFS中,同樣由于MapReduce執(zhí)行架構(gòu)的特性,shuffle過程也會有寫本地磁盤的操作。
Impala: 在遇到內(nèi)存放不下數(shù)據(jù)時,當(dāng)前版本1.0.1是直接返回錯誤,而不會利用外存,以后版本應(yīng)該會進行改進。這使用得Impala目前處理Query會受到一 定的限制,最好還是與Hive配合使用。Impala在多個階段之間利用網(wǎng)絡(luò)傳輸數(shù)據(jù),在執(zhí)行過程不會有寫磁盤的操作(insert除外)。
調(diào)度:
Hive: 任務(wù)調(diào)度依賴于Hadoop的調(diào)度策略。
Impala: 調(diào)度由自己完成,目前只有一種調(diào)度器simple-schedule,它會盡量滿足數(shù)據(jù)的局部性,掃描數(shù)據(jù)的進程盡量靠近數(shù)據(jù)本身所在的物理機器。調(diào)度器 目前還比較簡單,在SimpleScheduler::GetBackend中可以看到,現(xiàn)在還沒有考慮負載,網(wǎng)絡(luò)IO狀況等因素進行調(diào)度。但目前 Impala已經(jīng)有對執(zhí)行過程的性能統(tǒng)計分析,應(yīng)該以后版本會利用這些統(tǒng)計信息進行調(diào)度吧。
容錯:
Hive: 依賴于Hadoop的容錯能力。
Impala: 在查詢過程中,沒有容錯邏輯,如果在執(zhí)行過程中發(fā)生故障,則直接返回錯誤(這與Impala的設(shè)計有關(guān),因為Impala定位于實時查詢,一次查詢失敗, 再查一次就好了,再查一次的成本很低)。但從整體來看,Impala是能很好的容錯,所有的Impalad是對等的結(jié)構(gòu),用戶可以向任何一個 Impalad提交查詢,如果一個Impalad失效,其上正在運行的所有Query都將失敗,但用戶可以重新提交查詢由其它Impalad代替執(zhí)行,不 會影響服務(wù)。對于State Store目前只有一個,但當(dāng)State Store失效,也不會影響服務(wù),每個Impalad都緩存了State Store的信息,只是不能再更新集群狀態(tài),有可能會把執(zhí)行任務(wù)分配給已經(jīng)失效的Impalad執(zhí)行,導(dǎo)致本次Query失敗。
適用面:
Hive: 復(fù)雜的批處理查詢?nèi)蝿?wù),數(shù)據(jù)轉(zhuǎn)換任務(wù)。
Impala:實時數(shù)據(jù)分析,因為不支持UDF,能處理的問題域有一定的限制,與Hive配合使用,對Hive的結(jié)果數(shù)據(jù)集進行實時分析。
Impala 與Hive都是構(gòu)建在Hadoop之上的數(shù)據(jù)查詢工具,但是各有不同側(cè)重,那么我們?yōu)槭裁匆瑫r使用這兩個工具呢?單獨使用Hive或者Impala不可以嗎?
一、介紹Impala和Hive
(1)Impala和Hive都是提供對HDFS/Hbase數(shù)據(jù)進行SQL查詢的工具,Hive會轉(zhuǎn)換成MapReduce,借助于YARN進行調(diào)度從而實現(xiàn)對HDFS的數(shù)據(jù)的訪問,而Impala直接對HDFS進行數(shù)據(jù)查詢。但是他們都是提供如下的標準SQL語句,在機身里運行。
(2)Apache Hive是MapReduce的高級抽象,使用HiveQL,Hive可以生成運行在Hadoop集群的MapReduce或Spark作業(yè)。Hive最初由Facebook大約在2007年開發(fā),現(xiàn)在是Apache的開源項目。
Apache Impala是高性能的專用SQL引擎,使用Impala SQL,因為Impala無需借助任何的框架,直接實現(xiàn)對數(shù)據(jù)塊的查詢,所以查詢延遲毫秒級。Impala受到Google的Dremel項目啟發(fā),2012年由Cloudera開發(fā),現(xiàn)在是Apache開源項目。
二、Impala和Hive有什么不同?
(1)Hive有很多的特性:
1、對復(fù)雜數(shù)據(jù)類型(比如arrays和maps)和窗口分析更廣泛的支持
2、高擴展性
3、通常用于批處理
(2)Impala更快
1、專業(yè)的SQL引擎,提供了5x到50x更好的性能
2、理想的交互式查詢和數(shù)據(jù)分析工具
3、更多的特性正在添加進來
三、高級概述:
四、為什么要使用Hive和Impala?
1、為數(shù)據(jù)分析人員帶來了海量數(shù)據(jù)分析能力,不需要軟件開發(fā)經(jīng)驗,運用已掌握的SQL知識進行數(shù)據(jù)的分析。
2、比直接寫MapReduce或Spark具有更好的生產(chǎn)力,5行HiveQL/Impala SQL等同于200行或更多的Java代碼。
3、提供了與其他系統(tǒng)良好的互操作性,比如通過Java和外部腳本擴展,而且很多商業(yè)智能工具支持Hive和Impala。
五、Hive和Impala使用案例
(1)日志文件分析
日志是普遍的數(shù)據(jù)類型,是當(dāng)下大數(shù)據(jù)時代重要的數(shù)據(jù)源,結(jié)構(gòu)不固定,可以通過Flume和kafka將日志采集放到HDFS,然后分析日志的結(jié)構(gòu),根據(jù)日志的分隔符去建立一個表,接下來運用Hive和Impala 進行數(shù)據(jù)的分析。例如:
(2)情感分析
很多組織使用Hive或Impala來分析社交媒體覆蓋情況。例如:
(3)商業(yè)智能
很多領(lǐng)先的BI工具支持Hive和Impala
出處:http://www.cnblogs.com/zlslch/
Hive 大數(shù)據(jù)
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。