开发者社区 问答 正文

MapReduce的各个阶段有什么优化空间吗?

MapReduce的各个阶段有什么优化空间吗?

展开
收起
芯在这 2021-12-06 22:12:15 362 分享 版权
1 条回答
写回答
取消 提交回答
  • 数据输入 默认情况下TextInputFormat对任务的切片是按文件切, 无论文件大小, 都会给一个单独的切片, 交给一个maptask, 这时如果输入的是大量小文件, 就会产生大量的maptask, 处理效率极低.

    最好的解决方法就是在预处理阶段将小文件合并, 再上传到HDFS处理分析.

    但如果已经上传到HDFS了, 就可以用另一种切片方法来补救, CombineTextInputFormat, 它的切片逻辑和TextInputFormat不同, 可以将多个小文件从逻辑上规划到一个切片中, 然后把这些小文件交给一个maptask.

    运行时间

    启动一个MapReduce任务, map阶段和reduce阶段都会有并行的task共同处理任务, 这些task都需要开启JVM, 然后初始化, 而这些JVM任务是很花费空间的, 如果运行一个20-30s的任务需要进行开启, 初始化, 停止JVM操作很是浪费. 所以我们应该尽量把数据量控制在能让每个task运行1分钟以上.

    数据倾斜

    可以通过对原始数据进行抽样得到的结果集来预设分区

    2021-12-06 22:21:20
    赞同 展开评论