如何获取基于 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 的批处理作业的异常、错误和日志?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 redis 上的 laravel 队列中获取所有待处理的作业?