如何识别Sqoop故障并处理它们?

时间:2018-03-23 21:08:19

标签: sql-server shell validation hive sqoop

我使用sqoop将数据从hive表导出到SQLServer表,但有时所有记录都不会导出。

我不确定如何在没有人工干预的情况下识别此故障。我有一个计划通过编写一个shell脚本来解决这个问题 -

1)在变量中存储配置单元表的计数。 2)将SQL Server表的计数存储在另一个变量中。 3)比较两个变量的值,

    if var1 != var 2 
    { 
       Delete the rows in SQL Server Server;
        Rerun my sqoop script
    }
    else
       exit;

问题: 用我目前的方法, 如何在shell脚本中的变量中存储hive表的行数? 如何在shell脚本中存储SQL-Server-Management工作室中表的行数?

2 个答案:

答案 0 :(得分:0)

Sqoop提供了一个开箱即用的验证工具,以确保执行导入/导出的正确性。您可以使用以下标志执行此操作:

set(l1) ^ set(l2)

请参阅https://sqoop.apache.org/docs/1.4.6/SqoopUserGuide.html#validation详细说明所有3个验证界面。

据此,

  

Validator - 通过将决策委派给ValidationThreshold并将失败处理委托给ValidationFailureHandler来驱动验证逻辑。默认实现是RowCountValidator,它验证来自源和目标的行计数。

您可以通过实现自己的Validator进一步对验证输出执行操作,如下所示:

  

验证框架是可扩展和可插拔的。它带有默认实现,但接口可以扩展为允许自定义实现,方法是将它们作为命令行参数的一部分传递,如下所述。

enter image description here

答案 1 :(得分:0)

基本上,您在将数据从配置单元导出到sqlserver后尝试进行协调。要从sqlserver获取计数,您可以编写java / scala jdbc程序。

以下是伪代码

hiveCount = `hive -e "select count(*) from foo_table"`
sqlServerCount= java/scala jdbcCount.jar