我正在从pig(v0.15.0)脚本生成一些parquet(v1.6.0)输出。我的脚本接受多个输入源,并用一些嵌套将它们连接起来。脚本运行时没有错误,但在 STORE
我的行动:
2016-04-19 17:24:36,299 [PigTezLauncher-0] INFO org.apache.pig.backend.hadoop.executionengine.tez.TezJob - DAG Status: status=FAILED, progress=TotalTasks: 249 Succeeded: 220 Running: 0 Failed: 1 Killed: 28 FailedTaskAttempts: 43, diagnostics=Vertex failed, vertexName=scope-1446, vertexId=vertex_1460657535752_15030_1_18, diagnostics=[Task failed, taskId=task_1460657535752_15030_1_18_000000, diagnostics=[TaskAttempt 0 failed, info=[Error: Failure while running task:parquet.hadoop.MemoryManager$1: New Memory allocation 134217728 exceeds minimum allocation size 1048576 with largest schema having 132 columns
at parquet.hadoop.MemoryManager.updateAllocation(MemoryManager.java:125)
at parquet.hadoop.MemoryManager.addWriter(MemoryManager.java:82)
at parquet.hadoop.ParquetRecordWriter.<init>(ParquetRecordWriter.java:104)
at parquet.hadoop.ParquetOutputFormat.getRecordWriter(ParquetOutputFormat.java:309)
at parquet.hadoop.ParquetOutputFormat.getRecordWriter(ParquetOutputFormat.java:262)
at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigOutputFormat.getRecordWriter(PigOutputFormat.java:81)
at org.apache.tez.mapreduce.output.MROutput.initialize(MROutput.java:398)
...
上面的异常是在我使用 -x tez
但是我在使用mapreduce时也遇到了同样的异常。我尝试使用 SET default_parallel
以及添加一个(不必要的w.r.t.我真正的目标) ORDER BY
手术就在我手术前 STORE
操作,以确保pig有机会将数据发送到不同的缩减器,并最小化任何给定缩减器上所需的内存。最后,我尝试使用 SET mapred.child.java.opts
. 然而,这些都无济于事。
有什么我只是缺少的吗?有没有已知的策略来避免一个减速机承载过多的负载并导致写操作失败的问题?我也遇到过类似的问题,写入avro输出时,内存不足,无法执行压缩步骤。
编辑:根据这个源文件,问题似乎归结为 memAllocation/nCols<minMemAllocation
. 但是,内存分配似乎不受 mapred.child.java.opts
我试过了。
1条答案
按热度按时间eh57zj3b1#
我最终用参数解决了这个问题
parquet.block.size
. 默认值(请参阅源代码)足够大,可以写入128列宽的文件,但不能再大。Pig的解决方案是SET parquet.block.size x;
哪里x >= y * 1024^2
以及y
是输出中的列数。