【发布时间】:2023-03-19 02:09:01
【问题描述】:
我已将自爆罐添加到 spark/jars 路径。
- hadoop-aws-2.7.3.jar
- aws-java-sdk-s3-1.11.126.jar
- aws-java-sdk-core-1.11.126.jar
- spark-2.1.0
在 spark-shell 中
scala> sc.hadoopConfiguration.set("fs.s3a.access.key", "***")
scala> sc.hadoopConfiguration.set("fs.s3a.secret.key", "***")
scala> val f = sc.textFile("s3a://bucket/README.md")
scala> f.count
java.lang.NoSuchMethodError: com.amazonaws.services.s3.transfer.TransferManager.(Lcom/amazonaws/services/s3/AmazonS3;Ljava/util/concurrent/ThreadPoolExecutor;)V 在 org.apache.hadoop.fs.s3a.S3AFileSystem.initialize(S3AFileSystem.java:287) 在 org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2669) 在 org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:94) 在 org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2703) 在 org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2685)
在 org.apache.hadoop.fs.FileSystem.get(FileSystem.java:373) 在 org.apache.hadoop.fs.Path.getFileSystem(Path.java:295) 在 org.apache.hadoop.mapred.FileInputFormat.singleThreadedListStatus(FileInputFormat.java:258) 在 org.apache.hadoop.mapred.FileInputFormat.listStatus(FileInputFormat.java:229) 在 org.apache.hadoop.mapred.FileInputFormat.getSplits(FileInputFormat.java:315) 在 org.apache.spark.rdd.HadoopRDD.getPartitions(HadoopRDD.scala:202)
在 org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:252) 在 org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:250) 在 scala.Option.getOrElse(Option.scala:121) 在 org.apache.spark.rdd.RDD.partitions(RDD.scala:250) 在 org.apache.spark.rdd.MapPartitionsRDD.getPartitions(MapPartitionsRDD.scala:35) 在 org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:252) 在 org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:250) 在 scala.Option.getOrElse(Option.scala:121) 在 org.apache.spark.rdd.RDD.partitions(RDD.scala:250) 在 org.apache.spark.SparkContext.runJob(SparkContext.scala:1958) 在 org.apache.spark.rdd.RDD.count(RDD.scala:1157) ... 48 省略
“java.lang.NoSuchMethodError: com.amazonaws.services.s3.transfer.TransferManager”由不匹配的 jar 引发? (hadoop-aws, aws-java-sdk)
要从 Spark 应用程序访问存储在 Amazon S3 中的数据,应使用 Hadoop 文件 API。那么 hadoop-aws.jar 是包含 Hadoop 文件 APIS 还是必须运行 hadoop env ?
【问题讨论】: