使用kite-dataset导入数据时如何避免mapreduce OutOfMemory Java堆空间错误?

时间:2016-06-13 18:24:03

标签: hadoop mapreduce hortonworks-data-platform kite-dataset

在我的hortonworks HDP 2.6集群上,我使用kite-dataset工具导入数据:

./kite-dataset -v csv-import ml-100k/u.data  ratings

我收到了这个错误:

java.lang.Exception: java.lang.OutOfMemoryError: Java heap space
    at org.apache.hadoop.mapred.LocalJobRunner$Job.runTasks(LocalJobRunner.java:462)
    at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:522)
Caused by: java.lang.OutOfMemoryError: Java heap space
    at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.init(MapTask.java:986)
    at org.apache.hadoop.mapred.MapTask.createSortingCollector(MapTask.java:402)
    at org.apache.hadoop.mapred.MapTask.access$100(MapTask.java:81)
    at org.apache.hadoop.mapred.MapTask$NewOutputCollector.<init>(MapTask.java:698)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:770)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
    at org.apache.hadoop.mapred.LocalJobRunner$Job$MapTaskRunnable.run(LocalJobRunner.java:243)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

我的群集节点有16 GB或RAM,其中一些列为可用。

我该怎么做才能避免此错误?

1 个答案:

答案 0 :(得分:0)

我的第一个冲动是问你的启动参数是什么。通常,当您运行MapReduce并遇到内存不足错误时,您可以使用以下内容作为启动参数:

-Dmapred.map.child.java.opts=-Xmx1G -Dmapred.reduce.child.java.opts=-Xmx1G

这里的关键是这两个数额是累积的。因此,在您启动MapReduce之后,您特定添加的数量不应接近超过系统上可用的内存。