這篇文章主要介紹“Hadoop測(cè)試方法有哪些”,在日常操作中,相信很多人在Hadoop測(cè)試方法有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Hadoop測(cè)試方法有哪些”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!
成都創(chuàng)新互聯(lián)公司是專業(yè)的龍里網(wǎng)站建設(shè)公司,龍里接單;提供成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作,網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行龍里網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!一、測(cè)試常見問題
1、reduce輸出文件,上傳文件,下載文件等操作的目的文件的刪除。
【現(xiàn)象】程序第一次運(yùn)行還是成功的,數(shù)據(jù)和程序都沒有修改,同樣的命令,運(yùn)行第二次的時(shí)候,怎么就失敗了呢?
【問題說明】由于hdfs文件系統(tǒng)沒有覆蓋寫的特性。對(duì)于reduce的輸出,本地上傳文件到hdfs上,下載hdfs文件到本地等操作,當(dāng)目的文件已經(jīng)存在,這些操作均會(huì)失敗。
【測(cè)試方法】對(duì)于具有上述操作的程序,一定要在程序運(yùn)行前把對(duì)應(yīng)的目的文件刪除,特別是具有多輪迭代程序的臨時(shí)目錄需要清楚。
2、HADOOP_HOME環(huán)境變量的設(shè)置
【現(xiàn)象】在自己獨(dú)自使用的測(cè)試機(jī)上,利用hadoop命令新建了一個(gè)目錄,并利用hadoop dfs –ls path命令能夠查看到該目錄存在,換到一個(gè)公用的機(jī)器上就找不到該目錄?
【問題說明】同一臺(tái)測(cè)試機(jī)器可能會(huì)有多個(gè)hadoop客戶端連接到多個(gè)不同的hadoop平臺(tái)。而當(dāng)在shell命令行直接輸入hadoop命令時(shí),系統(tǒng)默認(rèn)是使用HADOOP_HOME下的hadoop客戶端。當(dāng)HADOOP_HOME環(huán)境變量被別的用戶修改后,就會(huì)連接到別的hadoop平臺(tái),當(dāng)然就找不到所要的目錄:)。
【測(cè)試方法】當(dāng)在程序中使用hadoop命令的時(shí)候,一定要指定hadoop命令的路徑,特別在rd提供的程序中,hadoop命令的路徑一定要可配。
3、Hadoop上程序輸入目錄的標(biāo)準(zhǔn)化
【現(xiàn)象】程序的輸入數(shù)據(jù)完全沒問題:文件路徑和格式均正確,為什么結(jié)果文件都為空呢?
【問題說明】對(duì)于多路輸入(即多種格式的輸入文件),rd進(jìn)行設(shè)計(jì)程序的時(shí)候,常常會(huì)根據(jù)路徑名來進(jìn)行文件類型的判斷,進(jìn)而進(jìn)行不同的操作。此時(shí),當(dāng)外界輸入的路徑名沒有標(biāo)準(zhǔn)化(比如存在:./a/,/a//b,/a/./b),map階段通過比較傳遞的路徑參數(shù)和map環(huán)境變量獲取的當(dāng)前處理文件路徑來判斷當(dāng)前處理的文件塊來自哪個(gè)目錄,結(jié)果會(huì)判斷當(dāng)前處理的文件不來自任何輸入目錄,從而無法獲取輸入數(shù)據(jù)的類型。(當(dāng)時(shí)針對(duì)這個(gè)問題排查很久,曾一度認(rèn)為是hdfs的問題,最后通過查看程序源代碼才發(fā)現(xiàn)該問題)
【測(cè)試方法】出現(xiàn)該情況,首先查看該任務(wù)的監(jiān)控頁面: Map input records的輸入是否為0,若是為0,則需檢查輸入數(shù)據(jù)地址正確性。Map output records是否為0. Map output records代表map的輸出,若是為0,那么就是數(shù)據(jù)在map階段就被過濾掉,需要檢查輸入數(shù)據(jù)的格式正確性。然后查看Reduce input records是否為0,若rduece的輸入為0,那輸出肯定就為0了。
4、Hadoop副本任務(wù)對(duì)程序結(jié)果的影響
【現(xiàn)象】在reduce中生成的本地文件需要上傳到hdfs上。在上傳之前,為了避免目的文件存在而導(dǎo)致上傳失敗,需要先進(jìn)行刪除操作,然后再上傳。所有的reduce任務(wù)都正常結(jié)束,可是結(jié)果文件偶爾會(huì)有缺失。而且是不能穩(wěn)定復(fù)現(xiàn)。
【問題說明】hadoop運(yùn)行map,red任務(wù)的時(shí)候,為了防止單個(gè)task運(yùn)行緩慢,拖累整個(gè)任務(wù)的完成時(shí)間,會(huì)對(duì)一些task啟用備奮task,即多個(gè)task運(yùn)行同一份數(shù)據(jù),當(dāng)一個(gè)task運(yùn)行完成后,系統(tǒng)自動(dòng)kill掉備份task。這樣可能導(dǎo)致備份task被kill前,正確的文件上傳后,被備份任務(wù)刪除,導(dǎo)致最后結(jié)果文件的缺失。而該現(xiàn)象還不是穩(wěn)定復(fù)現(xiàn)。
【測(cè)試方法】對(duì)hdfs上的同一個(gè)文件,目錄進(jìn)行操作時(shí),一定要注意并行操作的干擾。特別當(dāng)在reduce中進(jìn)行hdfs操作的時(shí)候,一定要考慮到副本的影響(該問題比較隱蔽)。解決方案是:1,禁止平臺(tái)生成副本任務(wù)(可以配置啟動(dòng)參數(shù)達(dá)到目的)。2,在一個(gè)統(tǒng)一的單機(jī)進(jìn)行此類操作。比如,現(xiàn)在單機(jī)處理好環(huán)境,然后啟動(dòng)mapred任務(wù)。
5、Reduce數(shù)據(jù)分桶不均
【現(xiàn)象】通過查看任務(wù)的監(jiān)控頁面發(fā)現(xiàn)有的reduce運(yùn)行時(shí)間很短,而有的reduce運(yùn)行時(shí)間很長(zhǎng)。
【問題說明】既然利用hadoop的任務(wù),處理的數(shù)據(jù)一定是大數(shù)據(jù)量的。簡(jiǎn)單的hash映射分桶可能導(dǎo)致分桶不均,從而多個(gè)reduce處理的數(shù)據(jù)量差別很大。
【測(cè)試方法】當(dāng)前hadoop任務(wù)處理的數(shù)據(jù)很多都上T,若是在處理這么大規(guī)模的數(shù)據(jù),分桶不均,可能導(dǎo)致單個(gè)節(jié)點(diǎn)處理數(shù)據(jù)過大,導(dǎo)致性能降低,甚至可能導(dǎo)致內(nèi)存超過閾值被平臺(tái)kill。因此在測(cè)試之前,一定要弄清楚,分桶的key和分桶函數(shù)是否會(huì)造成分桶不均。
6、worker資源分配的指定
【現(xiàn)象】每個(gè)task運(yùn)行時(shí)間很短,集群資源很充足,可是任務(wù)運(yùn)行時(shí)間卻很長(zhǎng)。
【問題說明】當(dāng)處理的數(shù)據(jù)量很大時(shí),任務(wù)會(huì)被分成很多的task,而當(dāng)任務(wù)啟動(dòng)時(shí),集群默認(rèn)分配的worker會(huì)比較少,導(dǎo)致即使集群資源空閑,運(yùn)行該任務(wù)的worker數(shù)仍然很少,運(yùn)行結(jié)束時(shí)間延長(zhǎng)。
【測(cè)試方法】若是處理的數(shù)據(jù)很大,在任務(wù)啟動(dòng)的時(shí)候,一定要指定資源參數(shù),否則按照系統(tǒng)默認(rèn)值,分配的work會(huì)很少(在hy集群為50)。對(duì)于大數(shù)據(jù)量,該限制會(huì)大大降低性能。任務(wù)啟動(dòng)的時(shí)候,可以通過監(jiān)控頁面,查看該任務(wù)運(yùn)行的worker數(shù)。
7、單個(gè)worker內(nèi)存限制
【現(xiàn)象】小數(shù)據(jù)量,測(cè)試通過,可是運(yùn)行大數(shù)據(jù),任務(wù)總是被平臺(tái)kill。
【問題說明】現(xiàn)在hadoop平臺(tái)對(duì)每個(gè)task運(yùn)行時(shí)的內(nèi)存進(jìn)行了限制,默認(rèn)是800M,當(dāng)程序運(yùn)行內(nèi)存超過800M,平臺(tái)自動(dòng)會(huì)kill該任務(wù)
【測(cè)試方法】針對(duì)該點(diǎn)測(cè)試有2種方法:1,在集群運(yùn)行大數(shù)據(jù)量,被平臺(tái)kill后,查看日志,確認(rèn)是因?yàn)閮?nèi)存超出被平臺(tái)kill。2,在本地運(yùn)行mapred程序,查看程序內(nèi)存占用。若是在800M左右,上線就會(huì)有很大風(fēng)險(xiǎn)。
8、MPI程序?qū)adoop上文件目錄的操作
【現(xiàn)象】在mpi節(jié)點(diǎn)上對(duì)同一目錄上的文件進(jìn)行操作,偶爾會(huì)失敗。
【問題說明】該問題同Hadoop副本任務(wù)對(duì)程序結(jié)果的影響 原因一樣,都多個(gè)節(jié)點(diǎn)對(duì)hadoop上同一個(gè)文件的操作。只是一個(gè)是hadoop上,一個(gè)是mpi上。
【測(cè)試方法】多個(gè)地方對(duì)hdfs上的同一個(gè)文件或者目錄進(jìn)行操作。特別是同一個(gè)模塊即在hadoop,又在mpi集群上運(yùn)行。不要在每個(gè)mpi節(jié)點(diǎn)同時(shí)對(duì)同一個(gè)hadoop目錄或者文件進(jìn)行修改操作。
9、對(duì)于map reduce的運(yùn)行參數(shù)的設(shè)置
【現(xiàn)象】程序在本地就能執(zhí)行成功,可是在hadoop上卻無法運(yùn)行
【問題說明】有時(shí)候,map reduce的運(yùn)行參數(shù)比較長(zhǎng),為了閱讀方便,rd可能會(huì)對(duì)程序參數(shù)進(jìn)行折行,添加tab鍵排版,這樣反倒使hadoop上解析命令失敗。
【測(cè)試方法】對(duì)于map reduce的運(yùn)行參數(shù)比較長(zhǎng)的情況,可以督促rd用shell變量進(jìn)行設(shè)置。然后在hadoop程序啟動(dòng)參數(shù)用shell變量進(jìn)行替換。即閱讀方便,又不會(huì)出錯(cuò)。
10、Hadoop程序的結(jié)果使用的bistreaming的二進(jìn)制文件結(jié)果
【現(xiàn)象】程序結(jié)果文件是二進(jìn)制格式,可是下載到本地,按照詳細(xì)設(shè)計(jì)中描述的格式,解析格式總是錯(cuò)誤。
【問題說明】當(dāng)前流模式可以用streaming和bistreaming,當(dāng)使用bistreaming時(shí),生成的結(jié)果文件是hadoop的 sequence file文件格式,文件格式中含有key length和value length信息。在hadoop上使用該數(shù)據(jù)時(shí),這個(gè)格式對(duì)用戶是透明的。下載到本地后,就不能直接使用了。
【測(cè)試方法】當(dāng)任務(wù)的輸出outputformat=SequenceFileAsBinaryOutputFormat 時(shí),可以使用hadoop dfs -copySeqFileToLocal –ignoreLen命令,把二進(jìn)制數(shù)據(jù)下載到本地,并去掉長(zhǎng)度信息,就和文檔中寫的格式一致了。
11、Hadoop對(duì)于輸入文件的切分
【現(xiàn)象】輸入文件是基于session的query日志行,session之間空行分割。當(dāng)設(shè)置一個(gè)map的時(shí)候,程序結(jié)果正確,當(dāng)設(shè)置多個(gè)map時(shí),運(yùn)行結(jié)果錯(cuò)誤。
【問題說明】hadoop對(duì)于輸入文件會(huì)以行為最小單元切分,因此,當(dāng)輸入以空行為分割,有二次數(shù)據(jù)格式的時(shí)候,hadoop無法保證不把一個(gè)session切到兩個(gè)map task中。這樣就把一個(gè)session拆分為多個(gè)session了。
【測(cè)試方法】當(dāng)程序?qū)崿F(xiàn)邏輯依賴于比行粒度更大的單元時(shí),需要設(shè)置map的切分大小比單個(gè)輸入文件大,否則就回出現(xiàn)把輸入文件切分成多個(gè)map輸入,導(dǎo)致切斷更大的輸入單元。
二、常用測(cè)試方法
1、跨集群拷貝或者大數(shù)據(jù)量集群內(nèi)拷貝
在測(cè)試過程中,可能需要從摸個(gè)集群或者某個(gè)目錄拷貝大量測(cè)試數(shù)據(jù),若是先把數(shù)據(jù)拷貝到本地,在上傳到目的集群,將會(huì)非常的耗時(shí)間,這時(shí),可以考慮用distcp命令。
DistCp(分布式拷貝)是用于大規(guī)模集群內(nèi)部和集群之間拷貝的工具。它使用Map/Reduce實(shí)現(xiàn)文件分發(fā),錯(cuò)誤處理和恢復(fù),以及報(bào)告生成。 它把文件和目錄的列表作為map任務(wù)的輸入,每個(gè)任務(wù)會(huì)完成源列表中部分文件的拷貝。
hadoop distcp hdfs://nn1:8020/foo/bar hdfs://nn2:8020/bar/foo這條命令會(huì)把nn1集群的/foo/bar目錄下的所有文件或目錄名展開并存儲(chǔ)到一個(gè)臨時(shí)文件中,這些文件內(nèi)容的拷貝工作被分配給多個(gè)map任務(wù), 然后每個(gè)TaskTracker分別執(zhí)行從nn1到nn2的拷貝操作。注意DistCp使用絕對(duì)路徑進(jìn)行操作。
由于distcp無法指定兩個(gè)用戶名和密碼,因此,拷貝的源和目的集群的用戶名和密碼必須一致,且該用戶名密碼在源集群具有讀權(quán)限,在目的集群具有寫權(quán)限。
2、單機(jī)模擬分布式測(cè)試功能點(diǎn)
在測(cè)試部分功能點(diǎn)時(shí)或者內(nèi)存不超過800M的性能時(shí),可能會(huì)考慮到先用單機(jī)模擬分布式上運(yùn)行進(jìn)行測(cè)試:
cat input | mapper | sort | reducer > output
在用單機(jī)模擬分布式測(cè)試時(shí),有以下注意點(diǎn):
1)Streaming的輸入是按行劃分的文本,可以使用cat input即可;但是BiStreaming是“
cat input | ./ reader |./mapper |./ reducer >output
reader程序負(fù)責(zé)將文件轉(zhuǎn)化為mapper程序能夠識(shí)別的keyLength, key, valueLength, value的二進(jìn)制格式。當(dāng)輸入已經(jīng)是sequencefile格式時(shí),也不需要reader。
2)當(dāng)Mapper或Reducer中使用到hadoop的環(huán)境變量時(shí),單機(jī)模擬時(shí),需要先修改這些環(huán)境變量或者在運(yùn)行時(shí)設(shè)置這些環(huán)境變量的值。
3、分布式程序和單機(jī)程序結(jié)果的對(duì)比
在校驗(yàn)分布式程序結(jié)果時(shí),我們常常使用的方法是,實(shí)現(xiàn)一個(gè)單機(jī)版的程序,然后diff單機(jī)版和分布式版本的運(yùn)行結(jié)果。
由于hadoop對(duì)于輸入文件的切分,以及map后的reduce分桶。在和單機(jī)版做結(jié)果對(duì)比時(shí),需要考慮到輸入行亂序?qū)τ诮Y(jié)果的影響。若輸入行的亂序?qū)Y(jié)果的正確性沒有影響。那在做分布式的結(jié)果和本地單機(jī)模擬的結(jié)果diff時(shí),一定要先sort,然后在diff。
4、總控腳本的測(cè)試
分布式程序雖然以map-reduce程序?yàn)橹黧w,但每一輪map-reduce任務(wù)都是在單機(jī)用腳本進(jìn)行任務(wù)提交和啟動(dòng),大多數(shù)項(xiàng)目都包含多輪map-reduce 任務(wù)。因此,各輪任務(wù)之間的調(diào)度協(xié)調(diào)和項(xiàng)目的系統(tǒng)運(yùn)行就需要總控腳本來完成。
在測(cè)試總控腳本的時(shí)候,用-x參數(shù)運(yùn)行,并把運(yùn)行l(wèi)og重定向到輸出文件。運(yùn)行介紹后,即使結(jié)果正確,也需要看看運(yùn)行腳本的log,很可能發(fā)現(xiàn)一些意想不到的問題。
到此,關(guān)于“Hadoop測(cè)試方法有哪些”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!