抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >
实现逻辑:

SGE + bash + stat + awk + rg命令实现并发扫描PB级的数据

  1. SGE(Sun Grid Engine)
    SGE是一款作业调度系统,其组成部分有node(单台或多台)、后台程序(即master、execd)、队列(queue)、用户命令(提交、查看、修改等功能)
  2. stat命令(查看文件或文件系统的状态信息)
    选项:-c(将输出的内容指明为自定义格式)
    %F:标识文件类型
    %g:以组ID号来标识属组
    %G:以组名称来标识属组
    %u:以用户ID标识拥有者
    %U:以用户名称标识拥有者
    %s:标识文件大小
    %S:标识每个基本块的大小
    %x:最后访问时间并以人类可读的方式输出
    %z:最后的改变时间
  3. rg(ripgrep)

获取扫秒脚本进行并发投递

function get_script(){
        if [[ $1 == "value1" ]]; then
            nj="/XXXX"
        elif [[ $1 == "value2" ]]; then
            nj="/XXXX"
        elif [[ $1 == "value3" ]]; then
            nj="/XXXX"
        else
            echo "Please use : value1 | value2 | value3"
        fi
        xx_data_dir="/XXXX/home/XXXX/data/"
        xx_public_dir="/XXXX/home/XXXX/public/"
        declare -a xx_array1
        declare -a xx_array2
        xx_array1=`cd $nj && ls -l | grep "^d" | awk '{print $NF}'`
            for i in $xx_array1
            do
               xx_array2=`cd $nj/$i && ls -l | grep "^d" | awk '{print $NF}'`
                 for j in $xx_array2
                do
                      file_sh_name=`echo  $i$j | awk '{gsub(/\//,"_",$nj)}{print $0}'`
                      echo "rg --files $nj/$i/$j|xargs -I {} stat -c "%n####%U####%G####%s####%x####%z"  {} &> $xx_data_dir$1$file_sh_name.txt" > $xx_public_dir$1$file_sh_name.sh
                done
          done
       sleep 1m
}
通过循环语句进行任务投递
function send_task(){
    declare -a script
    script_dir='/XXXX/home/XXXX/public/$1/'
    script=`ls -l /XXXX/home/XXXX/public/$1/ | grep -v "total" | awk '{print $NF}'`

    for scr_list in $script
    do
            qsub -l vf=0,p=0  $script_dir$scr_list
            sleep 1m
    done
}
function go_on(){
    #获取执行脚本
    get_script $1
    #将投递任务执行
    send_task $1
}

评论