#!/bin/bash
#load
#define the date of yesterday
YESTERDAY=date -d '-1 days' +%Y%m%d
TODAY=$(date +"%Y%m%d")
#获取当前小时:
currentHour=date | awk '{print $4}' | awk -F':' '{print $1}'
#define log dir
ACCESS_LOGS_DIR=/opt/datas/access_logs/$YESTERDAY
#define hive home
HIVE_HOME=/opt/cdh5/hive-0.13.1-cdh5.3.6
$HIVE_HOME/bin/hive -e “set parquet.compression=SNAPPY”
#JOIN调优
$HIVE_HOME/bin/hive -e “set hive.auto.convert.join=ture”
$HIVE_HOME/bin/hive -e “set hive.optimize.bucketmapjoin=ture”
$HIVE_HOME/bin/hive -e “set hive.optimize.bucketmapjoin.sortedmerge=ture”
$HIVE_HOME/bin/hive -e “set hive.auto.convert.sortmerge.join.noconditionnaltask=ture”
#并行执行
$HIVE_HOME/bin/hive -e “set hive.exec.parallel=ture”
#JVM设置:
$HIVE_HOME/bin/hive -e “set mapred.job.reuse.jvm.num.tasks=10”
#调整mapper和reduce个数
$HIVE_HOME/bin/hive -e “set mapred.max.split.size=100000000”
$HIVE_HOME/bin/hive -e “set mapred.min.split.size.per.node=100000000”
$HIVE_HOME/bin/hive -e “set mapred.min.split.size.per.rack=100000000”
$HIVE_HOME/bin/hive -e “set hive.exec.reducers.bytes.per.reducer=500000000”
echo ${TODAY} hive configure load successfully!
hive调优参数:
set parquet.compression=SNAPPY;
JOIN调优:
set hive.auto.convert.join=ture;
set hive.optimize.bucketmapjoin=ture;
set hive.optimize.bucketmapjoin.sortedmerge=ture;
set hive.auto.convert.sortmerge.join.noconditionnaltask=ture;
并行执行:
set hive.exec.parallel=ture;
JVM设置:
set mapred.job.reuse.jvm.num.tasks=10;
设置同时运行的线程数,根据集群资源设置,默认是8
set hive.exec.parallel.thread.number=8
调整mapper和reduce个数:
1.合并小文件,减少map数量:
set mapred.max.split.size=100000000; – 决定每个map处理的最大的文件大小,单位为B
set mapred.min.split.size.per.node=100000000; – 节点中可以处理的最小的文件大小
set mapred.min.split.size.per.rack=100000000; – 机架中可以处理的最小的文件大小
set mapred.reduce.tasks=10; 或者 set hive.exec.reducers.bytes.per.reducer=500000000; (500M)
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
set hive.exec.dynamic.partition=true// 使用动态分区
set hive.exec.dynamic.partition.mode=nonstrick//无限制模式 如果模式是stric,则必须有一个静态分区,且放在最前面 set hive.exec.max.dynamic.partitions.pernode=10000;//每个节点生成动态分区的最大个数
set hive.exec.max.created.files=150000;//一个任务最多可以创建的文件数目
set dfs.datanode.max.xcievers=8192;//限定一次最多打开的文件数