2011-09-06 30 views
2

我有一個Hadoop集羣正在運行。我使用Hadoop API在Hadoop中創建文件。 例如使用:create(Path f,boolean overwrite,int bufferSize,short replication,long blockSize,Progressable progress)。如何在Hadoop中動態更改現有文件的塊大小?

我想知道如何在文件創建後更改文件的塊大小?使用命令或任何API或任何其他方法? 因爲我找不到在API中更改塊大小的功能。

感謝

回答

3

我不知道,也沒有找到一種方法來動態改變使用API​​的單個文件的塊大小。 有多種方法可以更改HDFS上存儲的文件的塊大小。

除了使用create函數和指定一個不同的塊大小,他們圍繞着改變HDFS存儲的默認塊大小。

最這兩個最基本的方式來使用改變默認的塊大小:

  • 本地複製文件;刪除HDFS文件;上傳文件
  • 將文件複製到HDFS上的新位置/名稱;刪除初始文件;將文件移動/重命名爲原始位置/名稱

使用API​​可以實現相同的想法。將文件複製到本地驅動器,刪除HDFS文件,然後使用API​​使用所需塊大小的本地副本創建文件。

我可以推測爲什麼這還沒有實施;雖然它可以簡化這一點,但它可能並不經常需要。爲了實現這一點,文件需要重新組裝,然後根據新的大小重新阻塞。在一個非常大的文件中,這可能會使網絡飽和,因爲所有數據都可能會多次通過網絡。

我不知道hadoop的詳細信息足以確切知道在API中實現此功能時可能存在哪些不足,但我可以看到有幾個爭用點可能會在實現更大需求時停止執行。

心連心

2

我不知道如果一旦該文件已被寫入到HDFS塊的大小可以動態改變。一個解決方法是將文件從HDFS中取出並將其放回到所需的塊大小。請參閱email from Allen關於如何操作。

1

試試這個:

HDFS DFS -D dfs.blocksize = [您的塊大小] -put [您的文件/目錄名] [目的地文件/目錄]

謝謝, Sai