Hadoop -getmerge如何工作?

mon*_*nic 6 hadoop hdfs hadoop-yarn hadoop2

在hadoop getmerge描述中

用法:hdfs dfs -getmerge src localdst [addnl]

我的问题是为什么getmerge连接到本地目的地为什么不是hdfs本身?问这个问题是因为我有以下问题

  1. 如果要合并的文件大于本地大小怎么办?
  2. 将hadoop -getmerge命令限制为仅连接到本地目的地是否有任何特定原因?

Man*_*lur 7

getmerge命令专门用于将文件从HDFS合并到本地文件系统上的单个文件中.

这个命令是非常有用的,下载的MapReduce作业的输出,这可能产生多个兼职*文件,并将它们合并成一个单一的本地文件,您可以使用其他操作(例如,把它放在一个Excel工作表的演示).

您的问题的答案:

  1. 如果目标文件系统没有足够的空间,则抛出IOException.在getmerge内部使用IOUtils.copyBytes()(见IOUtils.copyBytes() )函数将一个文件从HDFS本地文件一次复制.IOException只要复制操作中出现错误,此函数就会抛出.

  2. 此命令与命令类似,hdfs fs -get它将文件从HDFS获取到本地文件系统.唯一的区别是hdfs fs -getmerge将多个文件从HDFS合并到本地文件系统.

如果要在HDFS中合并多个文件,可以使用类中的copyMerge()方法实现它FileUtil(请参阅FileUtil.copyMerge()).

此API将目录中的所有文件复制到单个文件(合并所有源文件).

  • 是否有 -getmerge 的替代方案,可以将文件直接从 hdfs 合并到 hdfs? (2认同)