2012-10-23 35 views
0

我有我想要使用分佈式緩存設施添加的文件的列表。不同的減少任務需要不同的文件。例如,reduce 1需要文件A,reduce 2需要文件B,以此類推。 在Job Conf中,這兩個文件都是使用DistributedCache.addCacheFile()方法添加的。 在reduce類配置方法中,我使用DistributedCache.getCacheFiles()來獲取文件。 是否有可能只有文件A在內存中減少1並且只有內存中的文件B爲減少2.或者在減少任務開始之前將這兩個文件添加到內存中。分佈式緩存Hadoop和可伸縮性

如果我明白這一點,我可以使用分佈式緩存爲我的程序。我關心的是可擴展性。這些文件很大。所以reduce任務不能在內存中擁有這兩個文件。但可以保存其中一個文件。

請幫忙!!!

感謝

+1

分佈式緩存不在內存中,它只是一個令人困惑的名稱,它將文件和jar一起復制到每個運行計算的主機。 –

+0

謝謝你指出。那麼,我們可以添加一個與節點的磁盤空間一樣大的文件嗎? –

+0

Reducer處理文件時,是否需要將整個文件保存在內存中? –

回答

0

返回緩存文件的方法,返回你所添加的順序緩存的所有文件名的數組。因此可以告訴reducer 1獲取數組[0]文件並減少2以獲取數組[1]文件。此緩存也建議不要有非常大的文件。

+0

感謝您的回覆!因此,無論分佈式緩存中添加的文件數量如何,減速器都可以選擇它想要的。我對麼?並且由於它將它複製到reduce節點,所以它將它複製到磁盤上,所以文件可以與節點的磁盤空間一樣大,對嗎? –

+0

Mapper/Reducer可以使用DistributedCache獲取緩存中的文件列表,並且它可以處理所需的文件。但是,Hadoop框架將捕獲的所有文件都複製到TaskTracker節點,而不管Mapper/Reducer是否使用該文件。 –

+0

謝謝!這真的清除了我的懷疑。我還有一個問題。由於它將文件複製到每個節點,因此複製的文件通過網絡傳輸(我想),如果文件很大或者節點很多,它會不會影響網絡性能? –