mapred

Debug Streaming In Hive

独自空忆成欢 提交于 2020-01-09 22:23:10
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 2010-04-07 @ taobao Hive由于QL语言自身的限制, 使得某些数据处理的作业还是需要通过streaming交由脚本(如Python)来处理. 海量数据的处理中, 遇到"脏数据"是很常见的, 但其形式又是不可预见的. 为此我们编写的处理程序, 往往需要一段时间的调试去暴露可能出现的"脏数据". 在用java编写MapReduce ? 的时候, 我们可以捕获出现的未知异常, 同时用System.out.println输出"脏数据"的内容, 以便之后分析. 可惜, 这种"打印"办法在streaming时候不起作用, 因为streaming是通过标准输出来接受脚本处理的结果数据的, 若还是用"打印"的话, "脏数据"并不会出现jobtracker的日志中, 而是被作为结果数据收集了. 为解决这个问题, 我们之后耍点小手段. 以python为例, 当程序处理遇到"脏数据"时, 是会抛出异常的, 这个异常会被jobtracker收集, 其文本信息内容会被记录在日志中. 既然标准输出这条路被堵了, 可"异常"这条路是通的, 也就说可将"脏数据"置于异常中, 这样"脏数据"就会随着异常一起记录在日志中了. 可参考下面python代码 #!/usr/bin/env python from sys import