OutOfMemory异常-HDInsight LLAP群集中的Hive多联接查询

时间:2018-11-30 13:41:14

标签: azure join hive apache-spark-sql hdinsight

我正在尝试在Azure HDInsight LLAP Hive群集中进行配置单元多联接查询。

运行约20分钟后给出 OutOfMemory 异常。

查询:

  

创建表tt作为SELECT Given_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_typ_desc,f.stmt_typ,f.stmt_typ_desc,f.item,f.item_name,   f.short_mnem,f.item_mnem,coalesce(f1.frq,f.frq)作为frq,   Coalesce(f1.frq_desc,f.frq_desc)as frq_desc,f.yr,f.seq,   f.fiscal_per_end_date,concece(f1.erng_rpt_date,f.erng_rpt_date)为   erng_rpt_date,f.per_update_flg,f.per_update_desc,f.per_srce,   f.reported_curr,coalesce(f1.reported_val,f.reported_val)为   report_val,f.exch_rate,f.ws_curr,f.unit_typ FROM   imdl_irdp_dev.cur_std_fundamentals f加入   imdl_irdp_dev.cur_ws_comp_map cm ON f.ws_cd = cm.ws_cd加入   imdl_irdp_dev.cur_scrty_sedol_chg_hstry的ON cm.qad_scrty_cd =   s.qad_scrty_cd AND cm.typ = s.typ左联接    imdl_irdp_dev.cur_std_fundamentals 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 '   按yr,seq,stmt_typ_desc,item;

突出显示的表大约有15亿条记录。我们无法更改查询,因为这是业务需求。但是我们可以优化它,前提是查询结果不应更改。

我也尝试过以下选项,但还是没有运气。

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 :(得分:0)

您可以遵循2种最佳做法。仅选择几列时,引入分区以读取必要的数据并将文件格式更改为ORC。这将减少数据负载量,并使您的执行速度更快。 在cur_std_fundamentals上应用过滤器(f1.frq ='B')时,记录数是多少。是否有分区取决于数据分布。

您还可以通过执行自联接1st来中断查询并查看性能。

您使用了任何压缩方式吗?

答案 1 :(得分:0)

重新排序联接后效果很好。

  

选择“ 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_ .frq_desc)作为   frq_desc,f2.yr,f2.seq,f2.fiscal_per_end_date,coalesce(f3.erng_rpt_date,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.ws_curr,f2.unit_typ,f2.ws_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,f.item,f.item_name,f.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   从(选择comp_map.ws_cd从(选择qad_scrty_cd,典型   imdl_irdp_dev.cur_scrty_sedol_chg_hstry其中given_qad_sedol在   (substr('B07C796',0,6)))chg_hstry连接(选择ws_cd,typ,   来自imdl_irdp_dev.cur_ws_comp_map的qad_scrty_cd)comp_map ON   chg_hstry.qad_scrty_cd = comp_map.qad_scrty_cd AND chg_hstry.typ =   comp_map.typ)f1连接(选择   ws_cd,ws_id,cntry_cd,cntry_name,entity_name,stmt_sub_typ,stmt_sub_typ_desc,stmt_typ,stmt_typ_desc,item,item_name,shortmnem,item_mnem,frq,frq_desc,yr,seq,fi_per_date_re_rate,re_port_rate_rece,re_port_rate, ws_curr,unit_typ,ws_val   来自imdl_irdp_dev.cur_std_fundamentals_part在2018年与   2018 AND frq ='A'AND stmt_typ in('IS','BS','CF','Other'))f ON   f.ws_cd = f1.ws_cd)f2左连接(选择frq,frq_desc,erng_rpt_date,   report_val,ws_cd,项目,yr,seq来自   imdl_irdp_dev.cur_std_fundamentals_part其中2018年与2018年之间   AND frq ='B'AND stmt_typ in('IS','BS','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;