使用 Spark 应用程序的内置 Serde 创建的查询 Hive table
Query Hive table created with built-in Serde from Spark app
我使用 Hortonwork 的 HDP 2.2(Spark 1.2.1 和 Hive 0.14)部署了一个 hadoop 集群
我开发了一个简单的 Spark 应用程序,它应该检索 Hive table 的内容,执行一些操作并输出到文件。 Hive table 是使用 Hive's built-in 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)
...
基本上,Spark 找不到 Hive 的 SerDe (org.apache.hadoop.hive.serde2.OpenCSVSerde
)
我没有找到任何 jar 包含在应用程序的执行中,也没有在任何地方提到类似的问题。我不知道如何告诉 Spark 在哪里可以找到它。
为您的应用程序制作一个阴影 JAR,其中包含 hive-serde JAR。参考 this
在 spark 配置中添加 jar 文件 spark.driver.extraClassPath。
必须在这里添加任何外部jar,然后spark环境会自动加载它们。
或者使用 spark-shell --jars 命令
例子
spark.executor.extraClassPath /usr/lib/hadoop/lib/csv-serde-0.9.1.jar
.jar 位于 hive 的 lib 文件夹中,只需在启动时使用 --jar 添加它并知道在哪里查找!
--jars /usr/hdp/XXX/hive/lib/hive-serde-XXX.jar
我使用 Hortonwork 的 HDP 2.2(Spark 1.2.1 和 Hive 0.14)部署了一个 hadoop 集群
我开发了一个简单的 Spark 应用程序,它应该检索 Hive table 的内容,执行一些操作并输出到文件。 Hive table 是使用 Hive's built-in 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)
...
基本上,Spark 找不到 Hive 的 SerDe (org.apache.hadoop.hive.serde2.OpenCSVSerde
)
我没有找到任何 jar 包含在应用程序的执行中,也没有在任何地方提到类似的问题。我不知道如何告诉 Spark 在哪里可以找到它。
为您的应用程序制作一个阴影 JAR,其中包含 hive-serde JAR。参考 this
在 spark 配置中添加 jar 文件 spark.driver.extraClassPath。 必须在这里添加任何外部jar,然后spark环境会自动加载它们。
或者使用 spark-shell --jars 命令
例子
spark.executor.extraClassPath /usr/lib/hadoop/lib/csv-serde-0.9.1.jar
.jar 位于 hive 的 lib 文件夹中,只需在启动时使用 --jar 添加它并知道在哪里查找!
--jars /usr/hdp/XXX/hive/lib/hive-serde-XXX.jar