initserde中的错误:java.lang.classnotfoundexception class org.apache.hive.hcatalog.data.jsonserde未找到

gblwokeq  于 2021-06-24  发布在  Hive
关注(0)|答案(1)|浏览(738)

我正在尝试使用sparksql(scala)从配置单元表中读取数据,它抛出了一个错误

ERROR hive.log: error in initSerDe: java.lang.ClassNotFoundException Class org.apache.hive.hcatalog.data.JsonSerDe not found
java.lang.ClassNotFoundException: Class org.apache.hive.hcatalog.data.JsonSerDe not found
        at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:2255)
        at org.apache.hadoop.hive.metastore.MetaStoreUtils.getDeserializer(MetaStoreUtils.java:392)
        at org.apache.hadoop.hive.ql.metadata.Table.getDeserializerFromMetaStore(Table.java:274)
        at org.apache.hadoop.hive.ql.metadata.Table.getDeserializer(Table.java:256)
        at org.apache.hadoop.hive.ql.metadata.Table.getCols(Table.java:607)
        at org.apache.spark.sql.hive.client.HiveClientImpl$$anonfun$getTableOption$1$$anonfun$apply$7.apply(HiveClientImpl.scala:358)
        at org.apache.spark.sql.hive.client.HiveClientImpl$$anonfun$getTableOption$1$$anonfun$apply$7.apply(HiveClientImpl.scala:355)
        at scala.Option.map(Option.scala:146)

配置单元表存储为

ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.SequenceFileInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat'

我添加了/opt/cloudera/parcels/cdh/lib/hive-hcatalog/share/hcatalog/hive-hcatalog-core.jar,使用 :require /opt/cloudera/parcels/CDH/lib/hive-hcatalog/share/hcatalog/hive-hcatalog-core.jar 并且能够看到添加到类路径。
我还尝试在sparksession.config()中添加jar文件。两个都没用。我检查了stackoverflow的一些答案,这些答案无助于解决我的问题。

CREATE EXTERNAL TABLE `test.record`(
  `test_id` string COMMENT 'from deserializer', 
  `test_name` string COMMENT 'from deserializer', 
  `processed_datetime` timestamp COMMENT 'from deserializer'
  )
PARTITIONED BY ( 
  `filedate` date)
ROW FORMAT SERDE 
  'org.apache.hive.hcatalog.data.JsonSerDe' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.SequenceFileInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat'

我希望从配置单元表中读取数据,并能够将其存储在dataframe中。

var tempDF =sql("SELECT * FROM test.record WHERE filedate = '2019-06-03' LIMIT 5")
tempDF.show()

应该有用

xurqigkl

xurqigkl1#

解决这个问题的一个快速方法是将jar文件复制到spark。
源文件来自配置单元 lib 目录, hive-hcatalog-core-3.1.2.jar ,复制到 jars 在spark目录下。
我也试着修改 hive.aux.jars.path 配置输入 hive-site.xml ,但不起作用。如果有人知道spark的配置可以加载额外的jar,请发表评论。

相关问题