hive数据压缩脚本实现

Posted 一醉方休

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hive数据压缩脚本实现相关的知识,希望对你有一定的参考价值。

#!/bin/bash

#参数个数校验
if [ $# -ne 2 ]
  then
    echo "输入库名:[/core/loan/md/lc/wt/adm] 压缩时间:[1900/非1900]";
    exit 1;
fi;
#压缩库名
db_name=$1
#压缩时间选择
iscompess_type=$2
com_date=""
#脚本路径
script_path="/home/hadoop/hdp_script/load"
#压缩方式
hive_conf=SET hive.exec.compress.output=true;SET hive.exec.parallel=true;
#获取压缩数据的集合
public_arr=(`hdfs dfs -ls -R /user/hive/warehouse/${db_name}.db |grep etl_date |grep part-m |awk -F "/part-m" {print $1}|awk -F " " {print $8}|sort -u`)
#并发控制参数
index=0
#检查压缩结果
function hive_job_status_checking(){
    if [ $? -eq 0 ];then
        echo "$1 压缩成功!!!"
    else
        echo "$1 压缩失败!!!"
        exit 1;
    fi
}
#执行压缩任务
function hive_job_runing(){
    if [ ${flag} != 0 ];then
       hive -e "${hive_conf} insert overwrite table ${db_table_name} partition(etl_date=‘${table_etl_date}‘) select ${table_field} from ${db_table_name} where etl_date=‘${table_etl_date}‘;" &
       hive_job_status_checking ${db_table_name}${table_etl_date}
    else
       hive -e "${hive_conf} insert overwrite table ${db_table_name} partition(etl_date=‘${table_etl_date}‘) select ${table_field} from ${db_table_name} where etl_date=‘${table_etl_date}‘;"
       hive_job_status_checking ${db_table_name}${table_etl_date}
    fi
}
#压缩当前时间的前30天数据
function do_compess_30day(){
    if [[ ${table_etl_date_unix} -le ${com_date_unix} ]];then
       hive_job_runing 
    fi
}
#压缩当前时间数据
function do_compess(){
    if [[ ${table_etl_date_unix} -eq ${com_date_unix} ]];then
       hive_job_runing 
    fi
}

for elem in ${public_arr[@]}
do
   flag=${index:${#index}-1}                                                                #并发控制参数
   index=$((index+1))                                                                       #并发控制参数
   script_name=`echo ${elem}|awk -F / {print $5"*"$6".sh"}|sed s/.db/\//g`            #脚本名称
   db_table_name=`echo ${elem}|awk -F / {print $5 $6}|sed s/.db/./g`                  #库名称和表名称
   table_etl_date=`echo ${elem}|awk -F = {print $2}`                                    #数据抽取时间
   table_field=`cat ${script_path}/${script_name}|grep query_str=|awk -F " {print $2}`  #表字段
   table_etl_date_unix=`date -d "${table_etl_date}"  +%s`                                   #unix时间转换
   if [[ ${iscompess_type} -eq 1900 ]];then
       com_date=`date +%Y-%m-%d -d-30 day`
       com_date_unix=`date -d "${com_date}"  +%s`
       do_compess_30day
   else
       com_date=`date +%Y-%m-%d -d-0 day`
       com_date_unix=`date -d "${com_date}"  +%s`
       do_compess
   fi
done

 

以上是关于hive数据压缩脚本实现的主要内容,如果未能解决你的问题,请参考以下文章

Hadoop基础(五十):压缩和存储

Hive 压缩数据,按数据聚类,按数据排序

代码片段:Shell脚本实现重复执行和多进程

2021年大数据Hive:Hive的数据压缩

Hive文件存储格式和hive数据压缩

一文彻底搞懂Hive的数据存储与压缩