繁体   English   中英

如何在不使用 spark 的情况下从 AWS EMR 内部读取 S3 存储桶中的文本文件

[英]How to read a text file in S3 bucket from inside an AWS EMR without using spark

我需要从 EMR 集群打开位于 S3 存储桶中的常规文本文件(不是镶木地板或 CSV 文件)。 我可以使用spark.read.parquet("s3://mybucket/some_parq_file")直接打开 CSV 或 parquet 文件

But I need to read just a regular text file from EMR cluster using java.io.File or scala.io.Source . 当我尝试时得到一个 java.io.FileNotFoundException

import scala.io.Source
val hdr = "s3://mybucket/txtfile.txt"
for (line <- Source.fromFile(hdr).getLines) {
    println(line)
}
  1. 您可以提供引导脚本,当 EMR 出现并且引导脚本(.sh 文件)可以访问 s3 文件时(我已经多次使用过)
  2. 您可以提交 EMR 步骤,执行 jar 文件,jar 可以访问 s3

我猜大多数 AWS 设置已经使用默认凭证链和默认区域提供商链在您的 EMR 集群中配置了凭证。 这也应该适用于 AWS Lambda。 因此,要从 EMR 集群访问我的 S3 存储桶,我只需要使用 AWSS3ClientBuilder

import com.amazonaws.services.s3.AmazonS3ClientBuilder
import java.io.File
import java.nio.file.{Files, StandardCopyOption}

val bucket ="s3_bucket"
val file_in_s3 = "somefile.txt"
val dest = "/tmp/local_file.txt"
val s3 = AmazonS3ClientBuilder.defaultClient()
val stream = s3.getObject(bucket, file_in_s3).getObjectContent

Files.copy(stream, new File(dest).toPath, StandardCopyOption.REPLACE_EXISTING)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM