• 使用shell脚本依据分区信息分批次的下载hive表格数据


    今天的业务场景大概是这样的,我想把hive表格下载到本地文件系统,然后把这个文件传送到另一个服务器上。

    但是这个业务场景一个核心问题就是说我本地机器内存有限,hive表格大概是70G,我是不可能全部下载到本地的。这个时候我想到的一个方法就是依靠分区实现这个目的。

    首先这个hive表格的内容大概是这样的-temp_zida_uids_bowen_content_new_zida:
    uid,mid,content,date
    是没有分区信息。

    我首先要做的就是将这个表格改为具有分区。这种情况我们使用的方法就是将这个原始hive表格加上动态分区。对这方面我参考的就是Hive如何根据表中某个字段动态分区Hive分区(静态分区+动态分区)还有hive分区表详细介绍

    vim transform_fenqu.sh

    大致代码就是这样:

    function create(){
    cat <<EOF
    CREATE TABLE IF NOT EXISTS temp_zida_bowen_fenqu_now(uid string,mid string,content string)
    partitioned by (date string)
    ROW FORMAT DELIMITED FIELDS TERMINATED BY '	'
    LOCATION '/dw_ext/weibo_bigdata_ugrowth/mds/temp_zida_bowen_fenqu_now';
    EOF
    }
    
    
    function set(){
    cat <<EOF
    SET hive.exec.dynamic.partition=true; 
    SET hive.exec.dynamic.partition.mode=nonstrict;
    insert into table temp_zida_bowen_fenqu_now partition (date) select * from temp_zida_uids_bowen_content_new_zida;
    EOF
    }
    
    
    hive -e "`create`"
    echo "1"
    hive -e "`set`"
    echo '2'
    

    这样我们的表格就具有动态分区,我们可以写一个代码检查一下能不能成功
    hive -e "show partitions temp_zida_bowen_fenqu_now"|sort -r
    hive -e "show partitions temp_zida_bowen_fenqu_now"|sort -r|sed -n '1p'|cut -b 4-11

    然后接下来我们要做的就是根据分区下载每个分区对应的数据,然后传送到另一个服务器上,大概的代码如下:

    #! /bin/bash
    dt_ods_tblog_content=`hive -e "show partitions ods_tblog_content"|sort -r|sed -n '1p'|cut -b 4-11`
    date_e=`date -d"1 day ago" +%Y%m%d`
    date_90ago=`date -d"$date_e -89 day" +"%Y%m%d"`
    dt_ods_tblog_content_90days_ago=$date_90ago
    
    first=$date_90ago
    second=$dt_ods_tblog_content
    while [ "$first" -le "$second" ]
    do
    hive -e "select uid,mid,content from temp_zida_bowen_fenqu_now where date=$first" >./data/$first
    rsync -av ./data/$first 172.16.142.33::rsyncpath/data_bowen
    rm ./data/$first
    echo $first
    let first=`date -d "-1 days ago ${first}" +%Y%m%d`
    done
    

    在这个shell代码中涉及到一个日期循环的语句,我是参考的这里的代码linux shell中实现循环日期的实例代码-具体看的是这篇博文的下半部分的代码

  • 相关阅读:
    LoadRunner如何监控Linux下的系统资源
    shareeverything and sharenothing原理区别
    LoadRunner下如何监控Windows系统资源
    简明 Vim 练级攻略
    自由地使用那10000个Web协议的License进行压力测试
    自己做的西直门桥
    Visual Studio问题解答(不断更新)
    记2012微软编程之美全国挑战赛
    matlab也能创作歌曲
    拈游戏
  • 原文地址:https://www.cnblogs.com/lzida9223/p/10536255.html
Copyright © 2020-2023  润新知