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