Настройка большого задания импорта Hive
Я новичок и пытаюсь взять большой (1,25 ТБ несжатый) файл hdfs и поместить его в управляемую таблицу Hive. Это уже на HDFS в формате CSV (из sqoop) с произвольным разделом, и я помещаю его в более организованный формат для запросов и присоединения. Я на HDP 3.0 использую Tez. Вот мой hql
:
USE MYDB;
DROP TABLE IF EXISTS new_table;
CREATE TABLE IF NOT EXISTS new_table (
svcpt_id VARCHAR(20),
usage_value FLOAT,
read_time SMALLINT)
PARTITIONED BY (read_date INT)
CLUSTERED BY (svcpt_id) INTO 9600 BUCKETS
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS ORC
TBLPROPERTIES("orc.compress"="snappy");
SET hive.exec.dynamic.partition=true;
SET hive.exec.dynamic.partition.mode=nonstrict;
SET hive.exec.max.dynamic.partitions.pernode=2000;
SET hive.exec.max.dynamic.partitions=10000;
SET hive.vectorized.execution.enabled = true;
SET hive.vectorized.execution.reduce.enabled = true;
SET hive.enforce.bucketing = true;
SET mapred.reduce.tasks = 10000;
INSERT OVERWRITE TABLE new_table
PARTITION (read_date)
SELECT svcpt_id, usage, read_time, read_date
FROM raw_table;
Вот как это настраивает Тез (из моей последней ошибки):
--------------------------------------------------------------------------------
VERTICES STATUS TOTAL COMPLETED RUNNING PENDING FAILED KILLED
--------------------------------------------------------------------------------
Map 1 SUCCEEDED 1043 1043 0 0 0 0
Reducer 2 RUNNING 9600 735 19 8846 0 0
Reducer 3 INITED 10000 0 0 10000 0 0
--------------------------------------------------------------------------------
VERTICES: 01/03 [==>>------------------------] 8% ELAPSED TIME: 45152.59 s
--------------------------------------------------------------------------------
Я работал над этим некоторое время. Сначала я не мог получить первый map 1
вершина для запуска, поэтому я добавил в ведра. 96 ведер получили первый картограф, но reducer 2
не удалось сослаться на проблемы с дисковым пространством, которые не имели смысла. Затем я увеличил количество сегментов до 9600 и сократил количество задач до 10000 и reduce 2
вершина начала работать, хотя и медленно. Этим утром я обнаружил, что произошла ошибка, потому что мой namenode отключился из-за ошибки пространства кучи Java в сборщике мусора.
У кого-нибудь есть руководящие советы для меня? Я чувствую, что стреляю в темноте с количеством задач уменьшения, количеством ведер и всеми конфигами, показанными ниже.
hive.tez.container.size = 5120MB
hive.exec.reducers.bytes.per.reducer = 1GB
hive.exec.max.dynamic.partitions = 5000
hive.optimize.sort.dynamic.partition = FALSE
hive.vectorized.execution.enabled = TRUE
hive.vectorized.execution.reduce.enabled = TRUE
yarn.scheduler.minimum-allocation-mb = 2G
yarn.scheduler.maximum-allocation-mb = 8G
mapred.min.split.size=?
mapred.max.split.size=?
hive.input.format=?
mapred.min.split.size=?
Не настроил LLAP
Мой кластер имеет 4 узла, 32 ядра и 120 ГБ памяти. Я не использовал более 1/3 хранилища кластера.
1 ответ
SET hive.execution.engine = tez;
SET hive.vectorized.execution.enabled = false;
SET hive.vectorized.execution.reduce.enabled = false;
SET hive.enforce.bucketing = true;
SET hive.exec.dynamic.partition.mode = nonstrict;
SET hive.stats.autogather = true;
SET hive.exec.parallel = true;
SET hive.exec.parallel.thread.number = 60;
SET mapreduce.job.skiprecords = true;
SET mapreduce.map.maxattempts =10;
SET mapreduce.reduce.maxattempts =10;
SET mapreduce.map.skip.maxrecords = 300;
SET mapreduce.task.skip.start.attempts = 1;
SET mapreduce.output.fileoutputformat.compress = false;
SET mapreduce.job.reduces = 1000;
Вы можете попробовать некоторые из вышеуказанных настроек!