5

我有一个 Elastic Map Reduce 作业,它正在 S3 中编写一些文件,我想连接所有文件以生成一个唯一的文本文件。

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

反正有没有直接在S3上使用hadoop fs?

4

3 回答 3

1

一种简单的方法(如果您要生成适合主机的小文件)是执行以下操作:

  1. 将文件部分合并到本地计算机上的单个文件中(文档

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

    hadoop dfs -moveFromLocal [LOCAL FILE] s3n://bucket/key/of/file
    
于 2013-11-12T01:13:06.160 回答
1

实际上,这个关于 getmerge 的响应是不正确的。getmerge 需要一个本地目的地,并且不适用于 S3。IOException如果您尝试使用 -getmerge 进行响应,它会抛出一个错误:错误的 FS:。

用法:

hadoop fs [generic options] -getmerge [-nl] <src> <localdst>
于 2013-02-27T16:00:56.193 回答
0

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

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

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

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

于 2012-06-30T23:01:10.897 回答