2017-08-08 74 views
0

我有一個Hadoop作業需要很長時間才能初始化大量的輸入文件,而我不知道爲什麼。無論使用多少個文​​件,作業都會在幾秒鐘內找到所有節點和文件,但如果給定10,000個文件,則需要花費大量時間(分鐘)來確定分割數量。當我以不同的用戶身份執行作業時,作業幾乎可以立即確定分割數量。Hadoop Streaming MapReduce慢速查找文件

$ hadoop jar /usr/lib/hadoop-mapreduce/hadoop-streaming.jar -D 'mapreduce.job.name=...' 
packageJobJar: [] [/usr/lib/hadoop-mapreduce/hadoop-streaming-2.6.0-cdh5.11.0.jar] /tmp/streamjob4556879591438635545.jar tmpDir=null 
17/08/07 22:01:40 INFO client.RMProxy: Connecting to ResourceManager at jobtracker-dev.la.prod.factual.com/10.20.103.16:8032 
... 
17/08/07 22:01:41 INFO security.TokenCache: Got dt for hdfs://dev; Kind: HDFS_DELEGATION_TOKEN.... 
17/08/07 22:01:41 INFO lzo.GPLNativeCodeLoader: Loaded native gpl library 
17/08/07 22:01:41 INFO lzo.LzoCodec: Successfully loaded & initialized native-lzo library [hadoop-lzo rev 674c65bbf0f779edc3e00a00c953b121f1988fe1] 
17/08/07 22:01:41 INFO mapred.FileInputFormat: Total input paths to process : 10000 
17/08/07 22:01:41 INFO net.NetworkTopology: Adding a new node: /cs3/211/... 
17/08/07 22:01:41 INFO net.NetworkTopology: Adding a new node: /cs3/210/... 
... 
<LONG PAUSE> 
... 
17/08/07 22:31:39 INFO mapreduce.JobSubmitter: number of splits:10000 

這不是很多的信息,顯然,但沒有人有一個想法可能會發生什麼?

回答

1

花費的時間取決於如此多的參數,對於開始您可以特別檢查您的羣集容量和紗線配置。 如果你有10k的分割意味着AM與任務的協調需要花費大量的時間,記住hadoop是爲處理大文件而不是小{大數}文件處理的。 檢查你的hdfs塊的大小,以及你投入了多少。 確保您是分佈式模式,與您的數據節點建立無密碼連接。 對於具體「當我作爲一個不同的用戶運行作業時,作業幾乎立即確定拆分的數量」這不是HADOOP容量問題,請正確檢查您的配置。如果有足夠的預算,可以使用ambari來管理羣集。