【问题标题】:Map Reduce Completed but pig Job FailedMap Reduce 已完成,但 pig 作业失败
【发布时间】:2017-09-20 19:04:56
【问题描述】:

我最近遇到了这种情况,其中 MapReduce 作业似乎在 RM 中成功,因为 PIG 脚本返回了退出代码 8,它指的是“抛出的可抛出异常(意外异常)”

按要求添加脚本:

REGISTER '$LIB_LOCATION/*.jar'; 

-- set number of reducers to 200
SET default_parallel $REDUCERS;
SET mapreduce.map.memory.mb 3072;
SET mapreduce.reduce.memory.mb 6144;

SET mapreduce.map.java.opts -Xmx2560m;
SET mapreduce.reduce.java.opts -Xmx5120m;
SET mapreduce.job.queuename dt_pat_merchant;

SET yarn.app.mapreduce.am.command-opts -Xmx5120m;
SET yarn.app.mapreduce.am.resource.mb 6144;

-- load data from EAP data catalog using given ($ENV = PROD)
data = LOAD 'eap-$ENV://event'
-- using a custom function
USING com.XXXXXX.pig.DataDumpLoadFunc
('{"startDate": "$START_DATE", "endDate" : "$END_DATE", "timeType" : "$TIME_TYPE", "fileStreamType":"$FILESTREAM_TYPE", "attributes": { "all": "true" } }', '$MAPPING_XML_FILE_PATH');

-- filter out null context entity records
filtered = FILTER data BY (attributes#'context_id' IS NOT NULL);

-- group data by session id
session_groups = GROUP filtered BY attributes#'context_id';

-- flatten events
flattened_events = FOREACH session_groups GENERATE FLATTEN(filtered);

-- remove the output directory if exists
RMF $OUTPUT_PATH;

-- store results in specified output location
STORE flattened_events INTO '$OUTPUT_PATH' USING com.XXXX.data.catalog.pig.EventStoreFunc();

我可以在 pig 日志中看到“错误 2998:未处理的内部错误。超出了 GC 开销限制”。(日志如下)

Pig Stack Trace
---------------
ERROR 2998: Unhandled internal error. GC overhead limit exceeded

java.lang.OutOfMemoryError: GC overhead limit exceeded
        at org.apache.hadoop.mapreduce.FileSystemCounter.values(FileSystemCounter.java:23)
        at org.apache.hadoop.mapreduce.counters.FileSystemCounterGroup.findCounter(FileSystemCounterGroup.java:219)
        at org.apache.hadoop.mapreduce.counters.FileSystemCounterGroup.findCounter(FileSystemCounterGroup.java:199)
        at org.apache.hadoop.mapreduce.counters.FileSystemCounterGroup.findCounter(FileSystemCounterGroup.java:210)
        at org.apache.hadoop.mapreduce.counters.AbstractCounters.findCounter(AbstractCounters.java:154)
        at org.apache.hadoop.mapreduce.TypeConverter.fromYarn(TypeConverter.java:241)
        at org.apache.hadoop.mapreduce.TypeConverter.fromYarn(TypeConverter.java:370)
        at org.apache.hadoop.mapreduce.TypeConverter.fromYarn(TypeConverter.java:391)
        at org.apache.hadoop.mapred.ClientServiceDelegate.getTaskReports(ClientServiceDelegate.java:451)
        at org.apache.hadoop.mapred.YARNRunner.getTaskReports(YARNRunner.java:594)
        at org.apache.hadoop.mapreduce.Job$3.run(Job.java:545)
        at org.apache.hadoop.mapreduce.Job$3.run(Job.java:543)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:415)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1671)
        at org.apache.hadoop.mapreduce.Job.getTaskReports(Job.java:543)
        at org.apache.pig.backend.hadoop.executionengine.shims.HadoopShims.getTaskReports(HadoopShims.java:235)
        at org.apache.pig.tools.pigstats.mapreduce.MRJobStats.addMapReduceStatistics(MRJobStats.java:352)
        at org.apache.pig.tools.pigstats.mapreduce.MRPigStatsUtil.addSuccessJobStats(MRPigStatsUtil.java:233)
        at org.apache.pig.tools.pigstats.mapreduce.MRPigStatsUtil.accumulateStats(MRPigStatsUtil.java:165)
        at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher.launchPig(MapReduceLauncher.java:360)
        at org.apache.pig.backend.hadoop.executionengine.HExecutionEngine.launchPig(HExecutionEngine.java:282)
        at org.apache.pig.PigServer.launchPlan(PigServer.java:1431)
        at org.apache.pig.PigServer.executeCompiledLogicalPlan(PigServer.java:1416)
        at org.apache.pig.PigServer.execute(PigServer.java:1405)
        at org.apache.pig.PigServer.executeBatch(PigServer.java:456)
        at org.apache.pig.PigServer.executeBatch(PigServer.java:439)
        at org.apache.pig.tools.grunt.GruntParser.executeBatch(GruntParser.java:171)
        at org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:234)
        at org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:205)
        at org.apache.pig.tools.grunt.Grunt.exec(Grunt.java:81)
        at org.apache.pig.Main.run(Main.java:624)

pig 脚本中的配置如下所示:

SET default_parallel 200;
SET mapreduce.map.memory.mb 3072;
SET mapreduce.reduce.memory.mb 6144;

SET mapreduce.map.java.opts -Xmx2560m;
SET mapreduce.reduce.java.opts -Xmx5120m;
SET mapreduce.job.queuename dt_pat_merchant;

SET yarn.app.mapreduce.am.command-opts -Xmx5120m;
SET yarn.app.mapreduce.am.resource.mb 6144;

集群 RM 中的作业状态显示作业成功 [无法发布图像,因为我的声誉太低;)]

此问题经常发生,我们必须重新启动作业才能成功。

请让我知道解决此问题的方法。

PS:作业运行的集群是世界上最大的集群之一,所以不用担心资源或存储空间。

谢谢

【问题讨论】:

    标签: hadoop mapreduce apache-pig


    【解决方案1】:

    来自oracle docs

    在垃圾回收之后,如果 Java 进程花费大约 98% 以上的时间进行垃圾回收,并且如果它回收的堆空间不到 2% 并且到目前为止一直在做最后 5 个(编译时间常数) 连续的垃圾回收,然后抛出 java.lang.OutOfMemoryError 超过 GC Overhead limit 的 java.lang.OutOfMemoryError 异常可以通过命令行标志 -XX:-UseGCOverheadLimit 关闭

    如文档中所述,您可以关闭此异常或增加堆大小。

    【讨论】:

    • Mapper 或 reducer 的堆?但根据 RM,mappers 和 reducers 是成功的。
    • 客户端在获取计数器时发生错误,所以为你的猪客户端增加堆
    【解决方案2】:

    你能在这里添加你的猪脚本吗?

    我认为,您收到此错误是因为猪本身(不是映射器和减速器)无法处理输出。 如果你使用DUMP 操作它你的脚本,那么首先尝试限制显示的数据集。假设您的数据有一个 X 别名。试试:

    temp = LIMIT X 1;
    DUMP temp;
    

    因此,您只会看到一条记录并节省一些资源。您也可以执行STORE 操作(参见猪手册中的操作方法)。

    显然,您可以将 pig 的堆大小配置为更大,但 pig 的堆大小不是 mapreduce.mapmapreduce.reduce。使用PIG_HEAPSIZE 环境变量来做到这一点。

    【讨论】:

    • 按要求添加脚本,请检查!
    • 可能是您的自定义函数 com.XXXXXX.pig.DataDumpLoadFunc 和 com.XXXX.data.catalog.pig.EventStoreFunc() 使用了太多堆。尝试使用 PIG_HEAPSIZE 环境变量增加猪的堆。例如:stackoverflow.com/a/10166449/2877029
    • 增加了 PIG_HEAPSIZE,似乎已经解决了这个问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-02
    • 2011-03-25
    • 1970-01-01
    • 2017-05-03
    • 1970-01-01
    相关资源
    最近更新 更多