首页 文章

sqoop命令中映射器数量的增加会导致java堆空间错误

提问于
浏览
0

我使用sqoop 1.4.5-cdh5.2.1和oracle .

我从oracle导入一小组115k的记录 . Sqoop命令在将-num-mappers设置为5时工作正常 . 但是当我将它设置为5以上时,我得到了JAVA HEAP SPACE的错误 .

任何人都可以告诉它,为什么会发生这种情况 .

LOG 异常螺纹"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.BigDecimalSplitter.split(BigDecimalSplitter.java:138)在org.apache.sqoop.mapreduce.db.BigDecimalSplitter.split(BigDecimalSplitter.java:69)在org.apache . 位于org.apache.hadoop.mapreduce.JobSubmitter.writeNewSplits(JobSubmitter.java:498)的org.apache.hadoop.mapreduce.JobSubmitter.writeSplits(JobSubmitter . )中的sqoop.mapreduce.db.DataDrivenDBInputFormat.getSplits(DataDrivenDBInputFormat.java:171) . java:515)org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:399)at org.apache.hadoop.mapreduce.Job $ 10.run(Job.java:12 95)at org.apache.hadoop.mapreduce.Job $ 10.run(Job.java:1292)at java.security.AccessController.doPrivileged(Native Method)at javax.security.auth.Subject.doAs(Subject.java:415 )org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1614)org.apache.hadoop.mapreduce.Job.submit(Job.java:1292)atg.apache.hadoop.mapreduce.Job . waitForCompletion(Job.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 . 在org.apache.sqo的org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:179)运行(ToolRunner.java:70) op.qoop.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)run_sqoop

2 回答

  • 0

    默认情况下,每个map和reduce任务都在自己的JVM中运行 . 因此,每个映射器将消耗一定量的物理内存 . 随着映射器数量的不断增加,内存需求也将不断增长 . 如果java进程无法分配足够的内存,则抛出 java.lang.OutOfMemoryError

    在您的情况下,系统(或VM,如果您正在运行VM)可能只有最多5个映射器的内存 .

    您可以在启动> 5个映射器时运行 top 命令并监视可用内存 .

  • 0

    尝试在$ HADOOP_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

相关问题