在hadoop getmerge description中用法:hdfs dfs-getmerge src localdst[addnl]我的问题是为什么getmerge连接到本地目的地为什么不连接hdfs本身?问这个问题是因为我有以下问题如果要合并的文件超过本地文件的大小怎么办?将hadoop-getmerge命令限制为只连接到本地目的地有什么具体原因吗?
lmyy7pcs1#
这个 getmerge 命令是专门为将hdfs中的文件合并到本地文件系统上的单个文件而创建的。此命令对于下载mapreduce作业的输出非常有用,该作业可能已生成多个part-*文件,并在本地将它们合并到一个文件中,您可以将其用于其他操作(例如,将其放入excel工作表中进行演示)。回答您的问题:如果目标文件系统没有足够的空间,则抛出ioexception。这个 getmerge 内部使用 IOUtils.copyBytes() (请参阅ioutils.copybytes())函数一次将一个文件从hdfs复制到本地文件。此函数引发 IOException 当复制操作出错时。此命令与 hdfs fs -get 将文件从hdfs获取到本地文件系统的命令。唯一的区别是 hdfs fs -getmerge 将多个文件从hdfs合并到本地文件系统。如果要在hdfs中合并多个文件,可以使用 copyMerge() 方法来自 FileUtil 类(请参见fileutil.copymerge())。此api将目录中的所有文件复制到单个文件(合并所有源文件)。
getmerge
IOUtils.copyBytes()
IOException
hdfs fs -get
hdfs fs -getmerge
copyMerge()
FileUtil
1条答案
按热度按时间lmyy7pcs1#
这个
getmerge
命令是专门为将hdfs中的文件合并到本地文件系统上的单个文件而创建的。此命令对于下载mapreduce作业的输出非常有用,该作业可能已生成多个part-*文件,并在本地将它们合并到一个文件中,您可以将其用于其他操作(例如,将其放入excel工作表中进行演示)。
回答您的问题:
如果目标文件系统没有足够的空间,则抛出ioexception。这个
getmerge
内部使用IOUtils.copyBytes()
(请参阅ioutils.copybytes())函数一次将一个文件从hdfs复制到本地文件。此函数引发IOException
当复制操作出错时。此命令与
hdfs fs -get
将文件从hdfs获取到本地文件系统的命令。唯一的区别是hdfs fs -getmerge
将多个文件从hdfs合并到本地文件系统。如果要在hdfs中合并多个文件,可以使用
copyMerge()
方法来自FileUtil
类(请参见fileutil.copymerge())。此api将目录中的所有文件复制到单个文件(合并所有源文件)。