2012-06-29 29 views
5

我有一个Elastic Map Reduce作业,它正在S3中编写一些文件,我想连接所有文件以生成唯一的文本文件。可以在S3中运行hadoop fs -getmerge吗?

目前我手动将所有文件的文件夹复制到我们的HDFS(hadoop fs copyFromLocal),然后我运行hadoop fs -getmerge和hadoop fs copyToLocal来获取文件。

是否有直接在S3上使用hadoop fs?

回答

1

实际上,关于getmerge的这个回应是不正确的。 getmerge需要一个本地目标,并且不能与S3一起使用。它会抛出一个IOException如果您尝试并用-getmerge:Wrong FS:做出响应。

用法:

hadoop fs [generic options] -getmerge [-nl] <src> <localdst> 
0

我自己没有亲自尝试过getmerge命令,但EMR集群节点上的hadoop fs命令支持像HDFS路径一样的S3路径。例如,您可以SSH到群集的主节点和运行:

hadoop fs -ls s3://<my_bucket>/<my_dir>/ 

上面的命令将列出了指定的目录路径下的所有S3对象。

我希望hadoop fs -getmerge以同样的方式工作。因此,只需使用完整的S3路径(以s3://开头)而不是HDFS路径。

+0

'Hadoop的FS -getmerge'只能合并到本地文件系统,而不是S3 – justderb

1

一个简单的方法(如果要生成一个适合主计算机上的小文件)是做到以下几点:

  1. 合并的文件部分成单个文件到本地机器(Documentation

    hadoop fs -getmerge hdfs://[FILE] [LOCAL FILE] 
    
  2. 复制结果文件到S3,然后删除本地文件Documentation

    hadoop dfs -moveFromLocal [LOCAL FILE] s3n://bucket/key/of/file 
    
相关问题