2013-01-29 3 views
0

Я пытаюсь создать индекс для таблиц в Hive 0.9. Одна таблица имеет 1 миллиард строк, другая - 30 миллионов строк. Используемая мной команда (кроме создания таблицы и т. Д.)Создание индекса в улье 0.9

CREATE INDEX DEAL_IDX_1 ON TABLE DEAL (ID) AS 
    'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler' 
    WITH DEFERRED REBUILD; 

    alter index DEAL_IDX_1 ON DEAL rebuild; 

    set hive.optimize.autoindex=true; 
    set hive.optimize.index.filter=true; 

Для 30 мельниц. строка таблицы, процесс восстановления выглядит Alright (картографа и редуктору оба закончили), пока в конце концов он не печатает

Invalid alter operation: Unable to alter index. 
    FAILED: Execution Error, return code 1 
    from org.apache.hadoop.hive.ql.exec.DDLTask 

Проверка журнала, и это была ошибка

java.lang.ClassNotFoundException: org.apache.derby.jdbc.EmbeddedDriver" 

Не знаю, почему эта ошибка встречаются, но в любом случае, я добавил дерби version.jar:

add jar /path/derby-version.jar 

была решена сообщила об ошибке, но все-таки получил другую ошибку:

org.apache.hadoop.hive.ql.exec.FileSinkOperator: 
StatsPublishing error: cannot connect to database 

Не знаете, как решить проблему. Однако я вижу созданную индексную таблицу под кустом/хранилищем.

Для таблицы из 1 миллиарда строк это еще одна история. Картонер просто застрял на 2% или около того. И ошибка показала

FATAL org.apache.hadoop.mapred.Child: Error running child : 
java.lang.OutOfMemoryError: Java heap space 

Я пытался применять максимальный размер кучи, а также mapr памяти макс (см настройки упоминается где-то, но не в настройках конфигурации улья):

set mapred.child.java.opts = -Xmx6024m 
set mapred.job.map.memory.mb=6000; 
set mapred.job.reduce.memory.mb=4000; 

Однако это не Помогите. Картограф все равно застрял бы на 2% с той же ошибкой.

+0

Почему вам нужно создать индекс? – cybye

+0

@cybye, это интересный вопрос. Не совсем понятно, как индекс поможет выполнить мои запросы. Я хотел бы сравнить и настроить производительность. В таблице было несколько столбцов, на которых будут выполняться несколько условий выбора. Также есть несколько операций объединения таблиц. – Causality

+0

Возможно, вы можете получить производительность с помощью разбиения (metastore предоставленный индекс) и bucketing таблицы в первую очередь? Я не уверен, откуда взялись ошибки. Вероятно, проблема дерби, потому что у вас есть только локальный метастор. это могло бы помочь запустить сервер метасторе (запустить сервер, в улей куст метасторе локальный false и установить URL-адреса). – cybye

ответ

2

У меня была аналогичная проблема создания индекса и в улье/хранилище, но процесс в целом не прошел. Моим index_name был TypeTarget (ваш DEAL_IDX_1), и после многих дней попытки использовать разные подходы, делая index_name, все строчные (typetarget) исправили проблему. Моя проблема была в Hive 0.10.0.

Кроме того, класс не найден и проблема с публикацией StatsPublishing заключается в том, что по умолчанию включен hive.stats.autogather. Отключение этого (false) в hive-site.xml должно избавиться от этих проблем.

Надеюсь, это поможет любому, кто ищет быстрое исправление.

+2

От https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Indexing#LanguageManualIndexing-SimpleExamples предупреждение: '' Чувствительность к регистру Значок В Hive 0.12.0 и более ранних версиях имя индекса является case- чувствителен к операторам CREATE INDEX и DROP INDEX. Однако для ALTER INDEX требуется имя индекса, которое было создано с помощью строчных букв (см. HIVE-2752). Эта ошибка исправлена ​​в Hive 0.13.0, сделав имена индексов без учета регистра для всех операторов HiveQL. Для выпусков до 0.13.0 наилучшей практикой является использование строчных букв для всех имен индексов. '' '' – dajobe

Смежные вопросы