Apache pig Pig本地模式、组或join=java.lang.OutOfMemoryError:java堆空间

Apache pig Pig本地模式、组或join=java.lang.OutOfMemoryError:java堆空间,apache-pig,Apache Pig,使用Apache Pig版本0.10.1.21(已报告), CentOS 6.3版(最终版),jdk1.6.031(Virtualbox上的Hortonworks沙盒v1.2,带有3.5 GB RAM) pig-x本地GrpTest.pig [Thread-12] WARN org.apache.hadoop.mapred.JobClient - No job jar file set. User classes may not be found. See JobConf(Class) or

使用Apache Pig版本0.10.1.21(已报告), CentOS 6.3版(最终版),jdk1.6.031(Virtualbox上的Hortonworks沙盒v1.2,带有3.5 GB RAM)

pig-x本地GrpTest.pig

[Thread-12] WARN  org.apache.hadoop.mapred.JobClient - No job jar file set.  User classes may not be found. See JobConf(Class) or JobConf#setJar(String).
[Thread-12] INFO  org.apache.hadoop.mapreduce.lib.input.FileInputFormat - Total input paths to process : 1
[Thread-13] INFO  org.apache.hadoop.mapred.Task -  Using ResourceCalculatorPlugin : org.apache.hadoop.util.LinuxResourceCalculatorPlugin@19a9bea3
[Thread-13] INFO  org.apache.hadoop.mapred.MapTask - io.sort.mb = 100
[Thread-13] WARN  org.apache.hadoop.mapred.LocalJobRunner - job_local_0002
java.lang.OutOfMemoryError: Java heap space
    at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.<init>(MapTask.java:949)
    at org.apache.hadoop.mapred.MapTask$NewOutputCollector.<init>(MapTask.java:674)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:756)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:370)
    at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:212)
[main] ERROR org.apache.pig.tools.pigstats.PigStatsUtil - 1 map reduce job(s) failed!
[main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1066: Unable to open iterator for alias B
[Thread-12]WARN org.apache.hadoop.mapred.JobClient-未设置作业jar文件。可能找不到用户类。请参阅JobConf(类)或JobConf#setJar(字符串)。
[Thread-12]INFO org.apache.hadoop.mapreduce.lib.input.FileInputFormat-处理的总输入路径:1
[Thread-13]INFO org.apache.hadoop.mapred.Task-使用ResourceCalculatorPlugin:org.apache.hadoop.util。LinuxResourceCalculatorPlugin@19a9bea3
[Thread-13]INFO org.apache.hadoop.mapred.MapTask-io.sort.mb=100
[Thread-13]WARN org.apache.hadoop.mapred.LocalJobRunner-job\u local\u 0002
java.lang.OutOfMemoryError:java堆空间
位于org.apache.hadoop.mapred.MapTask$MapOutputBuffer。(MapTask.java:949)
位于org.apache.hadoop.mapred.MapTask$NewOutputCollector。(MapTask.java:674)
位于org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:756)
位于org.apache.hadoop.mapred.MapTask.run(MapTask.java:370)
位于org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:212)
[main]错误org.apache.pig.tools.pigstats.PigStatsUtil-1映射减少作业失败!
[main]错误org.apache.pig.tools.grunt.grunt-错误1066:无法打开别名B的迭代器
java.lang.OutOfMemoryError:java堆空间错误每次在本地模式下执行的pig脚本中使用GROUP或JOIN时都会发生。在HDFS上以mapreduce模式执行脚本时没有错误

问题1:当数据样本很小且本地模式使用的资源比HDFS模式少时,为什么会出现OutOfMemory错误


问题2:是否有一种解决方案可以成功运行带有组或以本地模式加入的小型pig脚本?

原因是您在本地分配给Java的内存比在Hadoop群集计算机上分配的内存少。这实际上是Hadoop中非常常见的错误。它通常发生在您在Pig中任意点创建一个非常长的关系时,因为Pig总是想将整个关系加载到内存中,并且不想以任何方式延迟加载


当您执行类似于
groupby
的操作时,您分组所依据的元组在许多记录上都是非稀疏的,您经常会创建一个长关系,至少是暂时的,因为您基本上是将一整组单个关系都塞进一个长关系中。要么更改代码,使您在任何时候都不会创建单个很长的关系(即,通过更稀疏的内容进行分组),要么增加Java可用的内存。

解决方案:强制pig为Java属性io.sort.mb分配更少的内存 我在这里设置为10MB,错误消失了。不确定什么是最佳值,但至少,这允许在本地模式下练习pig语法

$ cat GrpTest.pig
--avoid java.lang.OutOfMemoryError: Java heap space (execmode: -x local)
set io.sort.mb 10;

A = LOAD 'data.txt' USING PigStorage(',') AS (f1:int,f2:int,f3:int);
B = GROUP A BY f1;
DESCRIBE B;
DUMP B;

我从来没有在本地map reduce模式下进行组或联接时遇到过任何问题,即使是在非常大的数据集上。。。我想要么是JVM的设置搞砸了,要么是本地pig/hadoop将某种允许的最大内存设置设置为0。您确定它只是一个组,并在本地加入失败的组吗?如果将大量内存用于与pig无关的java程序,会发生什么?您好,这是Hortonwords沙盒。当我通过GUI连接时(Hortons HUE GUI允许在同一沙箱的HDF上通过web浏览器运行Pig、Hive)。使用更大的数据集(10MB),所有演示都可以正常运行。所以我认为JVM可以处理更大的负载。这显然是本地模式下的一个bug。一旦存在组或联接,Pig就会失败,并出现java OutOfMemory错误。不管数据样本大小,Grunt shell或Pig脚本。我不知道Hortonwords的任何内容,但如果使用DISTINCT Local进行查询,这是否正常?对于洗牌、排序、加入等允许的最大内存,有一系列与Hadoop/pig相关的设置。我猜其中1个设置仍然是0。对于在查找此帖子时发现此帖子的人,这里是一个。请查看我的初始帖子。示例中使用的数据的整个大小小于100字节。换言之,少于此评论的长度。不管管道下面的清管器多么聪明,当绝对没有内存问题时,没有理由因为内存不足而失败。这显然是一个bug。我可以保留
set io.sort.mb 10这也是在MR模式下,还是应该将其删除?
$ cat GrpTest.pig
--avoid java.lang.OutOfMemoryError: Java heap space (execmode: -x local)
set io.sort.mb 10;

A = LOAD 'data.txt' USING PigStorage(',') AS (f1:int,f2:int,f3:int);
B = GROUP A BY f1;
DESCRIBE B;
DUMP B;