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層的開發不稱自己是雲計算的開發。基於雲計算的開發,和一般的開發沒有什麼不一樣的地方,只...