提交作业后如何调试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 状态