Настройка улья hive.optimize.sort.dynamic.partition
Я пытаюсь вставить в улей таблицу с динамическими разделами. Тот же запрос выполнялся нормально в течение последних нескольких дней, но теперь выдает ошибку ниже.
Diagnostic Messages for this Task: java.lang.RuntimeException:
org.apache.hadoop.hive.ql.metadata.HiveException: Hive Runtime Error:
Unable to deserialize reduce input key from
x1x128x0x0x46x234x240x192x148x1x68x69x86x50x0x1x128x0x104x118x1x128x0x0x46x234x240x192x148x1x128x0x0x25x1x128x0x0x46x1x128x0x0x72x1x127x255x255x255x0x0x0x0x1x71x66x80x0x255
with properties
{columns=reducesinkkey0,reducesinkkey1,reducesinkkey2,reducesinkkey3,reducesinkkey4,reducesinkkey5,reducesinkkey6,reducesinkkey7,reducesinkkey8,reducesinkkey9,reducesinkkey10,reducesinkkey11,reducesinkkey12,
serialization.lib=org.apache.hadoop.hive.serde2.binarysortable.BinarySortableSerDe,
serialization.sort.order=+++++++++++++,
columns.types=bigint,string,int,bigint,int,int,int,string,int,string,string,string,string}
at org.apache.hadoop.hive.ql.exec.mr.ExecReducer.reduce(ExecReducer.java:283)
at org.apache.hadoop.mapred.ReduceTask.runOldReducer(ReduceTask.java:506)
at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:447)
at org.apache.hadoop.mapred.Child$4.run(Child.java
FAILED: Execution Error, return code 2 from
org.apache.hadoop.hive.ql.exec.mr.MapRedTask MapReduce Jobs Launched:
Stage-Stage-1: Map: 1 Reduce: 1 Cumulative CPU: 3.33 sec HDFS
Read: 889 HDFS Write: 314 SUCCESS Stage-Stage-2: Map: 1 Reduce: 1
Cumulative CPU: 1.42 sec HDFS Read: 675 HDFS Write: 0 FAIL
Когда я использую настройки ниже, запрос работает нормально
set hive.optimize.sort.dynamic.partition=false
когда я устанавливаю это значение в true, это дает ту же ошибку.
Исходная таблица хранится в формате последовательности, а таблица назначения хранится в формате RC. Кто-нибудь может объяснить, что делает этот параметр внутренним?
2 ответа
Иногда, когда мы пытаемся сделать Insert Table
с динамическими разделами, установленными в True, мы получаем эти ошибки.
Это происходит потому, что куст проходит некоторые внутренние столбцы, чтобы помочь фазе редуктора, которая не является частью данных, когда hive.optimize.sort.dynamic.partition
включен. Этот параметр не является стабильным.
Вот почему этот параметр отключен по умолчанию в hive0.14.0 и более поздних версиях, но по умолчанию включен в hive0.13.0. Надеюсь, вы получите это....
Ошибка возникает из-за того, что буферы чередования файлов RC выходят из OOM из-за слишком большого количества одновременно открытых записывающих устройств.
Свойство конфигурации улья:
hive.optimize.sort.dynamic.partition
Если этот параметр включен, столбец динамического разделения будет отсортирован по всему миру. Таким образом, мы можем оставить открытым только один модуль записи для каждого значения раздела в редукторе, тем самым уменьшая нагрузку на память в редукторах.
- Значение по умолчанию: true в улье 0.13.0 и 0.13.1; ложь в улье 0.14.0 и позже (HIVE-8151)
- Добавлено в: Улей 0.13.0 с HIVE-6455
Источник - свойства Hive Config