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

Posted

技术标签:

【中文标题】提交作业后如何调试Pig被卡住【英文标题】:How to debug Pig being stuck after job submission 【发布时间】:2014-07-07 12:57:42 【问题描述】:

我有一个用 Pig 编写的 map-reduce 作业,它正在执行以下操作。

给定一组 apache 日志文件,表示对网站上某个资源的访问

从机器人和不需要的日志行中清除日志 生成在日志中找到的元组(ip、resource_id)

例如这个日志:1.1.1.1 - [14/Jun/2014:06:26:27 +0000] "GET /path/to/resource/<resource_id>" "Agent"

将被翻译成(如果不是机器人):(1.1.1.1, <resource_id>)

这是通过一个简单的 UDF 完成的,该 UDF 使用正则表达式 + 用于机器人检测的库来解析日志。 从这一步开始,脚本继续执行几个额外的 map-reduce 操作。

问题如下:

我可以在本地完成猪的工作。 我将脚本上传到 Amazon Elastic Map Reduce,需要处理 5GB 的日志。 我用 10 个m1.large 实例运行脚本 1 小时。 作业没有完成,我终止了它。

已生成的 hadoop 日志没有显示太多进展,似乎停留在前面描述的初始准备阶段。

2014-07-07 06:31:17,609 [main] INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher - detailed locations: M: pre1[4,7],pre2[-1,-1],pre3[7,7],pre4[8,7],r2[13,5] C: R: r5[-1,-1] 2014-07-07 06:31:17,661 [main] INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher - 0% complete

您建议如何从这里开始调试问题? 您认为给定数据大小机器数量是否合理? 我真的很期待能在这么长的时间内完成这项工作。

谢谢

【问题讨论】:

您是否有权访问 JobTracker 以便详细监控每项任务?您应该能够在自己的机器上在 1 小时内使用 5 GB,更不用说 10 个 Amazon 实例了... 我可以看到task-attempts 日志文件夹。在里面我有正在进行的不同任务的所有细节 (cl.ly/image/122g2G3x221X)。它们每个看起来像这样 ===> 打开 's3n://path/to/log/access.log.22' 以读取 [...] 每个作业阶段正在处理的别名(别名 [line,offset]): M: pre1[4,7],pre2[-1,-1],pre3[7,7],pre4[8,7],r2[13,5] C: R: r5[-1,-1] 2014-07-07 06:33:09,202 INFO [Thread-5] amazon.emr.metrics.MetricsUtil:实例控制器状态已完成 2014-07-07 06:33:09,809 INFO [Thread-5] amazon.emr.metrics。 MetricsSaver:EMR 指标已禁用 在 S3 中运行大量小文件时,我看到了类似的行为(这些文件不会在映射器中平均分配)。当您使用 s3distcp (docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/…) 将文件从 S3 复制到 HDFS(您可以通过这种方式组合小文件)时,您是否看到相同的行为? 【参考方案1】:

如果您有大量的日志文件,我可以想象处理可能会很慢。在这种情况下,您可以在将它们放在 HDFS 上之前将它们组合起来。对于这种硬件上的简单解析脚本,一般 5GB 的大小应该不是问题。

这种情况的一般下一步是使问题更小。

    如果您只提供几个小文件而不是 5 GB,它是否可以在亚马逊上运行。 如果是这样,如果先给它 1%,然后给它 2%,然后给它 10%,运行时间如何增加? 如果它不起作用,如果你让你的解析函数变得微不足道,或者一起跳过它会发生什么?

【讨论】:

以上是关于提交作业后如何调试Pig被卡住的主要内容,如果未能解决你的问题,请参考以下文章

异步猪作业提交

由于 piggybank.jar 的问题,AWS 自己的提交 Pig 作业的示例不起作用

Oozie Pig 动作卡在 PREP 状态,作业处于 RUNNING 状态

如何限制由 Pig 脚本启动的并发作业数量?

在 Amazon EMR 中运行的 Pig 作业的引导文件的路径是啥

C博客作业--指针