Почему куст не выбирает SerDe JAR во время операций соединения?

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

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

перед созданием этих таблиц я добавил 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", "Дата отгрузки":"2017-05-05", "Дата доставки":"2017-09-09", "Дата отмены":"NA", "Дата возврата":"NA"}

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

select * from products; 

&

select * from activity; 

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

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

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 ОШИБКА [main]: 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.JsonSerDe в org.pache.h.plan.TableDesc.getDeserializerClass(TableDesc.java:73)

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

1 ответ

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

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

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

Другие вопросы по тегам