溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

0588-6.1.0-命令行動(dòng)態(tài)指定MapReduce運(yùn)行參數(shù)無(wú)效的問(wèn)題分析

發(fā)布時(shí)間:2021-11-11 16:58:40 來(lái)源:億速云 閱讀:140 作者:柒染 欄目:大數(shù)據(jù)

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)0588-6.1.0-命令行動(dòng)態(tài)指定MapReduce運(yùn)行參數(shù)無(wú)效的問(wèn)題分析,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

1

文檔編寫目的

在本地完成MapReduce程序的開發(fā)后,打包提交到服務(wù)器上,然后在命令行使用hadoop jar命令運(yùn)行,并在運(yùn)行時(shí)動(dòng)態(tài)的指定參數(shù)(如:Map和Reduce的內(nèi)、資源池等參數(shù))。通過(guò)在命令行添加“-D mapreduce.job.queuename=資源池名”的方式來(lái)指定。本篇文章Fayson主要講述動(dòng)態(tài)指定MapReduce作業(yè)參數(shù)無(wú)效問(wèn)題分析。

2

問(wèn)題描述

Cloudera Manager上資源池放置規(guī)則如下:放置規(guī)則第一條指定的池不存在時(shí),則自動(dòng)創(chuàng)建。

0588-6.1.0-命令行動(dòng)態(tài)指定MapReduce運(yùn)行參數(shù)無(wú)效的問(wèn)題分析

在命令行執(zhí)行如下命令,指定作業(yè)到root.test資源池下:

hadoop jar xxx.jar -D mapreduce.job.queuename=root.test

0588-6.1.0-命令行動(dòng)態(tài)指定MapReduce運(yùn)行參數(shù)無(wú)效的問(wèn)題分析

通過(guò)上圖可以看到,MapReduce作業(yè)并未運(yùn)行在指定的資源池。

3

問(wèn)題分析

在同一用戶下,執(zhí)行了Hadoop自帶的jar,使用同樣的方式動(dòng)態(tài)指定資源池,發(fā)現(xiàn)任務(wù)跑在了指定的資源池下

0588-6.1.0-命令行動(dòng)態(tài)指定MapReduce運(yùn)行參數(shù)無(wú)效的問(wèn)題分析

經(jīng)上述測(cè)試推測(cè)可能是自己開發(fā)的MapReduce代碼的問(wèn)題,通過(guò)對(duì)比Hadoop自帶的示例代碼發(fā)現(xiàn),Hadoop的示例代碼中繼承了Configured類并實(shí)現(xiàn)了Tool接口。而自己寫的MapReduce代碼如下未繼承和實(shí)現(xiàn)Hadoop的類。

0588-6.1.0-命令行動(dòng)態(tài)指定MapReduce運(yùn)行參數(shù)無(wú)效的問(wèn)題分析

4

問(wèn)題解決

在MapReduce代碼中添加Configured類的繼承并實(shí)現(xiàn)了Tool接口。修改后的代碼如下:

0588-6.1.0-命令行動(dòng)態(tài)指定MapReduce運(yùn)行參數(shù)無(wú)效的問(wèn)題分析

修改啟動(dòng)類后,再將程序重新打包,運(yùn)行時(shí)指定參數(shù)如下:

0588-6.1.0-命令行動(dòng)態(tài)指定MapReduce運(yùn)行參數(shù)無(wú)效的問(wèn)題分析

發(fā)現(xiàn)任務(wù)成功運(yùn)行在指定的資源池下:

0588-6.1.0-命令行動(dòng)態(tài)指定MapReduce運(yùn)行參數(shù)無(wú)效的問(wèn)題分析

關(guān)于ToolRunner接口的說(shuō)明:

為什么實(shí)現(xiàn)Tool后,動(dòng)態(tài)參數(shù)就能生效呢?說(shuō)到Tool,就不得不提到一個(gè)類GenericOptionsParser。該類是Hadoop框架中解析命令行參數(shù)的基本類。它能夠解析命令行參數(shù),讓程序運(yùn)行時(shí)能夠動(dòng)態(tài)的指定一些資源上的配置。在上面的代碼中可以看到,在main方法中調(diào)用了ToolRunner類的run方法。ToolRunner類中的run方法內(nèi)使用了GenericOptionsParser類來(lái)解析命令行參數(shù),最終ToolRunner類的run方法里調(diào)用的還是MrDriver類中重寫的run方法。見下圖源碼:

0588-6.1.0-命令行動(dòng)態(tài)指定MapReduce運(yùn)行參數(shù)無(wú)效的問(wèn)題分析

0588-6.1.0-命令行動(dòng)態(tài)指定MapReduce運(yùn)行參數(shù)無(wú)效的問(wèn)題分析

ToolRunner.run方法的參數(shù)中看到,傳入的tool參數(shù)就是我們自己編寫的MrDriver類,所以ToolRunner類最終調(diào)用了我們自己重寫的run方法,并且通過(guò)GenericOptionsParser解析命令行參數(shù)后將解析的參數(shù)Set到Configuration對(duì)象中,最終調(diào)用MrDriver.run方法實(shí)現(xiàn)作業(yè)運(yùn)行參數(shù)的動(dòng)態(tài)指定。

5

總結(jié)

1.在寫MapReduce程序時(shí),應(yīng)繼承Configured類并實(shí)現(xiàn)Tool接口,這樣在運(yùn)行jar包時(shí)可以動(dòng)態(tài)的指定參數(shù),比在代碼中硬編碼要靈活很多。

2.當(dāng)有的參數(shù)需要修改時(shí),也不用重新對(duì)代碼進(jìn)行打包、編譯、部署等操作。

3.不單是資源池相關(guān)參數(shù)的指定,實(shí)現(xiàn)Tool后,配置文件中的其他參數(shù)也可以在命令行動(dòng)態(tài)的指定,但一定要注意配置參數(shù)不能寫錯(cuò)否則不生效。

上述就是小編為大家分享的0588-6.1.0-命令行動(dòng)態(tài)指定MapReduce運(yùn)行參數(shù)無(wú)效的問(wèn)題分析了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI