Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 带Spark.read.text的Spark 2.0预期方案特定部分位于索引3:s3:错误_Apache Spark_Amazon S3_Apache Spark 2.0 - Fatal编程技术网

Apache spark 带Spark.read.text的Spark 2.0预期方案特定部分位于索引3:s3:错误

Apache spark 带Spark.read.text的Spark 2.0预期方案特定部分位于索引3:s3:错误,apache-spark,amazon-s3,apache-spark-2.0,Apache Spark,Amazon S3,Apache Spark 2.0,我在spark 2.0中遇到了一个奇怪的问题,使用sparksession加载文本文件。当前我的spark配置如下所示: val sparkConf = new SparkConf().setAppName("name-here") sparkConf.registerKryoClasses(Array(Class.forName("org.apache.hadoop.io.LongWritable"), Class.forName("org.apache.hadoop.io.Text")))

我在spark 2.0中遇到了一个奇怪的问题,使用sparksession加载文本文件。当前我的spark配置如下所示:

val sparkConf = new SparkConf().setAppName("name-here")
sparkConf.registerKryoClasses(Array(Class.forName("org.apache.hadoop.io.LongWritable"), Class.forName("org.apache.hadoop.io.Text")))
sparkConf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
val spark = SparkSession.builder()
    .config(sparkConf)
    .getOrCreate()
spark.sparkContext.hadoopConfiguration.set("fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem")
spark.sparkContext.hadoopConfiguration.set("fs.s3a.enableServerSideEncryption", "true")
spark.sparkContext.hadoopConfiguration.set("mapreduce.fileoutputcommitter.algorithm.version", "2")
如果我通过rdd加载s3a文件,它可以正常工作。但是,如果我尝试使用以下内容:

    val blah = SparkConfig.spark.read.text("s3a://bucket-name/*/*.txt")
        .select(input_file_name, col("value"))
        .drop("value")
        .distinct()
    val x = blah.collect()
    println(blah.head().get(0))
    println(x.size)
我得到一个异常,它说:
java.net.URISyntaxException:Expected索引3:s3处的特定于方案的部分:

我是否需要为sqlcontext或sparksession添加一些额外的s3a配置?我没有找到任何问题或在线资源来说明这一点。奇怪的是,作业似乎运行了10分钟,但由于这个异常而失败。同样,使用相同的bucket和所有东西,rdd的常规加载没有问题

另一件奇怪的事情是,它在抱怨s3,而不是s3a。我已经三次检查了我的前缀,它总是说s3a

编辑:选中s3a和s3,两者都会引发相同的异常

17/04/06 21:29:14 ERROR ApplicationMaster: User class threw exception: 
java.lang.IllegalArgumentException: java.net.URISyntaxException: 
Expected scheme-specific part at index 3: s3:
java.lang.IllegalArgumentException: java.net.URISyntaxException: 
Expected scheme-specific part at index 3: s3:
at org.apache.hadoop.fs.Path.initialize(Path.java:205)
at org.apache.hadoop.fs.Path.<init>(Path.java:171)
at org.apache.hadoop.fs.Path.<init>(Path.java:93)
at org.apache.hadoop.fs.Globber.glob(Globber.java:240)
at org.apache.hadoop.fs.FileSystem.globStatus(FileSystem.java:1732)
at org.apache.hadoop.fs.FileSystem.globStatus(FileSystem.java:1713)
at org.apache.spark.deploy.SparkHadoopUtil.globPath(SparkHadoopUtil.scala:237)
at org.apache.spark.deploy.SparkHadoopUtil.globPathIfNecessary(SparkHadoopUtil.scala:243)
at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$14.apply(DataSource.scala:374)
at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$14.apply(DataSource.scala:370)
at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:241)
at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:241)
at scala.collection.immutable.List.foreach(List.scala:381)
at scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:241)
at scala.collection.immutable.List.flatMap(List.scala:344)
at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:370)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:152)
at org.apache.spark.sql.DataFrameReader.text(DataFrameReader.scala:506)
at org.apache.spark.sql.DataFrameReader.text(DataFrameReader.scala:486)
at com.omitted.omitted.jobs.Omitted$.doThings(Omitted.scala:18)
at com.omitted.omitted.jobs.Omitted$.main(Omitted.scala:93)
at com.omitted.omitted.jobs.Omitted.main(Omitted.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.spark.deploy.yarn.ApplicationMaster$$anon$2.run(ApplicationMaster.scala:637)
Caused by: java.net.URISyntaxException: Expected scheme-specific part 
at index 3: s3:
at java.net.URI$Parser.fail(URI.java:2848)
at java.net.URI$Parser.failExpecting(URI.java:2854)
at java.net.URI$Parser.parse(URI.java:3057)
at java.net.URI.<init>(URI.java:746)
at org.apache.hadoop.fs.Path.initialize(Path.java:202)
... 26 more
17/04/06 21:29:14 INFO ApplicationMaster: Final app status: FAILED, 
exitCode: 15, (reason: User class threw exception: 
java.lang.IllegalArgumentException: java.net.URISyntaxException: 
Expected scheme-specific part at index 3: s3:)
17/04/06 21:29:14错误应用程序管理员:用户类引发异常:
java.lang.IllegalArgumentException:java.net.URISyntaxException:
索引3处的预期方案特定部分:s3:
java.lang.IllegalArgumentException:java.net.URISyntaxException:
索引3处的预期方案特定部分:s3:
位于org.apache.hadoop.fs.Path.initialize(Path.java:205)
位于org.apache.hadoop.fs.Path(Path.java:171)
位于org.apache.hadoop.fs.Path(Path.java:93)
位于org.apache.hadoop.fs.Globber.glob(Globber.java:240)
位于org.apache.hadoop.fs.FileSystem.globStatus(FileSystem.java:1732)
位于org.apache.hadoop.fs.FileSystem.globStatus(FileSystem.java:1713)
位于org.apache.spark.deploy.SparkHadoopUtil.globPath(SparkHadoopUtil.scala:237)
在org.apache.spark.deploy.SparkHadoopUtil.globpathifrequired上(SparkHadoopUtil.scala:243)
位于org.apache.spark.sql.execution.datasources.DataSource$$anonfun$14.apply(DataSource.scala:374)
位于org.apache.spark.sql.execution.datasources.DataSource$$anonfun$14.apply(DataSource.scala:370)
位于scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:241)
位于scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:241)
位于scala.collection.immutable.List.foreach(List.scala:381)
位于scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:241)
位于scala.collection.immutable.List.flatMap(List.scala:344)
位于org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:370)
位于org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:152)
位于org.apache.spark.sql.DataFrameReader.text(DataFrameReader.scala:506)
位于org.apache.spark.sql.DataFrameReader.text(DataFrameReader.scala:486)
在com.impleted.impleted.jobs.impleted$.doThings(impleted.scala:18)
在com.employed.employed.jobs.employed$.main(employed.scala:93)
在com.employed.employed.jobs.employed.main(employed.scala)上
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:498)
位于org.apache.spark.deploy.warn.ApplicationMaster$$anon$2.run(ApplicationMaster.scala:637)
原因:java.net.URISyntaxException:预期的方案特定部分
索引3:s3:
在java.net.URI$Parser.fail(URI.java:2848)
位于java.net.URI$Parser.failExpecting(URI.java:2854)
位于java.net.URI$Parser.parse(URI.java:3057)
位于java.net.URI。(URI.java:746)
位于org.apache.hadoop.fs.Path.initialize(Path.java:202)
... 26多
17/04/06 21:29:14信息应用程序管理员:最终应用程序状态:失败,
exitCode:15,(原因:用户类引发异常:
java.lang.IllegalArgumentException:java.net.URISyntaxException:
索引3处的预期方案特定部分:s3:)
这应该行得通

  • 在您的CP上获得正确的JAR(Spark with Hadoop 2.7,匹配Hadoop aws JAR、aws-java-sdk-1.7.4.JAR(正是这个版本)和joda-time-2.9.3.JAR(或更高版本的vesion)
  • 您不需要像在hadoop默认设置中那样设置fs.s3a.impl值。如果您发现自己这样做了,这是一个问题的迹象

什么是完整的堆栈跟踪?

这很奇怪,但是谢谢。这是我的aws java sdk版本。我找了很长时间,但没有找到关于这一版本的文档。它是为spark列出的吗?spark目前没有正确的对象存储依赖关系,因为它不会自动拉入aws的东西,spark-7481带有patch对于这一点-如果您转到长期存在的pull请求,并明确说明它对您的重要性,那就太好了。今天用更新运行它,但我仍然有问题。奇怪的是,它在8-10分钟后失败。我认为错误消息是一种误导。无论如何,添加整个堆栈:我很好奇,谢谢。我在上面添加了它。