本文主要包含hive调优,任务并行库,多任务并行,并行任务,百度网盘下载并行任务等服务器相关知识,网友希望可以进行参考
[Hive]Hive调优:让任务并行执行,hive调优
业务背景
extract_trfc_page_kpi的hive sql如下:
set mapred.job.queue.name=pms;
set hive.exec.reducers.max=8;
set mapred.reduce.tasks=8;
set mapred.job.name=extract_trfc_page_kpi;
insert overwrite table pms.extract_trfc_page_kpi partition(ds='$yesterday')
select distinct
page_type_id,
pv,
uv,
'$yesterday' update_time
from
(
--针对PC、H5
select
page_type_id,
sum(pv) as pv,
sum(uv) as uv
from dw.rpt_trfc_page_kpi
where ds = '$yesterday' and stat_type = 1
group by page_type_id
union all
--PC搜索页特殊处理
select
5 as page_type_id,
sum(pv) as pv,
sum(uv) as uv
from dw.rpt_trfc_page_kpi
where ds = '$yesterday' and stat_type = 1 and page_type_id in (51, 52)
union all
--针对APP
select
a.page_type_id,
sum(pv) as pv,
sum(uv) as uv
from dw.rpt_trfc_page_kpi a
left outer join (
select distinct
page_type_id,
old_page_type_id
from tandem.mobile_backend_page_url_rule
where is_delete = 0
) b on (a.page_type_id = b.old_page_type_id)
where a.ds = '$yesterday' and stat_type = 1
group by a.page_type_id
) t;
上面的sql中存在两个union all操作,顺序执行下来的话,需要耗时20分钟。
优化策略
分析以上的sql,其中union all前后的三个查询操作并无直接关联,因此没有必要顺序执行,因此优化的思路是让这三个查询操作并行执行,hive提供了如下参数实现job的并行操作:
// 开启任务并行执行
set hive.exec.parallel=true;
// 同一个sql允许并行任务的最大线程数
set hive.exec.parallel.thread.number=8;
方案一
在执行sql时加上上面的两个hive参数,如:
set mapred.job.queue.name=pms;
set hive.exec.reducers.max=8;
set mapred.reduce.tasks=8;
set hive.exec.parallel=true;
set hive.exec.parallel.thread.number=8;
set mapred.job.name=extract_trfc_page_kpi;
insert overwrite table pms.extract_trfc_page_kpi partition(ds='$yesterday')
select distinct
page_type_id,
pv,
uv,
'$yesterday' update_time
from
(
--针对PC、H5
select
page_type_id,
sum(pv) as pv,
sum(uv) as uv
from dw.rpt_trfc_page_kpi
where ds = '$yesterday' and stat_type = 1
group by page_type_id
union all
--PC搜索页特殊处理
select
5 as page_type_id,
sum(pv) as pv,
sum(uv) as uv
from dw.rpt_trfc_page_kpi
where ds = '$yesterday' and stat_type = 1 and page_type_id in (51, 52)
union all
--针对APP
select
a.page_type_id,
sum(pv) as pv,
sum(uv) as uv
from dw.rpt_trfc_page_kpi a
left

