OutOfMemory Exception - Hive многопользовательский запрос в кластере HDInsight LLAP - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь выполнить запрос на объединение нескольких кустов в кластере кустов LLAP Azure HDInsight.

Это дает исключение OutOfMemory после выполнения в течение примерно 20 минут.

Запрос:

создать таблицу tt в качестве SELECT заданных_qad_sedol как Sedol7, f.ws_cd, f.ws_id, f.cntry_cd, f.cntry_name, f.entity_name, f.stmt_sub_typ, f.stmt_sub_typttt_t_t_pf.stmt_typ_desc, f.item, f.item_name, f.short_mnem, f.item_mnem, объединяются (f1.frq, f.frq) как frq, объединяются (f1.frq_desc, f.frq_desc) как frq_desc, f.yr,f.seq, f.fiscal_per_end_date, coalesce (f1.erng_rpt_date, f.erng_rpt_date) как erng_rpt_date, f.per_update_flg, f.per_update_desc, f.per_srce, f.reported_val, f.f.exch_rate, f.ws_curr, f.unit_typ FROM imdl_irdp_dev.cur_std_fundamentals f JOIN imdl_irdp_dev.cur_ws_comp_map cm ON f.ws_cd = cm.ws_cd JOINLEFT JOIN imdl_irdp_dev.cur_std_fundamentals f1 ON f.ws_cd = f1.ws_cd AND f.item = f1.item AND f.yr = f1.yr AND f.seq = f1.seq AND f1.frq = 'B' ЗАКАЗАТЬ ПО ГОДУ, seq, stmt_typ_desc, item;

В выделенной таблице содержится около 1,5 миллиарда записей.Мы не можем изменить запрос, так как это бизнес-требование.Но мы можем оптимизировать его при условии, что результат запроса не должен быть изменен.

Я пробовал также варианты ниже, но все же не повезло.

set mapreduce.map.memory.mb=8000;
set mapreduce.map.java.opts=-Xmx46080m;
set mapreduce.reduce.memory.mb=8000;
set mapreduce.reduce.java.opts=-Xmx7000m;
set hive.tez.container.size=8000;
set hive.tez.java.opts=-Xmx7000m;   
set hive.auto.convert.join.noconditionaltask.size=1000000000;
set set dfs.blocksize=1073741824;

Есть ли способ, которым мы можем оптимизировать этозапрос?

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Это хорошо работало после переупорядочения соединений.

выберите 'B07C796' в качестве Sedol7, f2.ws_cd, f2.cntry_name, f2.entity_name, f2.stmt_sub_typ_desc, f2.stmt_typ, f2.item, f2.item_mnem, coalesce (f3.frq, f2.frq) в качестве frq, coalesce (f3.frq_desc, f2.frq_desc) в виде frq_desc, f2.yr, f2.seq, f2.fiscal_per_end_date, coalesce (f3.dngr)f2.erng_rpt_date) как erng_rpt_date, f2.per_update_flg, f2.per_update_desc, f2.per_srce, f2.reported_curr, coalesce (f3.reported_val, f2.reported_val), как сообщил_val, f2.exch_rate, f2.ty_f2. f.wsws_val из (выберите f.ws_cd, f.ws_id, f.cntry_cd, f.cntry_name, f.entity_name, f.stmt_sub_typ, f.stmt_sub_typ_desc, f.stmt_typ, f.stmt_typ_desc, fite.short_mnem, f.item_mnem, f.frq, f.frq_desc, f.yr, f.seq, f.fiscal_per_end_date, f.erng_rpt_date, f.per_update_flg, f.per_update_desc, f.per_srce, f.reported_curr, f.reported_val,f.exch_rate, f.ws_curr, f.unit_typ, f.ws_val from (выберите comp_map.ws_cd из (выберите qad_scrty_cd, введите из imdl_irdp_dev.cur_scrty_sedol_chg_hstry гдеGiven_qad_sedol in (substr ('B07C796', 0,6))) chg_hstry join (выберите ws_cd, typ, qad_scrty_cd из imdl_irdp_dev.cur_ws_comp_map) comp_map ON chg_hstry.qad_scrty_cd = файл_приложениявыберите ws_cd, ws_id, cntry_cd, cntry_name, ENTITY_NAME, stmt_sub_typ, stmt_sub_typ_desc, stmt_typ, stmt_typ_desc, пункт, item_name, short_mnem, item_mnem, FRQ, frq_desc, год, далее, fiscal_per_end_date, erng_rpt_date, per_update_flg, per_update_desc, per_srce, reported_curr, reported_val, exch_rate, ws_curr, unit_typ, ws_val из imdl_irdp_dev.cur_std_fundamentals_part, где год между 2018 и 2018, и frq = 'A', и stmt_typ в ('IS', 'BS', 'CF', 'Other')) f ON f.ws_d.ws_cd) f2 оставил соединение (выберите frq, frq_desc, erng_rpt_date, reports_val, ws_cd, item, yr, seq из imdl_irdp_dev.cur_std_fundamentals_part, где yr BETWEEN 2018 И 2018 И Frq = 'B' в BSM, 'CF', 'Other')) f3 ON f2.ws_cd = f3.ws_cd AND f2.item = f3.item AND f2.yr = f3.yr AND f2.seq = f3.seq ЗАКАЗАТЬ f2.yr,f2.seq, f2.item;

0 голосов
/ 01 декабря 2018

Вы можете следовать 2 лучшим практикам.Введите раздел для чтения необходимых данных и измените формат файла на ORC, так как вы выбираете только несколько столбцов.Это уменьшит объем загрузки данных и ускорит выполнение.Какое количество записей при применении фильтра (f1.frq = 'B') для cur_std_fundamentals.Наличие раздела на нем зависит от распределения данных.

Вы также можете разорвать запрос, выполнив 1-ое самостоятельное соединение и увидев производительность.

У вас есть какое-либо сжатие?

...