Как оптимизировать загрузку данных 150GB в таблицу кустов? - PullRequest
0 голосов
/ 30 января 2019

У меня есть файл 150 ГБ в таблице этапов куста, который использует следующие свойства таблицы

    ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
    WITH SERDEPROPERTIES (
       "separatorChar" = "|",
       "quoteChar"     = "'",
       "escapeChar"    = "\\"
    )  
    STORED AS TEXTFILE;

Теперь, когда я загружаю эти данные в основную таблицу, происходит сбой с ошибка кучи Java после бега в течение одного часа.Я использую многораздельную основную таблицу, и в данных содержится около 12000 разделов.Для загрузки данных я использую простой hql:

    insert overwrite mainTable partition(date)
    select * from stage table;

Я также попытался увеличить объем памяти карты до 15 ГБ, но все равно это не удается.Есть ли способ оптимизировать это?Любое решение, которое включает искру или улей, будет работать.

Ответы [ 3 ]

0 голосов
/ 30 января 2019

Я думаю, что вы получите так много разделов в этой задаче SQL. ошибка кучи Java может быть вызвана большим количеством задач.

Таким образом, вы можете создать таблицу разделов диапазона (по месяцам), чтобы уменьшить количество задач.

0 голосов
/ 30 января 2019

Добавить distribute by partition key

insert overwrite mainTable partition(date)
    select * from stage table 
distribute by date;

это вызовет финальную стадию сокращения (если она работает только на карте), и каждый редуктор запишет один раздел, а не все, создавая меньше файлов и используя меньшебуферы, потребляющие меньше памяти.

Если вам нужно больше параллелизма, проверьте настройку куста bytes.per.reducer, возможно, он слишком высок.

set hive.exec.reducers.bytes.per.reducer=67108864;

Также вы можете использовать распределение по ключу раздела и случайное целое число для распределения данныхравномерно между несколькими редукторами: distribute by substr(date), FLOOR(RAND()*100.0)%20

0 голосов
/ 30 января 2019

Можете ли вы проверить следующее: 1) Попробуйте увеличить HADOOP_HEAPSIZE для hive-server2 в /etc/hive/conf/hive-env.sh 2) Перезапустите Hive, используя следующие команды, подключившись к главному узлу, чтобы отразить изменения в настройках sudo stop hive-hcatalog-server sudo start hive-hcatalog-server статус sudo hive-hcatalog-server

Ссылка: https://aws.amazon.com/premiumsupport/knowledge-center/emr-hive-outofmemoryerror-heap-space/

...