Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更改Hadoop中现有文件的块大小_Hadoop_Hdfs - Fatal编程技术网

更改Hadoop中现有文件的块大小

更改Hadoop中现有文件的块大小,hadoop,hdfs,Hadoop,Hdfs,考虑一个hadoop集群,hdfs site.xml中的默认块大小为64MB。但是,稍后团队决定将其更改为128MB。以下是我对上述场景的问题 此更改是否需要重新启动群集,或者将自动执行,并且所有新文件的默认块大小为128MB 块大小为64M的现有文件会发生什么情况?配置中的更改是否会自动应用于现有文件?如果它将自动完成,那么什么时候会完成?更改完成后还是集群启动后?如果不是自动完成,那么如何手动执行此块更改 正如你刚才提到的: 无论何时更改配置,都需要重新启动NameNode和DataNode

考虑一个hadoop集群,
hdfs site.xml
中的默认块大小为64MB。但是,稍后团队决定将其更改为128MB。以下是我对上述场景的问题

  • 此更改是否需要重新启动群集,或者将自动执行,并且所有新文件的默认块大小为128MB
  • 块大小为64M的现有文件会发生什么情况?配置中的更改是否会自动应用于现有文件?如果它将自动完成,那么什么时候会完成?更改完成后还是集群启动后?如果不是自动完成,那么如何手动执行此块更改
  • 正如你刚才提到的:

  • 无论何时更改配置,都需要重新启动NameNode和DataNodes,以便它们更改其行为
  • 不,不会的。它将保留旧文件上的旧块大小。为了使它接受新的块更改,您需要重写数据。您可以对数据执行hadoop fs-cp或distcp。新副本将具有新的块大小,您可以删除旧数据
  • 查看链接以了解更多信息

    此更改需要重新启动群集还是将被占用 自动,所有新文件的默认块大小为 128MB

    要使此属性更改生效,需要重新启动群集

    块大小为64M的现有文件会发生什么情况? 配置中的更改是否将应用于现有文件 自动地

    现有块不会更改其块大小

    如果不是自动完成,那么如何手动执行此块更改

    要更改现有文件,可以使用distcp。它将以新的块大小复制文件。但是,您必须手动删除具有较旧块大小的旧文件。这是一个您可以使用的命令

    hadoop distcp -Ddfs.block.size=XX /path/to/old/files /path/to/new/files/with/larger/block/sizes.
    

    在第1点上—在Hadoop 1.2.1上,更改hdfs-site.xml文件中的dfs.block.size后不需要重新启动。通过查看Hadoop管理页面,可以轻松验证文件块大小

    确保更改所有数据节点上的dfs.block.size