2017-03-28 3 views
0

Je suis confronté à un problème étrange avec spark 2.0, en utilisant sparksession pour charger un fichier texte. Actuellement, ma configuration de l'étincelle ressemble à:Spark 2.0 avec spark.read.text Partie programmée spécifique à l'index 3: s3: erreur

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") 

Si je charge un fichier s3a via un rdd, cela fonctionne correctement. Cependant, si je tente d'utiliser quelque chose comme:

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) 

Je reçois une exception qui dit: java.net.URISyntaxException: Expected scheme-specific part at index 3: s3:

Ai-je besoin d'ajouter un peu plus de configuration s3a pour le SqlContext ou sparksession? Je n'ai trouvé aucune question ou ressource en ligne qui spécifie ceci. Ce qui est bizarre, c'est qu'il semble que le travail dure 10 minutes, mais échoue ensuite avec cette exception. Encore une fois, en utilisant le même seau et tout, un chargement régulier d'un rdd n'a aucun problème.

L'autre chose étrange est qu'il se plaint de s3 et non de s3a. J'ai triplé mon préfixe, et ça dit toujours s3a. Edit: Vérifie à la fois s3a et s3, les deux lancent la même exception.

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:) 

Répondre

0

Cela devrait fonctionner.

  • obtenir les bons JARs sur votre PC (Spark avec Hadoop 2.7, correspondant à Hadoop Aws JAR, aws-java-sdk-1.7.4.jar (exactement cette version) et Joda-temps 2.9.3. jar (ou une version ultérieure)
  • Vous ne devriez pas avoir besoin de définir la valeur fs.s3a.impl, comme cela est fait dans les paramètres par défaut de hadoop Si vous vous trouvez en train de faire cela, c'est un signe d'un problème

Quelle est la trace complète de la pile?

+0

C'est étrange, mais merci. Il a été ma version aws-java-sdk. Je cherchais un temps très long, mais il n'a pas trouver de la documentation à ce sujet. Est-il répertorié quelque part pour l'étincelle? –

+0

Spark n'obtient pas correctement ses dépendances de stockage d'objets, car il n'introduit pas le contenu AWS automatiquement, SPARK-7481 porte le correctif pour cela - ce serait génial si vous alliez à la demande de pull depuis longtemps et clarifié pourquoi cela compte pour vous. –

+0

Ran il avec les mises à jour aujourd'hui, et j'ai toujours eu des problèmes. Ce qui est bizarre, c'est qu'il échoue après 8-10 minutes. Je pense que le message d'erreur est un refrain rouge. –