0

我正在尝试在 yarn-client 模式下使用带有 Hive 的 DataFrames 运行一个基本的“Hello world”类型示例。我的代码是:

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

有谁知道我做错了什么?

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

4

2 回答 2

1

您将需要提供 hive 客户端库以及您的代码。在构建(maven、gradle 或 SBT)中使用 allinone、shading 或 fatjars 可能是最简单的

于 2015-12-14T20:36:29.177 回答
0

运行时,您可以传递罐子,例如

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

还可以导出 hive home 、 hadoop home 和 spark home 。

于 2015-12-15T20:00:02.123 回答