我們在《數(shù)據(jù)科學(xué)之路(5)數(shù)據(jù)倉庫工具》中提到了 Hive 既可以運(yùn)行在 MapReduce 上遏餐,也可以運(yùn)行在 Tez 和 Spark 上慨削,那么 Tez 到底是什么呢友驮?是跟 MapReduce 和 Spark 一樣都是大數(shù)據(jù)生態(tài)中的計(jì)算框架嗎旨涝?其運(yùn)作原理又是什么呢蹬屹?想必小伙伴們在學(xué)習(xí)《數(shù)據(jù)科學(xué)之路(5)數(shù)據(jù)倉庫工具》的時(shí)候就存在了諸如此類的眾多疑問,本篇白华,我將會跟小伙伴們一起揭開 Tez 的神秘面紗慨默!
Tez 是一個(gè)構(gòu)建在 Yarn 之上的支持復(fù)雜的 DAG 任務(wù)的數(shù)據(jù)處理框架。是由 Hortonworks 開源弧腥,其核心思想是把 MapReduce 的過程分成若干子過程厦取,同時(shí)可以把多個(gè) MapReduce 任務(wù)組合成一個(gè)較大的 DAG 任務(wù),減少了 MapReduce 之間的文件存儲鸟赫,同時(shí)合理地組合其子過程從而大幅度提升 MapReduce 性能蒜胖,Hortonworks 把 Tez 應(yīng)用到數(shù)據(jù)倉庫 Hive 的優(yōu)化中,使得性能提升了約100倍抛蚤!所以我們也可以認(rèn)為台谢,Tez 是出于 MapReduce 而勝于 MapReduce!
HiveQL 在 MapReduce 和 Tez 的執(zhí)行情況對比
從上圖岁经,我們可以看到朋沮,傳統(tǒng)的 MapReduce 程序?qū)τ谝粋€(gè)復(fù)雜的 HiveQL 的做法是將其拆成4個(gè)有依賴關(guān)系的 MapReduce 作業(yè),有3次寫 HDFS 的操作(上圖中的云表示寫 HDFS 操作)缀壤。但是 Tez 是將多個(gè)有依賴關(guān)系的作業(yè)轉(zhuǎn)換為一個(gè)作業(yè)樊拓,只需要寫一次 HDFS,大大簡化了中間節(jié)點(diǎn)塘慕。簡單來說筋夏,相比于 MapReduce,Tez 的優(yōu)化主要體現(xiàn)在:去除連續(xù)兩個(gè)作業(yè)之間的寫 HDFS 操作图呢;去除每個(gè)工作流中多余的 Map 階段這兩個(gè)點(diǎn)条篷。
(Tez+Hive)與 Impala 的區(qū)別
Tez 在解決 Hive 延遲大、性能低等問題的思路蛤织,是和那些支持實(shí)時(shí)交互式查詢分析的產(chǎn)品(Impala)不同的赴叹,Impala 是完全拋棄了 MapReduce 計(jì)算框架,并借助于類似并行關(guān)系型數(shù)據(jù)庫的分布式查詢引擎指蚜,并在每個(gè)數(shù)據(jù)節(jié)點(diǎn)上執(zhí)行子查詢乞巧,不會將查詢轉(zhuǎn)換成 MapReduce 作業(yè),從而大大降低延遲摊鸡,滿足實(shí)時(shí)交互性查詢的需求绽媒。但是蚕冬,Tez 針對數(shù)據(jù)倉庫進(jìn)行優(yōu)化,提出了“Tez+Hive”的解決方案是辕,其仍然采用 MapReduce 計(jì)算框架播瞳,但是對 DAG 的作業(yè)依賴關(guān)系進(jìn)行了裁剪,并將多個(gè)小作業(yè)合并成一個(gè)大作業(yè)免糕,這樣,不僅計(jì)算量減少了忧侧,而且寫 HDFS 次數(shù)也會大大減少石窑。
Tez 實(shí)現(xiàn)方法
Tez 將 MapReduce 的 Map 和 Reduce 操作進(jìn)一步拆分,將 Map 拆分為 Input蚓炬、Processor松逊、Sort、Merge 和 Output肯夏,將 Reduce 拆分成 Input经宏、Shuffle、Sort驯击、Merge烁兰、Processor 和 Output 等,并對外提供了相應(yīng)的可編程組件:
- Input:對輸入數(shù)據(jù)源的抽象徊都,將輸入數(shù)據(jù)解析成<key沪斟,value>的形式
- Output:對輸出數(shù)據(jù)源的抽象,將用戶程序產(chǎn)生的<key,value>寫入文件系統(tǒng)
- Partitioner:對數(shù)據(jù)進(jìn)行分片暇矫,類似于 MapReduce 中的 Partitioner
- Processor:對計(jì)算的抽象主之,從一個(gè) Input 中獲取數(shù)據(jù),經(jīng)處理后李根,通過 Output 輸出
- Task:對任務(wù)的抽象槽奕,每一個(gè) Task 都由一個(gè) Input、Output 和 Processor 組成
- Master:管理各個(gè) Task 的依賴關(guān)系房轿,并按照順序依賴執(zhí)行他們
- Sort:排序粤攒,分為本地?cái)?shù)據(jù)排序和遠(yuǎn)程拷貝數(shù)據(jù)并排序
OK,本篇到這里就要結(jié)束了冀续,想了解更多有關(guān)于數(shù)據(jù)科學(xué)的小伙伴們琼讽,可以關(guān)注我哦!