Я новичок в улье, и у меня возникла одиссея проблем с получением большого (1 ТБ) файла HDFS в секционированную управляемую таблицу Hive. Не могли бы вы помочь мне обойти это? Мне кажется, что у меня где-то плохая конфигурация, потому что я не могу выполнять задания редуктора.
Вот мой запрос:
DROP TABLE IF EXISTS ts_managed;
SET hive.enforce.sorting = true;
CREATE TABLE IF NOT EXISTS ts_managed (
svcpt_id VARCHAR(20),
usage_value FLOAT,
read_time SMALLINT)
PARTITIONED BY (read_date INT)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS ORC
TBLPROPERTIES("orc.compress"="snappy","orc.create.index"="true","orc.bloom.filter.columns"="svcpt_id");
SET hive.vectorized.execution.enabled = true;
SET hive.vectorized.execution.reduce.enabled = true;
SET set hive.cbo.enable=true;
SET hive.tez.auto.reducer.parallelism=true;
SET hive.exec.reducers.max=20000;
SET yarn.nodemanager.pmem-check-enabled = true;
SET optimize.sort.dynamic.partitioning=true;
SET hive.exec.max.dynamic.partitions=10000;
INSERT OVERWRITE TABLE ts_managed
PARTITION (read_date)
SELECT svcpt_id, usage, read_time, read_date
FROM ts_raw
DISTRIBUTE BY svcpt_id
SORT BY svcpt_id;
Мои характеристики кластера:
- Кластер виртуальных машин
- Всего узлов 4
- 4 узла данных
- 32 ядра
- 140 ГБ RAM
- Hortonworks HDP 3.0
- Apache Tez в качестве движка Hive по умолчанию
- Я единственный пользователь кластера
Мои конфигурации пряжи:
yarn.nodemanager.resource.memory-mb = 32GB
yarn.scheduler.minimum-allocation-mb = 512MB
yarn.scheduler.maximum-allocation-mb = 8192MB
yarn-heapsize = 1024MB
Мои конфигурации Hive:
hive.tez.container.size = 682MB
hive.heapsize = 4096MB
hive.metastore.heapsize = 1024MB
hive.exec.reducer.bytes.per.reducer = 1GB
hive.auto.convert.join.noconditionaltask.size = 2184.5MB
hive.tex.auto.reducer.parallelism = True
hive.tez.dynamic.partition.pruning = True
Мои тез-конфиги:
tez.am.resource.memory.mb = 5120MB
tez.grouping.max-size = 1073741824 Bytes
tez.grouping.min-size = 16777216 Bytes
tez.grouping.split-waves = 1.7
tez.runtime.compress = True
tez.runtime.compress.codec = org.apache.hadoop.io.compress.SnappyCodec
Я пробовал бесчисленное количество конфигураций, включая:
- Разделение на дату
- Разделение по дате, кластер по svcpt_id с ведрами
- Разделение по дате, фильтр bloom по svcpt, сортировка по svcpt_id
- Разделение по дате, фильтр bloom по svcpt, распределение и сортировка по svcpt_id
Я могу запустить свою вершину отображения, но я еще не завершил свою первую вершину редуктора. Вот мой самый последний пример из приведенного выше запроса:
----------------------------------------------------------------------------------------------
VERTICES MODE STATUS TOTAL COMPLETED RUNNING PENDING FAILED KILLED
----------------------------------------------------------------------------------------------
Map 1 .......... container SUCCEEDED 1043 1043 0 0 0 0
Reducer 2 container RUNNING 9636 0 0 9636 1 0
Reducer 3 container INITED 9636 0 0 9636 0 0
----------------------------------------------------------------------------------------------
VERTICES: 01/03 [=>>-------------------------] 4% ELAPSED TIME: 6804.08 s
----------------------------------------------------------------------------------------------
Ошибка была:
Error: Error while processing statement: FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.tez.TezTask. Vertex failed, vertexName=Reducer 2, vertexId=vertex_1537061583429_0010_2_01, diagnostics=[Task failed, taskId=task_1537061583429_0010_2_01_000070, diagnostics=[TaskAttempt 0 failed, info=[Error: Error while running task ( failure ) : java.lang.OutOfMemoryError: unable to create new native thread
Я либо получаю эту ошибку OOM, которую, кажется, не могу обойти, либо я получаю датаноды, отключенные от сети и неспособные удовлетворить мои требования к коэффициенту репликации.
На данный момент я занимаюсь устранением неполадок более 2 недель. Будем признательны за любые контакты профессиональных консультантов, которым я могу заплатить для решения этой проблемы.
Заранее спасибо!
set mapred.reduce.tasks=100
и посмотрите, сколько задач редуктора вы видите в запросе. - person Gaurang Shah   schedule 18.09.2018DISTRIBUTE BY
иSORT BY
в вашем запросе? Вы пробовали разные механизмы исполнения, напримерset hive.execution.engine=mr
? - person serge_k   schedule 18.09.2018set hive.execution.engine=mr
не поддерживается в моей версии Hortonworks Data Platform. Я пробовал сDISTRIBUTE BY
иSORT BY
и без них - person Zafar   schedule 18.09.2018SORT BY
в свой запрос, потому что с фильтром цветения ORC, если входящие данные не сортируются, файлы в каждом файле ORC не являются взаимоисключающими в отношении фильтра цветения. Например, если я устанавливаю свой фильтр цветения для столбца со значениями 1-10 и у меня есть 5 файлов, я хочу убедиться, что в каждом файле есть только 2 числа. Для этого данные должны быть отсортированы. - person Zafar   schedule 18.09.2018