val myRdd = sc.textFile("s3n://myBucket/myFile1.log") lyrics: -6ren">
gpt4 book ai didi

java - Spark 使用 sc.textFile ("s3n ://. ..) 从 S3 读取文件

转载 作者:太空宇宙 更新时间:2023-11-03 12:04:10 24 4
gpt4 key购买 nike

尝试使用 spark-shell 读取位于 S3 中的文件:

scala> val myRdd = sc.textFile("s3n://myBucket/myFile1.log")
lyrics: org.apache.spark.rdd.RDD[String] = s3n://myBucket/myFile1.log MappedRDD[55] at textFile at <console>:12

scala> myRdd.count
java.io.IOException: No FileSystem for scheme: s3n
at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2607)
at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2614)
at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:91)
... etc ...

IOException: No FileSystem for scheme: s3n error occurred with:

  • 开发机器上的 Spark 1.31 或 1.40(无 Hadoop 库)
  • Hortonworks Sandbox HDP v2.2.4 运行(Hadoop 2.60) 开箱即用地集成了 Spark 1.2.1
  • 使用 s3://或 s3n://方案

这个错误的原因是什么?缺少依赖项、缺少配置或误用 sc.textFile()

或者这可能是由于影响特定于 Hadoop 2.60 的 Spark 构建的错误造成的 post似乎暗示。我将尝试使用 Spark for Hadoop 2.40 看看是否可以解决问题。

最佳答案

确认这与针对 Hadoop 2.60 的 Spark 构建有关。刚刚安装Spark 1.4.0 "Pre built for Hadoop 2.4 and later" (而不是 Hadoop 2.6)。现在代码可以正常工作了。

sc.textFile("s3n://bucketname/Filename") 现在引发另一个错误:

java.lang.IllegalArgumentException: AWS Access Key ID and Secret Access Key must be specified as the username or password (respectively) of a s3n URL, or by setting the fs.s3n.awsAccessKeyId or fs.s3n.awsSecretAccessKey properties (respectively).

下面的代码使用了 S3 URL 格式来表示 Spark 可以读取 S3 文件。使用开发机器(无 Hadoop 库)。

scala> val lyrics = sc.textFile("s3n://MyAccessKeyID:MySecretKey@zpub01/SafeAndSound_Lyrics.txt")
lyrics: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[3] at textFile at <console>:21

scala> lyrics.count
res1: Long = 9

甚至更好:如果 AWS key 有前向“/”,则上述在 S3N URI 中内联 AWS 凭据的代码将会中断。在 SparkContext 中配置 AWS Credentials 将修复它。无论 S3 文件是公共(public)文件还是私有(private)文件,代码都有效。

sc.hadoopConfiguration.set("fs.s3n.awsAccessKeyId", "BLABLA")
sc.hadoopConfiguration.set("fs.s3n.awsSecretAccessKey", "....") // can contain "/"
val myRDD = sc.textFile("s3n://myBucket/MyFilePattern")
myRDD.count

关于java - Spark 使用 sc.textFile ("s3n ://. ..) 从 S3 读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37649594/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com