如何获取基于 HIVE-SQOOP 的批处理作业的异常、错误和日志?

Posted

技术标签:

【中文标题】如何获取基于 HIVE-SQOOP 的批处理作业的异常、错误和日志?【英文标题】:How get exception,error,log for HIVE-SQOOP based Batch Job? 【发布时间】:2016-06-27 05:08:02 【问题描述】:

我有 6 个数据节点和 1 个名称节点的 Hadoop 集群。我在 HIVE 中几乎没有 (4) 个工作,这些工作每天都在运行,并使用 sqoop 将一些数据从日志文件推送到我们的 OLPT 数据库。我没有在环境中安装 oozie。所有这些都写在 HIVE 脚本文件(.sql 文件)中,我从 unix 脚本(.sh 文件)运行这些文件。这些 shell 脚本文件附有不同的 OS cron 作业以在不同的时间运行它们。

现在要求是这样的:

每天分别为每个作业生成日志/状态。因此,在一天结束时查看这些日志,我们可以确定哪个作业成功运行以及运行所花费的时间,哪个作业失败以及该失败作业的转储/堆栈空间。(功能计划是我们将拥有邮件服务器和每个失败或成功的作业 shell 脚本都会将这些日志/状态文件作为附件发送到相应的堆栈持有者)

现在我的问题是如何找到错误/异常,如果我必须运行那些批处理作业/shell 脚本,以及如何生成成功日志以及执行时间?

我尝试通过重定向输出来获取每个查询运行到 HIVE 的文本文件中的输出,但这不起作用。

例如:

Select * from staging_table;>>output.txt

有没有办法通过每天为每个 HIVE 作业配置 HIVE 日志来做到这一点?

如果有人遇到此问题,请告诉我,我该如何解决?

【问题讨论】:

不确定,但您可以尝试这种方法,在hive 中,您可以使用'!' 运行外部系统命令,因此对于select 输出,请尝试使用tee 你还有什么发现吗?恕我直言,除了我建议你的那个之外,它并不完全可能...... 你还有什么发现吗? 【参考方案1】:
Select * from staging_table;>>output.txt

如果您正在寻找该选项,这是重定向输出,那么下面是来自控制台的方式。

hive -e 'Select * from staging_table' > /home/user/output.txt

这只会重定向输出。它不会显示作业特定的日志信息。

但是,我假设您在 yarn 上运行,如果您希望看到特定于日志的应用程序(作业),请参阅 this

生成的日志文件位置:

在运行期间,您将在$yarn.nodemanager.log-dirs 中看到所有容器日志

使用 UI,您可以查看日志,即作业级别和任务级别。

另一种方法是从命令行查看和转储特定于应用程序/作业的日志。

yarn logs -applicationId your_application_id

请注意,最好使用yarn logs -applicationId <application_id> 方法,但它确实需要先启用日志聚合。 Also see much better explanation here

【讨论】:

谢谢....是的,您是对的,重定向只会给出 SQL 的输出,而不是作业状态和执行时间信息....这种方法中的“yarn logs -applicationId your_application_id”问题是所有这些都在一天中的不同时间(现在每 6 小时)在后端操作系统 cron 作业中运行,所以我永远不会知道应用程序 ID(每次执行都会改变)。你认为我可以解决 oozie 中的问题吗?我对oozie没有太多了解。请帮助... 我不知道 oozie。但所有以前的作业日志都保留在作业历史服务器中。你能在那里找到吗? ui 中有两件事,第一件事是当前正在运行的作业,第二件事是历史作业。在任何情况下,我们都可以看到包含所有指标的作业/任务跟踪器日志。 我们有相同的 cron 样式作业正在运行。这是查看作业特定日志的唯一方法。

以上是关于如何获取基于 HIVE-SQOOP 的批处理作业的异常、错误和日志?的主要内容,如果未能解决你的问题,请参考以下文章

如何在codeigniter中查看基于链接ID的所有数据

如何在 redis 上的 laravel 队列中获取所有待处理的作业?

如何在 Spark Streaming 中使用基于数据集的转换?

RabbitMQ 如何将作业拆分为任务并处理结果

第一次作业:基于Linux进程模型分析

第一次作业:基于Linux 2.6 的源码 分析进程模型