代码之家  ›  专栏  ›  技术社区  ›  Water

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

  •  0
  • Water  · 技术社区  · 11 年前

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

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

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

    s3n://<bucket-name>/path
    

    在代码中,这行吗?

    谢谢

    2 回复  |  直到 11 年前
        1
  •  1
  •   user1452132    11 年前

    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-copy作为引导步骤,在Map步骤开始之前将S3文件复制到HDFS。 http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/UsingEMR_s3distcp.html

        2
  •  0
  •   Water    9 年前

    我最终做了什么:

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

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

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

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

    推荐文章