在EMR映射器内使用S3中的数据

时间:2014-08-25 08:42:29

标签: amazon-s3 emr amazon-emr

我需要在地图阶段访问一些数据。它是一个静态文件,我需要从中读取一些数据。

我已将数据文件上传到S3。

如何在EMR中运行作业时访问该数据?
如果我只是将文件路径指定为:

s3n://<bucket-name>/path
代码中的

会起作用吗?

谢谢

2 个答案:

答案 0 :(得分:1)

S3n:// url用于Hadoop读取s3文件。如果要在地图程序中读取s3文件,则需要使用处理s3:// URL格式的库(例如jets3t - https://jets3t.s3.amazonaws.com/toolkit/toolkit.html)或通过HTTP访问S3对象。

快速搜索示例程序会显示此链接。 https://gist.github.com/lucastex/917988

您还可以通过HTTP或HTTPS访问S3对象。这可能需要公开对象或配置其他安全性。然后,您可以使用java本身支持的HTTP url包访问它。

另一个不错的选择是使用s3dist副本作为引导步骤,在Map步骤开始之前将S3文件复制到HDFS。 http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/UsingEMR_s3distcp.html

答案 1 :(得分:0)

我最终做了什么:

1)写了一个小文件,将我的文件从s3复制到集群

hadoop fs -copyToLocal s3n://$SOURCE_S3_BUCKET/path/file.txt  $DESTINATION_DIR_ON_HOST

2)为我的EMR作业创建了引导步骤,该步骤在1)中运行脚本。

这种方法并不需要公开S3数据。