J'ai des instances de notebook MinIO et Jupyter Pyspark exécutées localement sur des conteneurs Docker distincts. Je peux utiliser le package minio Python pour afficher les seaux et les objets dans MinIO, mais lorsque j'essaie de charger un parquet à partir d'un seau en utilisant Pyspark, j'obtiens ce qui suit:
Code:
Py4JJavaError: An error occurred while calling o22.load. : java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.apache.hadoop.fs.s3a.S3AFileSystem not found at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2195) at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2654) at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2667) at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:94) at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2703) at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2685) at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:373) at org.apache.hadoop.fs.Path.getFileSystem(Path.java:295) at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$org$apache$spark$sql$execution$datasources$DataSource$$checkAndGlobPathIfNecessary$1.apply(DataSource.scala:547) at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$org$apache$spark$sql$execution$datasources$DataSource$$checkAndGlobPathIfNecessary$1.apply(DataSource.scala:545) 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:392) at scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:241) at scala.collection.immutable.List.flatMap(List.scala:355) at org.apache.spark.sql.execution.datasources.DataSource.org$apache$spark$sql$execution$datasources$DataSource$$checkAndGlobPathIfNecessary(DataSource.scala:545) at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:359) at org.apache.spark.sql.DataFrameReader.loadV1Source(DataFrameReader.scala:223) at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:211) at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:178) 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 py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244) at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357) at py4j.Gateway.invoke(Gateway.java:282) at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132) at py4j.commands.CallCommand.execute(CallCommand.java:79) at py4j.GatewayConnection.run(GatewayConnection.java:238) at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.ClassNotFoundException: Class org.apache.hadoop.fs.s3a.S3AFileSystem not found at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:2101) at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2193) ... 30 more
3 Réponses :
Pourriez-vous montrer comment vous avez installé Spark et initialisé? Il semble que vous deviez télécharger la bibliothèque Java pour org.apache.hadoop.fs.s3a.S3AFileSystem
. Pouvez-vous vous assurer que les fichiers JARS hadoop-aws
et aws-java-sdk
sont installés? J'utilise http://central.maven.org/maven2/org/apache/hadoop/hadoop-aws/2.7.3/hadoop-aws-2.7.3.jar et http://central.maven.org/ maven2 / com / amazonaws / aws-java-sdk / 1.7.4 / aws-java-sdk-1.7.4.jar .
Voir ce commentaire ici: https://github.com/ jupyter / docker-stacks / issues / 272 # issuecomment-244278586
Spécifiquement:
import os os.environ['PYSPARK_SUBMIT_ARGS'] = '--packages com.amazonaws:aws-java-sdk:1.10.34,org.apache.hadoop:hadoop-aws:2.6.0,com.databricks:spark-csv_2.11:1.4.0 pyspark-shell'
Cela a aidé à se débarrasser de l'erreur de classe introuvable p >
Veuillez suivre les étapes suivantes:
Assurez-vous d'avoir installé les jars
:
Vous pouvez exécuter votre application pyspark
quelque chose comme:
pyspark --jars "aws-java-sdk-1.7.4.jar, hadoop-aws-2.7.3
(ou depuis un docker CMD
)
sc._jsc.hadoopConfiguration().set("fs.s3a.access.key", "access_key") sc._jsc.hadoopConfiguration().set("fs.s3a.secret.key", "secret_key") sc._jsc.hadoopConfiguration().set("fs.s3a.proxy.host", "minio") sc._jsc.hadoopConfiguration().set("fs.s3a.endpoint", "minio") sc._jsc.hadoopConfiguration().set("fs.s3a.proxy.port", "9000") sc._jsc.hadoopConfiguration().set("fs.s3a.path.style.access", "true") sc._jsc.hadoopConfiguration().set("fs.s3a.connection.ssl.enabled", "false") sc._jsc.hadoopConfiguration().set("fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem")
Veuillez vérifier configuration du client s3a vers une liste complète des paramètres
Maintenant devrait être en mesure d'interroger les données de minio
, par exemple:
sc.textFile ("s3a: //