【问题标题】:How to dynamic change existing files' block size in Hadoop?如何在 Hadoop 中动态更改现有文件的块大小?
【发布时间】:2015-01-16 23:35:45
【问题描述】:

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

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

谢谢

【问题讨论】:

    标签: hadoop


    【解决方案1】:

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

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

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        试试这个:

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

        谢谢你, 赛

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-02-24
          • 1970-01-01
          • 2012-03-29
          • 1970-01-01
          • 2011-09-13
          • 2016-01-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多