Apache Pig ObjectSerializer优化

最近又遇到一次Tasktracker OOM的问题, 分析过程如下:

1. 用MemoryAnalyzer分析heap dump, 如下图:

Apache Pig ObjectSerializer优化_第1张图片

发现又是大量的String类型的内存占用.


进一步分析String的持有,如下:

Apache Pig ObjectSerializer优化_第2张图片

发现是JobConf 对象持有了大量的string. 这个已经不奇怪了, hadoop要放很多job相关的配置到JobConf中,很多JobTracker Tasktracker的OOM都跟这个有关.


继续看String的内容:

Apache Pig ObjectSerializer优化_第3张图片

却是很多乱七八糟的内容,不像是可读的配置. 根据Entry的key查找pig源代码, 发现是这样的:


原来Pig将很多的对象序列化再编码成字符串存储在了JobConf中!

只有压缩ObjectSerializer的输出再编码了.

改了代码, 上线运行, 没问题!

mailing list里面一吼, 结果发现有人在我前两天提交了一样的功能..... 这个,,这个就怪为嘛我们的系统没有提前3天OOM呢? >.<

官方patch在这里: PIG-3017


这类型的bug基本上是谁遇到的早, 谁就会有机会fix. 可遇不可求啊.

-- EOF --


你可能感兴趣的:(Apache Pig ObjectSerializer优化)