Ошибка при определении определенного поля в запросе Hive

У меня есть брокер контекста Orion, связанный с Cosmos с помощью cygnus.

Это работает нормально, я имею в виду, что я отправляю новые элементы в Context Broker, а cygnus отправляет их в Cosmos и сохраняет в файлах.

У меня проблема, когда я пытаюсь выполнить поиск.

Я запускаю hive и вижу, что есть несколько таблиц, связанных с файлами, созданными Cosmos, поэтому я запускаю некоторые запросы.

Простой работает нормально:

select * from Table_name;

Hive не запускает никаких заданий mapReduce.

но когда я хочу отфильтровать, присоединиться, подсчитать или получить только некоторые поля. Вот что происходит:

Total MapReduce jobs = 1
Launching Job 1 out of 1
Number of reduce tasks determined at compile time: 1
In order to change the average load for a reducer (in bytes):
  set hive.exec.reducers.bytes.per.reducer=<number>
In order to limit the maximum number of reducers:
  set hive.exec.reducers.max=<number>
In order to set a constant number of reducers:
  set mapred.reduce.tasks=<number>
Starting Job = JOB_NAME, Tracking URL = JOB_DETAILS_URL
Kill Command = /usr/lib/hadoop-0.20/bin/hadoop job  -kill JOB_NAME
Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 1
2015-07-08 14:35:12,723 Stage-1 map = 0%,  reduce = 0%
2015-07-08 14:35:38,943 Stage-1 map = 100%,  reduce = 100%
Ended Job = JOB_NAME with errors
Error during job, obtaining debugging information...
Examining task ID: TASK_NAME (and more) from job JOB_NAME

Task with the most failures(4): 
-----
Task ID:
  task_201409031055_6337_m_000000

URL: TASK_DETAIL_URL
-----

FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.MapRedTask
MapReduce Jobs Launched: 
Job 0: Map: 1  Reduce: 1   HDFS Read: 0 HDFS Write: 0 FAIL

Я обнаружил, что файлы, созданные Cygnus, отличаются от других файлов, потому что в случае Cygnus их нужно десериализовать с помощью jar.

Итак, у меня есть сомнения, нужно ли в этих случаях применять какой-либо метод MapReduce или уже есть какой-либо общий метод для этого.


person Jon Mikel Alonso    schedule 08.07.2015    source источник
comment
Данные Orion, сохраняемые Cygnus в Cosmos, записываются в формате JSON, и Cygnus создает связанные таблицы Hive с помощью JSON serde (сериализатор/десериализатор на жаргоне Hive), который позволяет получить доступ к данным. В любом случае, какую версию Cygnus вы используете?   -  person frb    schedule 08.07.2015
comment
Версия Cygnus 0.7.1. Я знаю, что данные сохраняются в формате JSON и используются в формате JSON, но мой вопрос в момент поиска. Улей пытается применить MapReduce, и он терпит неудачу, я полагаю, это потому, что данные имеют формат JSON, и вы должны использовать специальный метод MapReduce.   -  person Jon Mikel Alonso    schedule 09.07.2015


Ответы (1)


Перед выполнением любого предложения Hive сделайте следующее:

hive> add jar /usr/local/hive-0.9.0-shark-0.8.0-bin/lib/json-serde-1.1.9.3-SNAPSHOT.jar;

Если вы используете Hive через JDBC, выполните любое другое предложение:

Connection con = ...
Statement stmt = con.createStatement();
stmt.executeQuery("add jar /usr/local/hive-0.9.0-shark-0.8.0-bin/lib/json-serde-1.1.9.3-SNAPSHOT.jar");
stmt.close();
stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("select ...");
person frb    schedule 09.07.2015