Почему куст не выбирает SerDe JAR во время операций соединения? - PullRequest
0 голосов
/ 11 октября 2018

версия hadoop: Hadoop 2.6.0-cdh5.12.2 версия куста: Hive 1.1.0-cdh5.12.2

Рассмотрим две таблицы: продукты - хранит идентификатор продукта и другие подробности о деятельности продукта - хранит user_id, product_id, который сообщает, какой пользователь приобрел какой продукт, и другие детали транзакции.

перед созданием этих таблиц я добавил SerDe JAR, используя следующую команду: add jar /home/ManojKumarM_R/json-serde-1.3-jar-with-dependencies.jar;

CREATE EXTERNAL TABLE IF NOT EXISTS products (id string,name string,reseller 
string,category string,price Double,discount Double,profit_percent Double) 
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' location 
"/user/ManojKumarM_R/ProductsMergeEnrichOut";

пример данных в / user / ManojKumarM_R / ProductsMergeEnrichOut

{"Id": "P101", "Name": "Round Tee", "Reseller": "Nike "," Category ":" Top Wear "," Price ": 2195.03," Discount ": 21.09," Profit_percent ": 23.47}

{" Id ":" P102 "," Name ":"Half Shift »,« Reseller »:« Nike »,« Category »:« Top Wear »,« Price »: 1563,84,« Discount »: 23,83,« Profit_percent »: 17,12}

CREATE EXTERNAL TABLE IF NOT EXISTS activity (product_id string,user_id 
string,cancellation boolean ,return boolean,cancellation_reason 
string,return_reason string, order_date timestamp, shipment_date timestamp, 
delivery_date timestamp , cancellation_date timestamp,  return_date 
timestamp) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' location 
"/user/ManojKumarM_R/ActivityMergeEnrichOut/";

пример данныхв / user / ManojKumarM_R / ActivityMergeEnrichOut /

{"Product_id": "P117", "User_id": "U148", "Cancellation": "TRUE", "Return": "NA", "Cancellation_reason ":" Duplicate Product "," Return_reason ":" NA "," Order_date ":" 2016-02-12 "," Shipment_date ":" NA "," Delivery_date ":" NA "," Cancellation_date ":" 2018-05-20 "," Return_date ":" NA "}

{" Product_id ": null," User_id ":" U189 "," Cancellation ":" FALSE "," Return ":" FALSE ", "Cancellation_reason": "NA", "Return_reason": "NA", "Order_date": "2017-04-22", "Shipment_date": "2017-05-05", "Delivery_date": "2017-09-09 "," Cancellation_date ":" NA "," Return_date ":" NA "}

создание таблицы прошло успешно,

select * from products; 

&

select * from activity; 

запросовработают абсолютно нормально, что означает, что SerDe JAR выбирается во время запроса select.

Однако, когда я запускаю запрос на присоединение ниже: я хочу объединить эти две таблицы в общем столбце с идентификатором продукта

SELECT a.user_id, p.category FROM activity a JOIN products p  
ON(a.product_id = p.Id);

, он завершается с сообщением ниже

Журнал выполнения по адресу: /tmp/ManojKumarM_R/ManojKumarM_R_20181010124747_690490ae-e59f-4e9d-9159-5c6a6e28b951.log 2018-10-10 12:47:43 Запуск запуска локальной задачи для обработки присоединения к карте;максимальный объем памяти = 2058354688 Ошибка выполнения с состоянием выхода: 2 Получение информации об ошибке

Задача не выполнена!Идентификатор задачи: Этап-5

Войдите в систему /tmp/ManojKumarM_R/ManojKumarM_R_20181010124747_690490ae-e59f-4e9d-9159-5c6a6e28b951.log

2018-10-10 12: 47: 43,984 ER: mr.MapredLocalTask ​​(MapredLocalTask.java:executeInProcess(398)) - Ошибка времени выполнения куста: не удалось сопоставить локальную работу org.apache.hadoop.hive.ql.metadata.HiveException: не удалось создать исключение java.lang.ClassNotFoundException: org.openx.data.jsonserde.JsonSerDejava.lang.RuntimeException: java.lang.ClassNotFoundException: org.openx.data.jsonserde.java: 73)

, что означает, что Hive не может найти JAR JsonSerDe, хотя я добавил JAR во время этой сессии куста, и запросы selct работали нормально.Если кто-то решил подобную проблему, пожалуйста, дайте мне знать, я не уверен, что Hive просматривает разные каталоги для JAR-файлов во время операции JOIN.

1 Ответ

0 голосов
/ 11 октября 2018

Hive не вызывает задания MR для всех запросов «SELECT *».В вашем случае файл JAR не распространяется по кластерам при вызове фактического задания MR (запрос JOIN).Поэтому я бы порекомендовал вам еще раз проверить разрешение папки / файла JAR или переместить файл в путь к библиотеке HIVE, а также обновить файл Hive-site.xml.Есть несколько предыдущих постов о том, как добавить файл JAR HIVE, и вы также можете это проверить.

Предыдущий пост.

как добавить файл jar в куст

...