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
时间: 2024-10-12 06:07:24

hive数据压缩脚本实现的相关文章

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

一.存储格式行存储和列存储 二.Hive文件存储格式 三.创建语句和压缩 一.存储格式行存储和列存储 行存储可以理解为一条记录存储一行,通过条件能够查询一整行数据. 列存储,以字段聚集存储,可以理解为相同的字段存储在一起. 二.Hive文件存储格式 TEXTFILE, Hive数据表的默认格式,存储方式:行存储. 可以使用Gzip压缩算法,但压缩后的文件不支持split 在反序列化过程中,必须逐个字符判断是不是分隔符和行结束符,因此反序列化开销会比SequenceFile高几十倍. SEQUEN

hive 数据压缩

关于Hadoop HDFS文件的压缩格式选择, 我们通过多个真实的Track数据做测试,得出结论如下: 1.  系统的默认压缩编码方式 DefaultCodec 无论在压缩性能上还是压缩比上,都优于GZIP 压缩编码.这一点与网上的一些观点不大一致,网上不少人认为GZIP的压缩比要高一些,估计和Cloudera的封装及我们Track的数据类型有关. 2.  Hive文件的RCFile 的在压缩比, 压缩效率,及查询效率上都优于SEQENCE FILE (包括RECORD, BLOCK 级别) .

hive 使用脚本清洗数据:时间戳转日期

import sys import datetime for line in sys.stdin: line = line.strip() userid, movieid, rating, unixtime = line.split('\t') weekday = datetime.datetime.fromtimestamp(float(unixtime)).isoweekday() print '\t'.join([userid, movieid, rating, str(weekday)]

hive的数据压缩

Hive文件存储格式包括以下几类: 1.TEXTFILE 2.SEQUENCEFILE 3.RCFILE 4.ORCFILE 其中TEXTFILE为默认格式,建表时不指定默认为这个格式,导入数据时会直接把数据文件拷贝到hdfs上不进行处理. SEQUENCEFILE,RCFILE,ORCFILE格式的表不能直接从本地文件导入数据,数据要先导入到textfile格式的表中, 然后再从表中用insert导入SequenceFile,RCFile,ORCFile表中. 更多用法,一定要去看官网啊!!!

Sqoop 脚本开发规范(实例手把手带你写sqoop export和sqoop import)

首先,先明确,为什么Sqoop需要规范的脚本开发呢? 答:是因为,Sqoop import HDFS/Hive/HBase这些都是手动.但是在实际生产里,有时候,需要用脚本来完成. 比如,通过shell脚本来操作对Sqoop.Hive.HBase.MapReduce.HDFS.Spark.Storm等各种. Sqoop 脚本开发规范 目录规范 1.目录结构体系 /home/hadoop(开发用户)/app/djt(数据来源.业务)/sh/sqoop 示例:/home/hadoop/app/djt

HIVE 配置文件详解

hive的配置: hive.ddl.output.format:hive的ddl语句的输出格式,默认是text,纯文本,还有json格式,这个是0.90以后才出的新配置: hive.exec.script.wrapper:hive调用脚本时的包装器,默认是null,如果设置为python的话,那么在做脚本调用操作时语句会变为python <script command>,null的话就是直接执行<script command>: hive.exec.plan:hive执行计划的文件

hive引入jar包--HIVE.AUX.JARS.PATH和hive.aux.jars.path

hive需要引入包时?该怎么引入? 一.hive-site.xml中的hive.aux.jars.path 此配置项对于hive server有效,但是是不会作用到hive shell.也就是说即使你在hive节点上配置了这一项,但是对于hive shell来说是无效的(为什么会这样?难道不是服务器配置了,所有的hive shell都能生效吗?搞不懂).但是在hive-site.xml的模板文件中找不到hive.aux.jars.path的配置,是不是hive正慢慢改变用户放弃配置此属性呢? 注

hive常用参数配置设置

hive.exec.mode.local.auto 决定 Hive 是否应该自动地根据输入文件大小,在本地运行(在GateWay运行) true hive.exec.mode.local.auto.inputbytes.max 如果 hive.exec.mode.local.auto 为 true,当输入文件大小小于此阈值时可以自动在本地模式运行,默认是 128兆. 134217728L hive.exec.mode.local.auto.tasks.max 如果 hive.exec.mode.

hive的常见函数

查看函数的介绍(必读): show functions ; #查看hive中的所有内置函数desc function extended 函数名; #查看某个函数的详细介绍 1.hive中常见的内置函数 1)集合函数  创建数组  array(ele1,ele2,ele3)  例:select array(1,2,3,4);   判断值是否在数组中  array_contains(arr,value)   例:select array_contains(array(1,2,3,4),5);   创