Hadoop 如何在sqoop导入作业期间维护故障恢复

Hadoop 如何在sqoop导入作业期间维护故障恢复,hadoop,sqoop,oozie,Hadoop,Sqoop,Oozie,我们计划创建Oozie作业,该作业运行Sqoop命令以每小时将数据从SQL server导入HDFS。但我们面临的挑战是,如何在作业中途失败时发出警报,以及sqoop如何检查哪些数据导入成功,哪些数据仍然挂起。在sqoop导入期间是否有任何流程来维护事务和重试机制。我们还可以对他们的失败发出警报。您可以配置Oozie的工作流,以便在失败时发送电子邮件。 您可以通过将错误标记从任何操作重定向到发送电子邮件操作来实现这一点 电子邮件配置的示例可能如下所示 <action name="send

我们计划创建Oozie作业,该作业运行Sqoop命令以每小时将数据从SQL server导入HDFS。但我们面临的挑战是,如何在作业中途失败时发出警报,以及sqoop如何检查哪些数据导入成功,哪些数据仍然挂起。在sqoop导入期间是否有任何流程来维护事务和重试机制。我们还可以对他们的失败发出警报。

您可以配置Oozie的工作流,以便在失败时发送电子邮件。 您可以通过将错误标记从任何操作重定向到发送电子邮件操作来实现这一点

电子邮件配置的示例可能如下所示

 <action name="send-email">
    <email xmlns="uri:oozie:email-action:0.1">
          <to>${emailToAddress}</to>
          <subject>Failed to import table.</subject>
          <body>The following import has failed.
            failed the workflow that was trying to perform job --exec import-${tableName}-${environment}-${format}-${db} --verbose
            ID= ${wf:id()}
            NAME= ${wf:name()}
            APP PATH= ${wf:appPath()}
            USER= ${wf:user()}
            GROUP= ${wf:group()}
            NAMENODE= ${nameNode}
            JOBTRACKER = ${jobTracker}
            QUEUE = ${queueName}
            START DATE = ${start}
            error message[${wf:errorMessage(wf:lastErrorNode())}]</body>
    </email>
    <ok to="fail-job"/>
    <error to="fail-email"/>
</action>
从Oozie 3.1开始,您可以在每个操作中配置参数retry和retry interval。要实现这一点,可以在action标记内设置以下参数

<action name="a" retry-max="2" retry-interval="1">
....
</action>


您可以在oozie-default.xml上查找或修改重试和重试间隔默认值。通用默认值已指定

您可以将Oozie的工作流配置为在失败时发送电子邮件。 您可以通过将错误标记从任何操作重定向到发送电子邮件操作来实现这一点

电子邮件配置的示例可能如下所示

 <action name="send-email">
    <email xmlns="uri:oozie:email-action:0.1">
          <to>${emailToAddress}</to>
          <subject>Failed to import table.</subject>
          <body>The following import has failed.
            failed the workflow that was trying to perform job --exec import-${tableName}-${environment}-${format}-${db} --verbose
            ID= ${wf:id()}
            NAME= ${wf:name()}
            APP PATH= ${wf:appPath()}
            USER= ${wf:user()}
            GROUP= ${wf:group()}
            NAMENODE= ${nameNode}
            JOBTRACKER = ${jobTracker}
            QUEUE = ${queueName}
            START DATE = ${start}
            error message[${wf:errorMessage(wf:lastErrorNode())}]</body>
    </email>
    <ok to="fail-job"/>
    <error to="fail-email"/>
</action>
从Oozie 3.1开始,您可以在每个操作中配置参数retry和retry interval。要实现这一点,可以在action标记内设置以下参数

<action name="a" retry-max="2" retry-interval="1">
....
</action>


您可以在oozie-default.xml上查找或修改重试和重试间隔默认值。指定了通用默认值

Oozie有配置/发送失败电子邮件的选项。非常感谢您的回复,如果sqoop导入在传输过程中失败,是否有重试或事务机制?我提供了一个与重试操作相关的答案。你可以。此外,我还提供了对Oozie 4.2文档的参考。Oozie可以选择在失败时配置/发送电子邮件。非常感谢您的回复,如果sqoop导入在传输过程中失败,是否有重试或事务机制?我提供了一个与重试操作相关的答案。你可以。我还提供了对Oozie 4.2文档的参考。我提供了一个与操作重试相关的答案。你可以。此外,我还提供了对Oozie 4.2文档的参考。确实,可以配置为在出现故障时自动重新启动。但问题是sqoop如何处理数据,一条记录一条记录或批处理。假设有10000条记录,如果5000条记录之后发生异常,那么会发生什么?是否维护任何事务或维护任何标志,记录已成功处理,并且不会对重新运行作业的记录采取任何操作。是否有人可以从@AnkushBindra提供您对上述问题的经验。是否需要在重新启动失败的记录之前删除现有记录?寻找建议我提供了一个与重试操作相关的答案。你可以。此外,我还提供了对Oozie 4.2文档的参考。确实,可以配置为在出现故障时自动重新启动。但问题是sqoop如何处理数据,一条记录一条记录或批处理。假设有10000条记录,如果5000条记录之后发生异常,那么会发生什么?是否维护任何事务或维护任何标志,记录已成功处理,并且不会对重新运行作业的记录采取任何操作。是否有人可以从@AnkushBindra提供您对上述问题的经验。是否需要在重新启动失败的记录之前删除现有记录?寻求建议