2015-12-14 1 views
0

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.

Répondre

1

Vous devrez fournir les bibliothèques client de la ruche avec votre code. Il est probablement plus facile à utiliser allinone, l'ombrage ou fatjars dans votre build (maven, gradle ou SBT)

+0

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? –

+0

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 –

+0

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 –

0

Pendant que vous courir pouvez passer les pots comme

Spark-submit ..... --jar /usr/hdp/hive/lib/hive-client.jar 

exporter également la maison ruche, Hadoop maison et étincelle maison

+0

Est-il possible de faire fonctionner ceci sans l'exécuter dans spark-submit? Je pensais que c'était seulement nécessaire pour le mode fil-cluster? –