hadoop - 在小型HDFS文件上长时间运行的 map task

标签 hadoop hdfs

假设有一个文本文件包含10000行的情况,因此将其保存在HDFS中时,它会很小。现在,您的目标是在此小文件上运行映射/归约作业,希望文本文件的每一行都传递给映射器。但是,每个映射k,v的处理时间很长,您想在集群上启动尽可能多的映射器,以获取最大可能的并行度,从而尽快完成映射作业。

因为文件很小,所以它只能保存在一个或两个hdfs块中,并且我假设hadoop为该作业准备的映射数将等于恰好是一两个的hdfs块数。但这是不希望的,因为您要启动尽可能多的映射器。这是我的问题吗?

  • 在为小文件处理的场景中,控制适当数量的映射器有哪些选择?
  • 每个可用选项的优缺点是什么?
  • 最佳答案

    最好的方法是使用NLineInputFormat。根据文档NLineInputFormat which splits N lines of input as one split。这种方法的缺点是丢失了数据局部性,因为数据很小,这无关紧要。

    关于hadoop - 在小型HDFS文件上长时间运行的 map task ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9105260/

    相关文章:

    hadoop - 通过抛出错误对组内的记录进行抽样

    hadoop - 在托管模式下运行 Yarn

    hadoop - HDFS 可以复制到其他集群吗?

    java - 使用 Java 将 spark RDD 保存到本地文件系统

    hadoop - 如何为下一个作业共享或存储上一个 MapReduce 作业的状态?

    python - 将gzip文件保存在应用于rdd的函数中

    hadoop - 多节点hadoop集群安装

    apache-spark - GraphFrames:合并具有相似列值的边缘节点

    python - 经过快速启动后,在访问 hadoop 时遇到一些问题

    Hadoop:增加 block 大小时性能下降?