为了账号安全,请及时绑定邮箱和手机立即绑定

使用sc.textFile(“ s3n://…)从S3 Spark读取文件

使用sc.textFile(“ s3n://…)从S3 Spark读取文件

尝试使用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>:12scala> myRdd.countjava.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异常:没有文件系统的方案:S3N与发生错误:开发机上的Spark 1.31或1.40(无Hadoop库)从Hortonworks Sandbox HDP v2.2.4(Hadoop 2.60)运行,该现成的集成了Spark 1.2.1使用s3://或s3n://方案此错误的原因是什么?缺少依存关系,缺少配置或滥用sc.textFile()?或者可能这是由于影响特定的Spark构建于Hadoop的2.60,因为这一个bug 后似乎暗示。我将尝试使用Spark for Hadoop 2.40来解决问题。
查看完整描述

3 回答

?
当年话下

TA贡献1890条经验 获得超9个赞

确认这与针对Hadoop 2.60的Spark构建有关。刚刚安装了Spark 1.4.0“为Hadoop 2.4和更高版本预构建”(而不是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密钥具有正向“ /”,则上面在S3N URI中内嵌AWS凭证的代码将中断。在SparkContext中配置AWS凭证将对其进行修复。无论S3文件是公共文件还是私有文件,代码都可以工作。


sc.hadoopConfiguration.set("fs.s3n.awsAccessKeyId", "BLABLA")

sc.hadoopConfiguration.set("fs.s3n.awsSecretAccessKey", "....") // can contain "/"

val myRDD = sc.textFile("s3n://myBucket/MyFilePattern")

myRDD.count


查看完整回答
反对 回复 2019-10-29
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

我不得不将hadoop下载中的jar文件复制到$SPARK_HOME/jars目录中。使用该--jars标志或该--packages标志进行火花提交不起作用。

细节:

  • 火花2.3.0

  • Hadoop下载为2.7.6

  • 复制的两个jar文件来自 (hadoop dir)/share/hadoop/tools/lib/

    • aws-java-sdk-1.7.4.jar

    • hadoop-aws-2.7.6.jar


查看完整回答
反对 回复 2019-10-29
  • 3 回答
  • 0 关注
  • 1181 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信