使用Spark DataFrames查询Hive表会导致在yarn-client模式下出现ClassNotFoundException

时间:2015-12-14 20:22:07

标签: java apache-spark hive apache-spark-sql spark-dataframe

我试图运行一个基本的" Hello world"在纱线客户端模式下使用带有Hive的DataFrames的类型示例。我的代码是:

JavaSparkContext sc = new JavaSparkContext("yarn-client", "Test app"))
HiveContext sqlContext = new HiveContext(sc.sc());
sqlContext.sql("SELECT * FROM my_table").count(); 

这在本地模式下工作正常,但是当我在yarn-client模式下运行时,我在驱动程序上遇到了这个异常:

  

抛出java.lang.ClassNotFoundException:   org.apache.hadoop.hive.ql.plan.TableDesc

我已经确认缺少的类在驱动程序类路径上使用:

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

有谁知道我做错了什么?

更新:我没有在本地或纱线群集模式下运行任何错误。此问题仅发生在纱线客户端模式中。

2 个答案:

答案 0 :(得分:1)

您需要提供配置单元客户端库以及您的代码。在您的构建(maven,gradle或SBT)中使用allinone,shading或fatjars可能最容易

答案 1 :(得分:0)

跑步时你可以传递像

这样的罐子
 Spark-submit .....    --jar /usr/hdp/hive/lib/hive-client.jar

还出口蜂巢回家,hadoop回家和火花回家