我正在运行Hadoop集群。我使用Hadoop API在Hadoop中创建文件。 例如,使用:create(Path f,boolean overwrite,int bufferSize,short replication,long blockSize,Progressable progress)。
我想知道如何在创建文件后更改文件的块大小?使用命令或任何API或任何其他方法? 因为我找不到用于更改API中的块大小的函数。
由于
答案 0 :(得分:3)
我不知道,也没有找到使用API动态更改单个文件的块大小的方法。 有多种方法可以更改存储在HDFS上的文件的块大小。
除了使用create
函数并指定不同的块大小外,它们还会围绕更改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]
谢谢你, 西