我有一個Hadoop集羣正在運行。我使用Hadoop API在Hadoop中創建文件。 例如使用:create(Path f,boolean overwrite,int bufferSize,short replication,long blockSize,Progressable progress)。如何在Hadoop中動態更改現有文件的塊大小?
我想知道如何在文件創建後更改文件的塊大小?使用命令或任何API或任何其他方法? 因爲我找不到在API中更改塊大小的功能。
感謝
我有一個Hadoop集羣正在運行。我使用Hadoop API在Hadoop中創建文件。 例如使用:create(Path f,boolean overwrite,int bufferSize,short replication,long blockSize,Progressable progress)。如何在Hadoop中動態更改現有文件的塊大小?
我想知道如何在文件創建後更改文件的塊大小?使用命令或任何API或任何其他方法? 因爲我找不到在API中更改塊大小的功能。
感謝
我不知道,也沒有找到一種方法來動態改變使用API的單個文件的塊大小。 有多種方法可以更改HDFS上存儲的文件的塊大小。
除了使用create
函數和指定一個不同的塊大小,他們圍繞着改變HDFS存儲的默認塊大小。
最這兩個最基本的方式來使用改變默認的塊大小:
使用API可以實現相同的想法。將文件複製到本地驅動器,刪除HDFS文件,然後使用API使用所需塊大小的本地副本創建文件。
我可以推測爲什麼這還沒有實施;雖然它可以簡化這一點,但它可能並不經常需要。爲了實現這一點,文件需要重新組裝,然後根據新的大小重新阻塞。在一個非常大的文件中,這可能會使網絡飽和,因爲所有數據都可能會多次通過網絡。
我不知道hadoop的詳細信息足以確切知道在API中實現此功能時可能存在哪些不足,但我可以看到有幾個爭用點可能會在實現更大需求時停止執行。
心連心
我不知道如果一旦該文件已被寫入到HDFS塊的大小可以動態改變。一個解決方法是將文件從HDFS中取出並將其放回到所需的塊大小。請參閱email from Allen關於如何操作。
試試這個:
HDFS DFS -D dfs.blocksize = [您的塊大小] -put [您的文件/目錄名] [目的地文件/目錄]
謝謝, Sai