如何在Hadoop中动态更改现有文件的块大小?

时间:2011-09-06 13:23:07

标签: hadoop

我正在运行Hadoop集群。我使用Hadoop API在Hadoop中创建文件。 例如,使用:create(Path f,boolean overwrite,int bufferSize,short replication,long blockSize,Progressable progress)。

我想知道如何在创建文件后更改文件的块大小?使用命令或任何API或任何其他方法? 因为我找不到用于更改API中的块大小的函数。

由于

3 个答案:

答案 0 :(得分:3)

我不知道,也没有找到使用API​​动态更改单个文件的块大小的方法。 有多种方法可以更改存储在HDFS上的文件的块大小。

除了使用create函数并指定不同的块大小外,它们还会围绕更改HDFS存储的默认块大小。

使用更改的默认块大小的最基本的两种方法:

  • 在本地复制文件;删除HDFS文件;上传文件
  • 将文件复制到HDFS上的新位置/名称;删除初始文件;将文件移动/重命名为原始位置/名称

可以使用API​​完成相同的想法。将文件复制到本地驱动器,删除HDFS文件,然后使用API​​使用具有所需块大小的本地副本创建文件。

我可以猜测为什么还没有实现呢;虽然它会简化这一点,但可能不需要太频繁。要实现这一点,需要“重新组装”文件,然后根据新大小重新阻止。在一个非常大的文件上,这可能会使网络饱和,因为所有数据都可能会多次在网络中传播。

我不知道hadoop的详细信息足以确切知道在API中实现此功能可能存在哪些缺陷,但我可以看到一些争论点可能会阻碍实现,同时解决更大的需求。

HTH

答案 1 :(得分:2)

我不确定文件写入HDFS后是否可以动态更改块大小。一个解决方法是将文件从HDFS中取出,然后使用所需的块大小再次将其放回原处。请参阅email from Allen了解如何操作。

答案 2 :(得分:1)

试试这个:

hdfs dfs -D dfs.blocksize = [你的块大小] -put [你的文件/目录名] [dest file / dir]

谢谢你, 西