Запись слишком велика для буфера в памяти. Ошибка при работе с таблицами ORC Hive через TEZ

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

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.

Upd 2: Простой выбор из ORC неплохо работает с любым движком.


person Samriang    schedule 10.02.2016    source источник
comment
Похоже на ошибку TEZ - укажите это в заголовке и тегах.   -  person Samson Scharfrichter    schedule 10.02.2016
comment
Спасибо за внимание, Самсон!   -  person Samriang    schedule 10.02.2016


Ответы (2)


Совет №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), вероятно, потребуется какое-то жертвоприношение вуду.

Ср. HortonWork's Руководство по настройке Tez для начинающих.

person Samson Scharfrichter    schedule 10.02.2016
comment
1. Да, я пробовал MR для этого запроса, и он хорошо работает. 2. собираюсь читать больше мануалов :) но мне интересно - возможно ли вообще такие манипуляции с данными в HDFS с TEZ? - person Samriang; 10.02.2016
comment
Что вы имеете в виду под в HDFS? Эти свойства устанавливаются в tez-site.xml, который является локальным файлом, ожидаемым в CLASSPATH интерфейса командной строки Hive (или HiveServer2). - person Samson Scharfrichter; 10.02.2016
comment
Обратите внимание, что свойства hive.tez.* могут быть переопределены динамически внутри сценария HQL с помощью setcommand; но не tez.* реквизиты, которые должны быть определены в tez-site.xml - person Samson Scharfrichter; 10.02.2016
comment
в HDFS я имею в виду, что я работаю с данными, хранящимися в HDFS :) кстати, не могли бы вы указать руководство, в котором объясняется, какие переменные я могу динамически перезагружать внутри скриптов, а какие нет? - person Samriang; 11.02.2016
comment
также у меня есть чувство, что я должен проверить некоторые настройки ORC, поскольку мы можем читать из текста и писать в ORC, просто читать из ORC, но мы не можем читать из ORC и записывать в любое хранилище, если мы делаем это в одном запросе: P - person Samriang; 11.02.2016
comment
опубликовал полный журнал ошибок http://pastebin.com/reKikjyt - person Samriang; 11.02.2016

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

set hive.auto.convert.join=false;
set hive.auto.convert.join.noconditionaltask=false;
person Balaram Raju    schedule 11.02.2016
comment
спасибо за идею! эти настройки, к сожалению, не решают мою проблему, но совет по увеличению буфера сортировки от Samson действительно помогает :) - person Samriang; 12.02.2016