ошибка в initSerDe: класс java.lang.ClassNotFoundException org.apache.hive.hcatalog.data.JsonSerDe не найден - PullRequest
1 голос
/ 11 июня 2019

Я пытаюсь прочитать данные из таблицы Hive, используя spark sql (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)

Таблица Hive хранится как

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'

Iдобавил /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 и смог увидеть Добавлено в classpath.

Я также пыталсяДобавьте файл JAR в SparkSession.config ().Оба они не сработали.Я проверил некоторые ответы из 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()

должно работать

...