PIG JOIN 的replicated后标写入内存用法

'''一句话总结:PIG 在2个表JOIN的时候,如果使用Using 'replicated' 会将后面的表分段读到内存中,从而加快JOIN的效率。但是如果load 到内存的数据超过JVM的限制就会报错==>

java.lang.OutOfMemoryError: Java heap space
内存溢出'''
情节:

年前写了一个用户session处理的PIG脚本,各种测试通过,数据OK,然后就Happy的回家过年了。T T悲剧的是,过年几天每天都发报错信息,还好依赖这个数据的后台没正是上线,不然死定了。回到公司查问题,发现总是执行到某一个JOIN的时候卡住,然后超过1200 s ,就被kill掉了。

2013-02-16 12:40:23,520 [main] INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher - More inf ormation at: http://hd09:50030/jobdetails.jsp?jobid=job_201301221227_72618
2013-02-16 13:47:50,157 [main] INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher - 80% comp lete
2013-02-16 13:47:52,171 [main] INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher - job job_ 201301221227_72618 has failed! Stop running all dependent jobs
2013-02-16 13:47:52,171 [main] INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher - 100% com plete
2013-02-16 13:47:52,175 [main] ERROR org.apache.pig.tools.pigstats.SimplePigStats - ERROR 2997: Unable to recreate exception f rom backed error: Task attempt_201301221227_72618_m_000000_1 failed to report status for 1201 seconds. Killing!
2013-02-16 13:47:52,176 [main] ERROR org.apache.pig.tools.pigstats.PigStatsUtil - 1 map reduce job(s) failed!
2013-02-16 13:47:52,178 [main] INFO org.apache.pig.tools.pigstats.SimplePigStats - Script Statistics:

再看详细报错信息:

Exception in thread "Thread for syncLogs" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2894)
at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:117)
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:589)
at java.lang.StringBuilder.append(StringBuilder.java:220)
at java.io.UnixFileSystem.resolve(UnixFileSystem.java:108)
at java.io.File.<init>(File.java:329)
at org.apache.hadoop.mapred.TaskLog.getAttemptDir(TaskLog.java:267)
at org.apache.hadoop.mapred.TaskLog.getAttemptDir(TaskLog.java:260)
at org.apache.hadoop.mapred.TaskLog.getIndexFile(TaskLog.java:237)
at org.apache.hadoop.mapred.TaskLog.writeToIndexFile(TaskLog.java:316)
at org.apache.hadoop.mapred.TaskLog.syncLogs(TaskLog.java:369)
at org.apache.hadoop.mapred.Child$3.run(Child.java:141)
Exception in thread "LeaseChecker" java.lang.OutOfMemoryError: Java heap spac

擦!!怎么回事内存溢出呢!!以前都是好端端的没事呀。LIMIT 减少数据量试试===》数据出来了。
再看PIG语句

A = LOAD 'A/dt=2013-02-14' USING PigStorage('\u0001') AS (id:int,name:chararray);
B = LOAD 'B/*' USING PigStorage('\u0001') AS (id:int,gender:chararray);
C = FOREACH (JOIN A BY id , B BY id USING 'replicated') GENERATE A::id, A::name, A::gender;

Using 'replicated' ?这个语法是在join的时候把后面表也就是B的数据读到内存,会加快JOIN的速度。 我好像发现了什么,内存啊,内存,内存溢出。靠!!干掉Using 'replicated' ,再跑。===》数据出来了 。再和维护Hadoop集群的同事联系,果然,过年的时候为了减少集群的压力,修改了很多东西,真相大白。
成也萧何,败也萧何!Using 'replicated' 要慎用啊。最好还是不用,因为隐患太大,B表一直增长的话肯定会超过JVM限制的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值