Apache Tez DAG計算應用框架

2021-09-01 18:21:49 字數 2789 閱讀 1747

tez是基於hadoop yarn之上的dag(有向無環圖,directed acyclic graph)計算框架。它把map/reduce過程拆分成若干個子過程,同時可以把多個map/reduce任務組合成乙個較大的dag任務,減少了map/reduce之間的檔案儲存。同時合理組合其子過程,也可以減少任務的執行時間。

map/reduce不能解決所有問題,它適合在分布式環境中處理那些海量資料批處理計算程式,其計算模型主要分為兩階段:第一階段為map階段,輸出的是<key, value>pair對;再進行資料的shuffle和sort;然進入第二階段reduce階段,在這一階段就是對對的計算邏輯處理。但是它無法更好地完成要求更高的計算任務,例如圖計算中需要bsp迭代計算框架,要把上乙個map/reduce任務的輸出用於下乙個map/reduce任務的輸入;類似hive和pig的互動式有向圖計算。dag計算模型是針對map/reduce所遇問題而提出來的一種計算模型。下圖是map/reduce模型與dag模型的差別。

從圖中可以看出:當採用map/reduce模型,我們處理乙個大任務時需要四個map/reduce,那麼就需要四個小job來組合成乙個大job,這樣會多幾次的輸入輸出消耗。而採用tez,它們形成乙個大任務,這些子任務組合成一張dag圖,在資料的處理中間過程中,就沒有往hdfs裡面寫資料,而是直接向它的後繼節點輸出資料。

在其中一篇技術部落格hadoop yarn解決多類應用相容方法講到在yarn上如何相容各類應用的思路。在hadoop yarn上實現hama bsp計算應用博文中講解了如何在yarn上開發出乙個自己的應用。在這裡,我將著重講解在tez應用的**結構上,它是如何實現乙個dag計算模型。

從前面的博文中提到,對每個應用都需要去實現乙個yarnrunner類去提交c對應的job。在tez裡面,有乙個這樣的類org.apache.tez.mapreduce.yarnrunner。我們將以這個類為入口,講解tez的實現過程。

如下是tez yarnrunner提交任務的實現**。

@override

public jobstatus submitjob(jobid jobid, string jobsubmitdir, credentials ts)

throws ioexception, interruptedexception

// create inputs to tezclient.submit()

// fixme set up job resources

mapjoblocalresources =

createjoblocalresources(stageconfs[0], jobsubmitdir);

// fixme createdag should take the tezconf as a parameter, instead of using

// mr keys.

//建立它的乙個dag圖

dag dag = createdag(fs, jobid, stageconfs, jobsubmitdir, ts,

joblocalresources);

// submit to resourcemanager

try catch (tezexception e)

return getjobstatus(jobid);

}

上面的**之中可以看出,它需要為該任務構造乙個dag圖。下面是org.apache.tez.mapreduce.yarnrunner.createdag(filesystem, jobid, configuration, string, credentials, map)的原始碼實現。

private dag createdag(filesystem fs, jobid jobid, configuration stageconfs,

string jobsubmitdir, credentials ts,

mapjoblocalresources) throws ioexception

for (int i = 0; i < vertices.length; i++)

}return dag;

}

大任務的dag計算資訊都儲存在vertex和edge裡面。我們將在這裡詳細分析vertex和edge的關係。

string amqueuename, string amname, listamargs,

mapamenv, mapamlocalresources,

tezconfiguration amconf) throws ioexception, yarnexception finally

}// 省略localresources的配置資訊...

// setup containerlaunchcontext for am container

containerlaunchcontext amcontainer =

containerlaunchcontext.newinstance(localresources, environment,

vargsfinal, null, securitytokens, acls);

tezconfiguration.tez_am_cancel_delegation_token,

tezconfiguration.default_tez_am_cancel_delegation_token));

}  4. vertex & edge

《續》5. mapreduce

《續》

計算機視覺 單應性 Homography

在orb slam初始化的時候,作者提到,如果場景是平面,或者近似平面,或者低視差時,我們能應用單應性矩陣 homography 這三種情形在我應用svo的過程中頗有同感,打破了我對矩陣的固有映像,即只能用於平面或近似平面。但是我不知道如何去具體分析這裡面的誤差,比如不共面的情況時,應用矩陣將乙個影...

單應性矩陣Homography計算和優化

單應性矩陣,是用來描述兩個平面之間的變換關係,是乙個3x3的齊次矩陣。圖上的4個綠色的圈,兩兩可以對應,h可以表達第一張圖變換到第二張圖的轉換關係。具體的表示式 aa表示尺度資訊,h1 h9h 1 h 9 h1 h9 表示h hh矩陣,h hh矩陣有8個自由度,h9 1h 9 1 h9 1,所以只需...

雲計算開發應具備什麼知識?雲計算開發負責什麼工作?

雲計算的開發,基於雲計算的開發是兩個名詞,但是核心是 開發。雲計算的開發一般是雲計算廠商 或選擇自己研發雲計算的甲方 的工程師,主要是針對雲計算內產品的研發工作,聚焦在計算 網路 儲存 paas等層面。一般saas層的開發不稱自己是雲計算的開發。基於雲計算的開發,和一般的開發沒有什麼不一樣的地方,只...