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

标签 shell hadoop hive sqoop hiveql

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

现在要求是这样的:

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

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

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

例如:

Select * from staging_table;>>output.txt

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

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

最佳答案

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

关于shell - 如何获取基于 HIVE-SQOOP 的批处理作业的异常、错误、日志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38046281/

相关文章:

scala - log4j:WARN 找不到附加程序

sql-server - 使用sqoop从配置单元导出到sql服务器

hadoop - Hive 不识别 Thorn 字符定界符

hadoop - 使用 lazy simple serde hive 替换引号

python - zsh:在 zsh 脚本中的heredoc之后转义换行符

linux - 如何一次返回一行 grep 结果以便在另一个脚本中使用解析后的数据?

regex - _@[^@]*@ 在 bash 中

shell - 如何在shell中按unicode字符分割

hadoop - start-all.sh : command not found. 我该如何解决这个问题?

ruby - 如何通过 Ruby 连接到 Amazon EMR Hive?