J'essaie d'exécuter un exemple de base de type "Bonjour tout le monde" en utilisant DataFrames avec Hive en mode filaire-client. Mon code est:La requête Querying Hive avec Spark DataFrames provoque ClassNotFoundException en mode filaire-client
JavaSparkContext sc = new JavaSparkContext("yarn-client", "Test app"))
HiveContext sqlContext = new HiveContext(sc.sc());
sqlContext.sql("SELECT * FROM my_table").count();
Cela fonctionne bien en mode local, mais quand je le lance en mode fil-client je reçois cette exception sur le conducteur:
java.lang.ClassNotFoundException: org .apache.hadoop.hive.ql.plan.TableDesc
J'ai confirmé que la classe manquante est le pilote en classpath utilisant ceci:
try {
Class.forName("org.apache.hadoop.hive.ql.plan.TableDesc");
System.out.println("On classpath");
} catch (ClassNotFoundException e) {
System.out.println("Not found on classpath");
}
Est-ce que quelqu'un sait ce que je fais mal?
Mise à jour: aucune erreur ne se produit dans les modes local ou fil-cluster. Ce problème se produit uniquement en mode filaire client.
Que voulez-vous dire "fournir les bibliothèques clientes de la ruche"? Ces bibliothèques sont sur le chemin de classe de l'application de pilote. Y a-t-il autre chose que je dois faire? –
ils doivent être mis en scène pour les travailleurs, pas seulement pour le conducteur, parce que le travailleur fonctionne sur des machines différentes –
L'erreur que j'obtiens se passe sur le pilote. En outre, à partir de la documentation Spark: "Ces bocaux doivent uniquement être présents sur le pilote". http://spark.apache.org/docs/latest/sql-programming-guide.html#hive-tables –