查询使用Spark应用程序内置的Serde创建的Hive表

时间:2015-07-02 12:35:07

标签: apache-spark hive hortonworks-data-platform

我使用Hortonwork的HDP 2.2(Spark 1.2.1& Hive 0.14)部署了一个hadoop集群

我开发了一个简单的Spark应用程序,它应该检索Hive表的内容,执行一些操作并输出到文件。 Hive表是使用Hive's built-in SerDe导入的。

当我在群集上运行应用程序时,我得到以下异常:

.embed-container {
  position: relative;
  padding-bottom: 100%;
  height: 0;
  overflow: hidden;
}

.embed-container iframe {
  position: absolute;
  top: 0; left: 0;
  width: 100%; height: 100%;
}

基本上,Spark没有找到Hive的SerDe(ERROR log: error in initSerDe: java.lang.ClassNotFoundException Class org.apache.hadoop.hive.serde2.OpenCSVSerde not found java.lang.ClassNotFoundException: Class org.apache.hadoop.hive.serde2.OpenCSVSerde not found at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:1982) at org.apache.hadoop.hive.metastore.MetaStoreUtils.getDeserializer(MetaStoreUtils.java:337) at org.apache.hadoop.hive.ql.metadata.Table.getDeserializerFromMetaStore(Table.java:288) at org.apache.hadoop.hive.ql.metadata.Table.getDeserializer(Table.java:281) at org.apache.hadoop.hive.ql.metadata.Table.getCols(Table.java:631) at org.apache.hadoop.hive.ql.metadata.Table.checkValidity(Table.java:189) at org.apache.hadoop.hive.ql.metadata.Hive.getTable(Hive.java:1017) ...

我没有找到任何要包含在应用程序执行中的jar,也没有提到任何类似的问题。我不知道如何告诉Spark在哪里找到它。

3 个答案:

答案 0 :(得分:0)

制作包含hive-serde JAR的应用程序的着色JAR。请参阅this

答案 1 :(得分:0)

在spark config spark.driver.extraClassPath中添加jar文件。 必须在此处添加任何外部jar,然后spark环境将自动加载它们。

或者使用spark-shell --jars命令

例如

spark.executor.extraClassPath /usr/lib/hadoop/lib/csv-serde-0.9.1.jar

答案 2 :(得分:0)

.jar位于hive的lib文件夹中,只需在启动时使用--jar添加它,并知道在哪里查看!

--jars /usr/hdp/XXX/hive/lib/hive-serde-XXX.jar