версия 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.