我有一个 Elastic Map Reduce 作业,它正在 S3 中编写一些文件,我想连接所有文件以生成一个唯一的文本文件。
目前我正在手动将包含所有文件的文件夹复制到我们的 HDFS (hadoop fs copyFromLocal),然后我正在运行 hadoop fs -getmerge 和 hadoop fs copyToLocal 来获取文件。
反正有没有直接在S3上使用hadoop fs?
我有一个 Elastic Map Reduce 作业,它正在 S3 中编写一些文件,我想连接所有文件以生成一个唯一的文本文件。
目前我正在手动将包含所有文件的文件夹复制到我们的 HDFS (hadoop fs copyFromLocal),然后我正在运行 hadoop fs -getmerge 和 hadoop fs copyToLocal 来获取文件。
反正有没有直接在S3上使用hadoop fs?
实际上,这个关于 getmerge 的响应是不正确的。getmerge 需要一个本地目的地,并且不适用于 S3。IOException
如果您尝试使用 -getmerge 进行响应,它会抛出一个错误:错误的 FS:。
用法:
hadoop fs [generic options] -getmerge [-nl] <src> <localdst>
我自己没有亲自尝试过 getmerge 命令,但hadoop fs
EMR 集群节点上的命令支持 S3 路径,就像 HDFS 路径一样。例如,您可以通过 SSH 连接到集群的主节点并运行:
hadoop fs -ls s3://<my_bucket>/<my_dir>/
上述命令将列出指定目录路径下的所有 S3 对象。
我希望hadoop fs -getmerge
以同样的方式工作。因此,只需使用完整的 S3 路径(以 s3:// 开头)而不是 HDFS 路径。