在 PIG UDF 中调试

Posted

技术标签:

【中文标题】在 PIG UDF 中调试【英文标题】:Debugging in PIG UDF 【发布时间】:2012-06-12 21:17:11 【问题描述】:

我是 Hadoop/PIG 的新手。 我有一个基本问题。

我们在 PIG UDF 中有记录工具吗?我写了一个需要验证的 UDF 我需要记录某些语句来检查流程。是否有可用的日志记录工具?如果是,Pig 日志在哪里?

【问题讨论】:

【参考方案1】:

假设您的 UDF 扩展了 EvalFunc,您可以使用从 EvalFunc.getLogger() 返回的 Logger。日志输出应该在 pig 执行的关联 Map / Reduce 任务中可见(如果作业在多个阶段执行,那么您必须通过它们来查找关联的日志条目)。

【讨论】:

那么日志最终会出现在 Map Reduce 任务日志文件中吗?我可以专门将我的日志语句放到一个单独的文件中吗? 是的,他们会的。你可以,但你必须去每个任务跟踪器查看/收集它们。我想你可以尝试配置一个远程记录器(例如记录到数据库)。 我不确定,但你可以试试 PigLogger - 它可能会将内容发送回客户端。 我很抱歉提出这么幼稚的问题。但是,我以以下方式使用它: PigLogger pigLogger = this.getPigLogger(); pigLogger.warn(对象,字符串,枚举);我在这里错过了什么吗?或者这就是 EvalFunc Logger。除了警告我什么都看不到。我们没有调试、信息、错误吗? 我尝试使用 this.getLogger.info(String);这应该在 tasktarcker 日志中弹出吗?我看不到任何日志。【参考方案2】:

也许很明显,但我建议在部署到集群/伪集群之前先在本地模式下调试您的 UDF。这样,您可以直接在 IDE 中调试它(在我的例子中是 eclipse),这比日志调试更容易。

【讨论】:

是否有我可以遵循的站点或一些步骤来开始使用 Eclipse。我的意思是日食上的猪。 不知道有步骤的站点,但它很简单:将 hadoop-core 和 pig 依赖项放入您的 maven pom,然后使用 org.apache.pig.PigServer。试试pigServer.registerScript(resource.getInputStream(), pigScriptParams, null); 然后PigStats stats = pigServer.store("final_output", pigScriptParams.get("output_folder"), pigStoreFunc).getStatistics();

以上是关于在 PIG UDF 中调试的主要内容,如果未能解决你的问题,请参考以下文章

用java编写的hive udf、udaf、udtfs如何在eclipse之类的ide中调试?

提交作业后如何调试Pig被卡住

在 PIG 中执行 UDF 时出错

在 PIg 脚本中对 Avro 文件使用 UDF

Pig 版本和 UDF

显示结果中的 Pig Udf