Hadoop conf确定num map任务

标签 hadoop configuration mapreduce hdfs

我有一份工作,就像我所有的 Hadoop 工作一样,从我在 Hadoop 界面中看到的运行时,它似乎总共有 2 个 map task 。但是,这意味着它加载了太多数据,以至于我收到 Java 堆空间错误。

我已经尝试在我的 Hadoop 集群中设置许多不同的 conf 属性来将作业拆分为更多任务,但似乎没有任何效果。

我试过设置mapreduce.input.fileinputformat.split.maxsizemapred.max.split.sizedfs.block.size 但似乎没有任何效果。

我正在使用 0.20.2-cdh3u6,并尝试使用 cascading.jdbc 运行作业 - 该作业无法从数据库读取数据。我认为这个问题可以通过增加拆分次数来解决,但不知道该怎么做!

求助!快疯了!

2013-07-23 09:12:15,747 FATAL org.apache.hadoop.mapred.Child: Error running child : java.lang.OutOfMemoryError: Java heap space
        at com.mysql.jdbc.Buffer.<init>(Buffer.java:59)
        at com.mysql.jdbc.MysqlIO.nextRow(MysqlIO.java:1477)
        at com.mysql.jdbc.MysqlIO.readSingleRowSet(MysqlIO.java:2936)
        at com.mysql.jdbc.MysqlIO.getResultSet(MysqlIO.java:477)
        at com.mysql.jdbc.MysqlIO.readResultsForQueryOrUpdate(MysqlIO.java:2631)
        at com.mysql.jdbc.MysqlIO.readAllResults(MysqlIO.java:1800)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2221)
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2618)
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2568)
        at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1557)
        at cascading.jdbc.db.DBInputFormat$DBRecordReader.<init>(DBInputFormat.java:97)
        at cascading.jdbc.db.DBInputFormat.getRecordReader(DBInputFormat.java:376)
        at cascading.tap.hadoop.MultiInputFormat$1.operate(MultiInputFormat.java:282)
        at cascading.tap.hadoop.MultiInputFormat$1.operate(MultiInputFormat.java:277)
        at cascading.util.Util.retry(Util.java:624)
        at cascading.tap.hadoop.MultiInputFormat.getRecordReader(MultiInputFormat.java:276)
        at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:370)
        at org.apache.hadoop.mapred.MapTask.run(MapTask.java:324)
        at org.apache.hadoop.mapred.Child$4.run(Child.java:266)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:415)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1278)
        at org.apache.hadoop.mapred.Child.main(Child.java:260)

最佳答案

你应该看看内存管理的设置,比如 io.sort.mbmapred.cluster.map.memory.mb 因为堆空间错误通常是由于一个分配问题而不是映射号。

如果你想强制你的 map 编号,你必须考虑到一些值先于其他值使用。例如,如果 mapreduce.input.fileinputformat.split.maxsize 很小,即使您将 mapred.tasktracker.map.tasks.maximum 设置得很小,也会产生大量任务值(value)。

只有当 dfs.block.size 大于 mapreduce.input.fileinputformat.split.maxsize

时,它才会影响生成的 map 数量

关于Hadoop conf确定num map任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17810368/

相关文章:

hadoop - 是否可以在工作流 oozie 中使用两个 "job.properties"文件?

hadoop - Flume:HDFSEventSink - 如何动态多路复用?

java - Hadoop 自定义 InputFileFormat 生成空结果

javascript - 我如何通过 Ember 中的脚本标签提供第三方 js 库?

java - Hadoop - 按前缀聚合

java - 具有多种 key 类型的Hadoop MapReduce映射器和精简器

macos - 在Mac OS的Hive中创建表时失败,错误localhost:9000在连接时失败

r - rHipe mapreduce获取正在处理的文件名

hadoop - 在配置单元 mapreduce 中计算 desc

python - python 或 perl 中的模板化配置?