如果我在 Amazon Web Services 上运行 EMR 作业(使用 Java)来处理大量数据,是否可以让每个映射器访问存储在 S3 上的小文件?请注意,我所说的小文件不是映射器的输入。相反,映射器需要根据小文件中的一些规则来处理输入。例如,也许大输入文件是十亿行文本,我想通过读取存储在 S3 存储桶中的黑名单单词的小文件来过滤掉黑名单中的单词或其他东西。在这种情况下,每个映射器将处理输入数据的不同部分,但它们都需要访问 S3 上的受限单词文件。如何让映射器在 Java 中执行此操作?
编辑:我没有使用 Hadoop 框架,所以没有 setup() 或 map() 方法调用。我只是使用流式 EMR 服务并从输入文件中逐行读取标准输入。
最佳答案
您可以直接使用 S3 协议(protocol)访问映射器中的任何 S3 对象。例如。 s3://mybucket/pat/to/file.txt
http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-plan-file-systems.html .
您实际上可以使用 S3 访问映射器的输入文件以及您想使用的任何临时查找文件。以前,这些通过使用 s3n://协议(protocol)来区分 s3 对象使用和 s3bfs://用于 block 存储。现在您不必区分,只需使用 s3://
或者,您可以在 EMR 集群中执行 s3distcp 步骤来复制文件 - 并使其在 hdfs 中可用。 (这不是你问的,但是..)http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/UsingEMR_s3distcp.html
关于java - 如何从 Amazon elastic map reduce 中的映射器访问文件内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28976556/