2017-04-04 1 views
0

J'essaie actuellement d'exécuter un travail Spark Scala sur notre cluster HDInsight avec la bibliothèque externe spark-avro, sans succès. Quelqu'un pourrait-il m'aider avec ça? L'objectif consiste à trouver les étapes nécessaires pour pouvoir lire les fichiers avro résidant sur le stockage de blob Azure sur les clusters HDInsight.Comment ajouter databricks avro jar à hdinsight

spécifications actuelles:

  • Spark 2.0 sur Linux (3.5 HDI) clustertype
  • Scala 2.11.8
  • étincelle montage-2.0.0-hadoop2.7.0-SNAPSHOT.jar
  • tutoriel 3.2.0

utilisé::

  • étincelle avro_2.11 https://docs.microsoft.com/en-us/azure/hdinsight/hdinsight-apache-spark-intellij-tool-plugin

    Code Spark scala:

    basé sur l'exemple sur: https://github.com/databricks/spark-avro

    import com.databricks.spark.avro._ 
    import org.apache.spark.sql.SparkSession 
    
    object AvroReader { 
    
        def main (arg: Array[String]): Unit = { 
    
        val spark = SparkSession.builder().master("local").getOrCreate() 
    
        val df = spark.read.avro("wasb://[email protected]/directory") 
        df.head(5) 
        } 
    } 
    

    erreur reçu:

    java.lang.NoClassDefFoundError: com/databricks/spark/avro/package$ 
        at MediahuisHDInsight.AvroReader$.main(AvroReader.scala:14) 
        at MediahuisHDInsight.AvroReader.main(AvroReader.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:627) 
    Caused by: java.lang.ClassNotFoundException: com.databricks.spark.avro.package$ 
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
        ... 7 more 
    
  • +0

    Veuillez fournir votre fichier de construction. Il semble que votre pot attend une certaine dépendance à l'exécution. – Vidya

    Répondre

    0

    Par défaut, votre default_artifact.jar ne contient que vos classes , pas les classes des bibliothèques que vous référencez. Vous pouvez probablement utiliser le champ de saisie "Bocaux référencés" pour cela.

    Une autre solution consiste à ajouter vos bibliothèques, décompressées, à votre artefact. Allez dans Fichier -> Structure du projet. Sous Éléments disponibles, cliquez avec le bouton droit sur la bibliothèque spark-avro et sélectionnez Extraire dans la racine de sortie. Cliquez sur OK, puis sur Build -> Build Artifacts et resoumettez.

    +0

    Merci pour votre aide! La fonctionnalité "Extraire dans la racine de sortie" a résolu le problème. Très appréciée! – JMordijck