2016-02-10 7 views
1

Мы пытаемся прочитать данные из таблицы ORC в HIVE (1.2.1) и поместить эти данные в таблицу с помощью «TextInputFormat». Некоторые записи слишком велики, в исходных данных и следующее сообщение об ошибке во время работы:Запись слишком велика для буфера в памяти. Ошибка при работе с ORC-таблицами Hive через TEZ

org.apache.hadoop.hive.ql.metadata.HiveException: org.apache.tez.runtime.library.common.sort. impl.ExternalSorter $ MapBufferTooSmallException: Запись слишком велика для буфера в памяти. Превышено ограничение переполнения буфера, bufferOverflowRecursion = 2, bufferList.size = 1, BLOCKSIZE = 1610612736

Любые идеи, как решить эту проблему?

Мы используем двигатель TEZ для выполнения запросов и ошибок с простым двигателем MR нет.

запроса выполнить:

insert overwrite table visits_text_test_1m select * from visits where dt='2016-01-19' limit 1000000; 

UPD: Та же ошибка при копировании из ORC для хранения ORC.

Обновление 2: Простой «выбор» из ORC работает очень хорошо с любым движком.

+0

Похоже на ошибку TEZ - сделать это явным в заголовке и тегах. –

+0

Thx для заметки, Самсон! – Samriang

ответ

0

Подсказка №1: просто переключитесь с TEZ на MapReduce перед запуском вашего запроса - медленнее, но более устойчивым.

set hive.execution.engine = mr ;

Подсказка # 2: так как исключение выходит из ужасного TEZ ExternalSorter зверь, рыть в свойства, такие как Tez tez.runtime.sorter.class, tez.runtime.io.sort.mb и т.д. Имейте в виду, что нахождение рабочего набора свойств (даже говоря о настройке их в соответствии с вашим hive.tez.container.size), вероятно, потребуется какая-то жертва вуду.

Cf. HortonWork's Configuring Tez руководство для начинающих.

+0

1. yup, я попробовал MR для этого запроса, и он работает хорошо. 2. собираюсь прочитать больше руководств :), но я задаюсь вопросом - возможно ли сделать такие манипуляции с данными в HDFS с TEZ? – Samriang

+0

Что вы подразумеваете под * "внутри HDFS" *? Эти реквизиты установлены в 'tez-site.xml', который является локальным файлом, ожидаемым в CLASSPATH из Hive CLI (или HiveServer2). –

+0

Обратите внимание, что реквизиты 'hive.tez. *' Можно динамически переопределять внутри скрипта HQL с помощью команды 'set'; но не 'tz. *' реквизита, который * должен * быть определен в 'tez-site.xml' –

0

как samson сказал, что вы, возможно, захотите увеличить размер контейнера, а также я обнаружил, что JOIN действительно приводит к проблеме, потому что по умолчанию улья преобразуют соединение в MAPJOIN. Вы можете попробовать выполнить следующие настройки в запросе и посмотреть, помогает ли это:

set hive.auto.convert.join=false; 
set hive.auto.convert.join.noconditionaltask=false; 
+0

thx за идею! эти настройки не решают мою проблему, к сожалению, но посоветуйте об увеличении буфера сортировки от Самсона на самом деле помогает :) – Samriang