oracle—sqoop命令中Map器数量的增加会导致java堆空间错误

rur96b6h  于 2021-05-30  发布在  Hadoop
关注(0)|答案(2)|浏览(324)

我正在使用sqoop1.4.5-cdh5.2.1和oracle。
我从甲骨文公司进口了一小套115k的记录。sqoop命令可以很好地将--num mappers设置为5。但是当我把它设置为5以上时,我得到了一个java堆空间的错误。
有谁能告诉我为什么会这样。
线程“main”java.lang.outofmemoryerror中的日志异常:java.math.biginteger处的java堆空间。(biginteger。java:394)在java.math.bigdecimal.bigtentothe(bigdecimal。java:3380)在java.math.bigdecimal.bigdigitlength(bigdecimal。java:3635)在java.math.bigdecimal.precision(bigdecimal。java:2189)在java.math.bigdecimal.comparemagnitude(bigdecimal。java:2585)在java.math.bigdecimal.compareto(bigdecimal。java:2566)在org.apache.sqoop.mapreduce.db.bigdecimalspilter.split(bigdecimalspilter。java:138)在org.apache.sqoop.mapreduce.db.bigdecimalspilter.split(bigdecimalspilter。java:69)在org.apache.sqoop.mapreduce.db.datadrivendbinputformat.getsplits(datadrivendbinputformat)。java:171)在org.apache.hadoop.mapreduce.jobsubmitter.writenewsplits(jobsubmitter。java:498)在org.apache.hadoop.mapreduce.jobsubmitter.writesplits(jobsubmitter。java:515)在org.apache.hadoop.mapreduce.jobsubmitter.submitjobinternal(jobsubmitter。java:399)在org.apache.hadoop.mapreduce.job$10.run(作业。java:1295)在org.apache.hadoop.mapreduce.job$10.run(job。java:1292)位于javax.security.auth.subject.doas(subject)的java.security.accesscontroller.doprivileged(本机方法)。java:415)在org.apache.hadoop.security.usergroupinformation.doas(usergroupinformation。java:1614)在org.apache.hadoop.mapreduce.job.submit(作业。java:1292)在org.apache.hadoop.mapreduce.job.waitforcompletion(作业。java:1313)在org.apache.sqoop.mapreduce.importjobbase.dosubmitjob(importjobbase。java:198)在org.apache.sqoop.mapreduce.importjobbase.runjob(importjobbase。java:171)在org.apache.sqoop.mapreduce.importjobbase.runimport(importjobbase。java:268)在org.apache.sqoop.manager.sqlmanager.importquery(sqlmanager。java:721)在org.apache.sqoop.tool.importtool.importtable(importtool。java:499)在org.apache.sqoop.tool.importtool.run(importtool。java:605)在org.apache.sqoop.sqoop.run(sqoop。java:143)在org.apache.hadoop.util.toolrunner.run(toolrunner。java:70)在org.apache.sqoop.sqoop.runsqoop(sqoop。java:179)在org.apache.sqoop.sqoop.runtool(sqoop。java:218)在org.apache.sqoop.sqoop.runtool(sqoop。java:227)在org.apache.sqoop.sqoop.main(sqoop。java:236)2015-06-25 13:48:59状态:1 2015-06-25 13:48:59错误(1)sqoop失败。2015-06-25 13:48:59错误(1)运行

camsedfj

camsedfj1#

尝试在$hadoop\u home/conf/mapred-site.xml上添加属性,如下所示

<!--for Sqoop config-->
<property>
<name>mapreduce.map.memory.mb</name>
<value>1024</value>
</property>

<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx512m</value>
</property>

根据您的环境进行调整,可以加上或减去该值。记住在每个节点上修改。
或修改站点上的虚拟内存限制

<property>
        <name>yarn.nodemanager.vmem-pmem-ratio</name>
        <value>4.2</value>
</property>

它的默认值是2.1g

y53ybaqx

y53ybaqx2#

默认情况下,每个map和reduce任务都在自己的jvm中运行。因此,每个Map器将消耗一定数量的物理内存。随着Map器数量的不断增加,内存需求也将不断增长。如果java进程不能分配足够的内存,它将抛出 java.lang.OutOfMemoryError 在您的情况下,系统(或虚拟机,如果您运行的是虚拟机)可能有足够的内存,最多只能容纳5个Map器。
你可以跑了 top 命令启动>5Map程序并监视可用内存。

相关问题