美文网首页
Kylin定时增量build

Kylin定时增量build

作者: 来搞事情 | 来源:发表于2019-02-20 18:33 被阅读0次

    1、从 Kafka 流构建的 Cube

    cubeName=xxxxxxxx
      
    curl -X PUT -H "Authorization: Basic QURNSU46S1lMSU4=" -H 'Content-Type: application/json' -d '{ "sourceOffsetStart": 0, "sourceOffsetEnd": 9223372036854775807, "buildType": "BUILD"}' http://127.0.0.1:7070/kylin/api/cubes/$cubeName/build2
    

    2、从hive构建的Cube

    #!/bin/bash  
      
    ###################################################################################################################  
    ## 脚本功能:之前脚本任务完成后,使用Kylin命令,增量更新Kylin cube  
    ## 修改历史:  
    #     
      
    #加入Kylin增量build cube  
    ##cubeName  cube的名称  
    ##endTime  执行build cube的结束时间 (命令传给Kylin的kylinEndTime = realEndTime + (8小时,转化为毫秒)。只需要给Kylin传入build cube的结束时间即可。)  
    ##buildType  BUILD 构建cube操作(还有Refresh、Merge等操作,增量构建为BUILD)  
    #但是实际时间cube的构建抽取数据时间确比设置时间提前1天(实际上是提前8小时)【2017-10-21~2017-10-22】,但是使用kylinUI构建却没有问题,实际查看kylin源码发现,是由于kylin在server端源码使用的timezone固定为GMT而非配置的GMT+8,而前端UI会根据配置的timezone对页面添加的时间进行转换变GMT+8的时间,然后后端将GMT+8时间在转化为GMT的时间,所以kylinUI的cube构建时间不会出现错误,而使用restAPI构建cube时间不进行timezone转化就是出现时间不准确差8个小时的问题。
    ##只需要指定endtime,startTime 即上次的endTime,在cube的SEGMENT中有记录
    
    kylinMinusTime=$((8 * 60 * 60 * 1000)) #kyin提前8小时,所以需要偏移8小时
    #yesterday=`date -d yesterday +%Y-%m-%d` 
    #prevTimeStamp=`date -d '-5 minute' +%s`  
    #prevTimeStampMs=$(($prevTimeStamp*1000 + `date "+%N"`/1000000)) #将current转换为时间戳,精确到毫秒  
    
    today=`date +%s`  
    #todayTimeStamp=`date -d "$today 00:00:00" +%s`  
    #todayTimeStampMs=$(($today*1000 + `date "+%N"`/1000000)) #将current转换为时间戳,精确到毫秒  
    
    onedayTime=$((24 * 60 * 60 * 1000)) #24小时的毫秒数
    tomorrowTimeStampMs=$(($today*1000 + $onedayTime)) #当前时间偏移24小时
    
    #startTime=$(($prevTimeStampMs + $kylinMinusTime)) 
    endTime=$(($tomorrowTimeStampMs + $kylinMinusTime)) 
    
    cubeName=xxxxxxxx
    
    curl -X PUT -H "Authorization: Basic QURNSU46S1lMSU4=" -H 'Content-Type: application/json' -d '{"endTime":'$endTime', "buildType":"BUILD"}' http://127.0.0.1:7070//kylin/api/cubes/$cubeName/rebuild
    

    3、hive 全量构建

    #!/bin/bash  
      
    ###################################################################################################################  
    ## 脚本功能:datax 同步昨天的数据到hive中后,使用脚本先disable当前的cube,再清空,再重建,因为这个hive中的数据每次都是以前的分区和增量数据构成一个新的分区,不能拿出来增量数据
    ## 修改历史:  
    #     
      
    #加入Kylin增量build cube  
    ##cubeName  cube的名称  
    ##endTime  执行build cube的结束时间 (命令传给Kylin的kylinEndTime = realEndTime + (8小时,转化为毫秒)。只需要给Kylin传入build cube的结束时间即可。)  
    ##buildType  BUILD 构建cube操作(还有Refresh、Merge等操作,增量构建为BUILD)  
    #但是实际时间cube的构建抽取数据时间确比设置时间提前1天(实际上是提前8小时)【2017-10-21~2017-10-22】,但是使用kylinUI构建却没有问题,实际查看kylin源码发现,是由于kylin在server端源码使用的timezone固定为GMT而非配置的GMT+8,而前端UI会根据配置的timezone对页面添加的时间进行转换变GMT+8的时间,然后后端将GMT+8时间在转化为GMT的时间,所以kylinUI的cube构建时间不会出现错误,而使用restAPI构建cube时间不进行timezone转化就是出现时间不准确差8个小时的问题。
      
    kylinMinusTime=$((8 * 60 * 60 * 1000)) #kyin提前8小时,所以需要偏移8小时
    onedayTime=$((24 * 60 * 60 * 1000)) #24小时的毫秒数
    #yesterday=`date -d yesterday +%Y-%m-%d` 
    #prevTimeStamp=`date -d '-5 minute' +%s`  
    #prevTimeStampMs=$(($prevTimeStamp*1000 + `date "+%N"`/1000000)) #将current转换为时间戳,精确到毫秒  \
    
    today=`date -d today +%Y-%m-%d` 
    todayTimeStamp=`date -d "$today 00:00:00" +%s`  
    todayTimeStampMs=$(($todayTimeStamp*1000)) #将current转换为时间戳,精确到毫秒  
    
    tomorrowTimeStampMs=$(($todayTimeStampMs + $onedayTime)) #当前时间偏移24小时
    
    startTime=$(($todayTimeStampMs + $kylinMinusTime)) 
    endTime=$(($tomorrowTimeStampMs + $kylinMinusTime))  
    
    cubeName=xxxxxx
    
    curl -X PUT -H "Authorization: Basic QURNSU46S1lMSU4=" -H 'Content-Type: application/json' http://127.0.0.1:7070/kylin/api/cubes/$cubeName/disable
    #curl -X PUT -H "Authorization: Basic QURNSU46S1lMSU4=" -H 'Content-Type: application/json' http://127.0.0.1:7070/kylin/api/cubes/$cubeName/enable
    curl -X PUT -H "Authorization: Basic QURNSU46S1lMSU4=" -H 'Content-Type: application/json' http://127.0.0.1:7070/kylin/api/cubes/$cubeName/purge
    curl -X PUT -H "Authorization: Basic QURNSU46S1lMSU4=" -H 'Content-Type: application/json' -d '{"startTime":'$startTime', "endTime":'$endTime', "buildType":"BUILD"}' http://127.0.0.1:7070/kylin/api/cubes/$cubeName/build
    

    相关文章

      网友评论

          本文标题:Kylin定时增量build

          本文链接:https://www.haomeiwen.com/subject/ccqkyqtx.html