繁体   English   中英

通过Oozie的Shell脚本

[英]Shell script through Oozie

我目前正在创建一个工作流,该工作流将自动通过sqoop导入数据。 我要做的是验证通过此过程导入的行(记录)数是否正确; sqoop提供的validate参数在这里不起作用,因为sqoop作业没有导入单个表。

我创建了一个名为“ validation”的动作,该动作将调用并执行一个称为“ validation”的shell脚本。 该验证脚本执行以下步骤:

  • 通过使用sqoop eval和自由格式查询来计数和存储数据库源中的行数
  • 在hdfs子目录内的不同分区上连接并运行字数统计; 这是一个循环功能
  • 它将删除零行的任何分区
  • 然后它将评估这两个计数,如果失败则强制退出代码,如果为true则返回

但是,当我运行它时,出现以下错误,该错误未提供我所需的信息:

2014-09-22 19:03:59,156  INFO ShellActionExecutor:539 - USER[v523043] GROUP[-] TOKEN[-] APP[voipImportToHDFS] JOB[0000359-140905180027053-oozie-oozi-W] ACTION[0000359-140905180027053-oozie-oozi-W@validation] action completed, external ID [null]
2014-09-22 19:03:59,159  WARN ShellActionExecutor:542 - USER[v523043] GROUP[-] TOKEN[-] APP[voipImportToHDFS] JOB[0000359-140905180027053-oozie-oozi-W] ACTION[0000359-140905180027053-oozie-oozi-W@validation] Launcher ERROR, reason: Main class [org.apache.oozie.action.hadoop.ShellMain], exit code [1]
2014-09-22 19:03:59,177  INFO ActionEndXCommand:539 - USER[v523043] GROUP[-] TOKEN[-] APP[voipImportToHDFS] JOB[0000359-140905180027053-oozie-oozi-W] ACTION[0000359-140905180027053-oozie-oozi-W@validation] end executor for wf action 0000359-140905180027053-oozie-oozi-W with wf job 0000359-140905180027053-oozie-oozi-W
2014-09-22 19:03:59,198  INFO ActionEndXCommand:539 - USER[v523043] GROUP[-] TOKEN[-] APP[voipImportToHDFS] JOB[0000359-140905180027053-oozie-oozi-W] ACTION[0000359-140905180027053-oozie-oozi-W@validation] ERROR is considered as FAILED for SLA

我的验证脚本使用以下命令:

  • 鱿鱼评估...
  • 项目清单

Hadoop的FS-猫...

这里有我忽略的兼容性问题吗? 我是否需要进行其他配置?

我的验证脚本(进行中的版本):

for table in ${tables[*]}
do

    #Get the number of records from DB Exadata
    verifiedCount=$(sqoop eval --connect $3 --query "SELECT COUNT(*) FROM $4.${tables[table]} WHERE INTRVL_DT = To_Date('$5')" | awk '/([0-9]+)/{print $2}')
    #echo "Total Number of Records " $verifiedCount

    #Count the number of rows imported


    totalRows=0
    for ((i=0;i<$mapJobs;i++)) {
        count[$i]=$(hadoop fs -cat $6$7/${tables[table]}/$8/$9/$10/part-m-0000$i | wc -l) 
        totalRows=$((totalRows + ${count[$i]}))
        #if value has 0 lines, remove the file from edgenode to limit overhead
        if [ ${count[$i]} -eq "0" ]
            then
                hadoop fs -rmr $6$7/${tables[table]}/$8/$9/$10/part-m-0000$i
                echo "Removing..."
            fi
    }
    #echo values
    if [ "$totalRows" -eq "$verifiedCount" ]
    then
        echo "evaluation=true"
        evaluation=true
    else
        echo "evaluation=false"
        evaluation=false
        exit 40
    fi
done

蛮力错误调试使我发现以下行错误:

hadoop fs -rmr $6$7/${tables[table]}/$8/$9/$10/part-m-0000$i

特别是,-rmr不能很好地与环境配合使用,从而导致其崩溃。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM