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

标签: pig join replicated | 发表时间:2014-08-07 16:22 | 作者:scholltop
出处:http://www.iteye.com
'''一句话总结: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 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [pig join replicated] 推荐:

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

- - 数据库 - ITeye博客
'''一句话总结:PIG 在2个表JOIN的时候,如果使用Using 'replicated' 会将后面的表分段读到内存中,从而加快JOIN的效率. 但是如果load 到内存的数据超过JVM的限制就会报错==>.     年前写了一个用户session处理的PIG脚本,各种测试通过,数据OK,然后就Happy的回家过年了.

Hive中的join

- - CSDN博客云计算推荐文章
select a.* from a join b on a.id = b.id select a.* from a join b on (a.id = b.id and a.department = b.department). 在使用join写查询的时候有一个原则:应该将条目少的表或者子查询放在join操作符的左边.

mapreduce实例-Join连接 (reduce Side Join)

- - CSDN博客云计算推荐文章
//根据连接类型做不同处理. //设置不同map处理不同输入. 外键作为map输出的key,相同的外键值必然落在一个reduce中,在reduce端根据需要做不同形式的连接. 作者:liuzhoulong 发表于2013-9-5 21:35:16 原文链接. 阅读:83 评论:0 查看评论.

hive join 优化 --小表join大表

- - CSDN博客云计算推荐文章
在小表和大表进行join时,将 小表放在前边,效率会高,hive会将小表进行缓存. 使用mapjoin将小表放入内存,在map端和大表逐一匹配,从而省去reduce. 在0.7版本后,也可以用配置来自动优化. 作者:smile0198 发表于2014-10-25 21:49:25 原文链接. 阅读:62 评论:0 查看评论.

使用 Apache Pig 处理数据

- - ITeye论坛最新讨论
Hadoop 的普及和其生态系统的不断壮大并不令人感到意外. Hadoop 不断进步的一个特殊领域是 Hadoop 应用程序的编写. 虽然编写 Map 和 Reduce 应用程序并不十分复杂,但这些编程确实需要一些软件开发经验. Apache Pig 改变了这种状况,它在 MapReduce 的基础上创建了更简单的过程语言抽象,为 Hadoop 应用程序提供了一种更加接近结构化查询语言 (SQL) 的接口.

[转]Pig安装与配置教程

- - 小鸥的博客
Pig是yahoo捐献给apache的一个项目,它是SQL-like语言,是在MapReduce上构建的一种高级查询语言,把一些运算编译进MapReduce模型的Map和Reduce中,并且用户可以定义自己的功能. 这是Yahoo开发的又一个克隆Google的项目:Sawzall. Pig是一个客户端应用程序,就算你要在Hadoop集群上运行Pig,也不需要在集群上装额外的东西.

Pig安装及简单实例

- - CSDN博客云计算推荐文章
前面讲到了如何用MapReduce进行数据分析. 当业务比较复杂的时候,使用MapReduce将会是一个很复杂的事情,比如你需要对数据进行很多预处理或转换,以便能够适应MapReduce的处理模式. 另一方面,编写MapReduce程序,发布及运行作业都将是一个比较耗时的事情. Pig的出现很好的弥补了这一不足.

Hive Join 优化 翻译

- - 数据库 - ITeye博客
翻译自  https://cwiki.apache.org/confluence/display/Hive/LanguageManual+JoinOptimization#LanguageManualJoinOptimization-AutoConversiontoSMBMapJoin. Join Optimization ----Join 调优.

MySQL 內 JOIN 的應用…

- - Gea-Suan Lin's BLOG
「 Common use cases for the MySQL Join statement」這篇給的範例與把 MySQL 上常用到的幾種 JOIN 提出來分析,包括 index 與 explain. 另外在「 Managing hierarchical data with MySQL」也提到了要怎麼處理階層式資料.

Hive JOIN使用详解

- - 数据库 - ITeye博客
Hive是基于Hadoop平台的,它提供了类似SQL一样的查询语言HQL. 有了Hive,如果使用过SQL语言,并且不理解Hadoop MapReduce运行原理,也就无法通过编程来实现MR,但是你仍然可以很容易地编写出特定查询分析的HQL语句,通过使用类似SQL的语法,将HQL查询语句提交Hive系统执行查询分析,最终Hive会帮你转换成底层Hadoop能够理解的MR Job.