Hadoop -getmerge如何运作?

时间:2016-04-15 06:51:38

标签: hadoop hdfs yarn hadoop2

在hadoop getmerge描述中

  

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

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

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

1 个答案:

答案 0 :(得分:7)

{J} {1}}命令专门用于将文件从HDFS合并到本地文件系统上的单个文件中。

此命令对于下载MapReduce作业的输出非常有用,该作业可以生成多个part- *文件并将它们组合到本地的单个文件中,您可以将其用于其他操作(例如,将其放在Excel中)表格)。

您的问题的答案:

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

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

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

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