如果我在amazonweb服务上运行emr作业(用java)来处理大量数据,那么是否有可能让每个Map器都访问存储在s3上的一个小文件?请注意,我所说的小文件不是Map器的输入。相反,Map程序需要根据小文件中的一些规则来处理输入。例如,可能大的输入文件是一个十亿行的文本,我想通过读取存储在s3 bucket中的一个小的黑名单单词文件来过滤掉黑名单中的单词。在这种情况下,每个Map器将处理输入数据的不同部分,但它们都需要访问s3上的受限字文件。如何让Map器在java中实现这一点?
编辑:我没有使用hadoop框架,因此没有setup()或map()方法调用。我只是简单地使用流式emr服务,从输入文件中逐行读取stdin。
1条答案
按热度按时间frebpwbc1#
可以直接使用s3协议访问Map器中的任何s3对象。例如s3://mybucket/pat/to/file.txt
http://docs.aws.amazon.com/elasticmapreduce/latest/developerguide/emr-plan-file-systems.html .
实际上,您可以使用s3来访问Map器的输入文件以及您想使用的任何临时查找文件。以前,它们的区别在于使用s3n://协议来使用s3对象,使用s3bfs://来进行块存储。现在您不必区分,只需使用s3://
或者,您可以在emr集群中使用s3distcp步骤来复制文件,并使其在hdfs中可用(这不是你问的问题,而是……)http://docs.aws.amazon.com/elasticmapreduce/latest/developerguide/usingemr_s3distcp.html