【问题标题】:Hadoop Optimization SuggestionHadoop优化建议
【发布时间】:2016-01-01 21:15:48
【问题描述】:

考虑一个场景: 如果我增加 HDFS 中数据的复制因子;假设在 10 节点集群中,我将 RF = 5 而不是 3(默认),它会提高我的数据处理任务的性能吗?

与默认复制设置相比,映射阶段是否会更快完成?

对reduce阶段会有影响吗?

【问题讨论】:

    标签: hadoop


    【解决方案1】:

    复制对存储的影响:

    • 复制因子对集群的存储有巨大的影响。很明显:Larger the replication factor, lesser the number of files you can store in the cluster
    • 如果复制因子为 5,则每 1 GB 数据摄取到集群中,您将需要 5 GB 的存储空间,并且您将很快用完集群中的空间。
    • 由于 NameNode 将所有元信息存储在内存中,它会很快耗尽空间来存储元数据。因此,必须为您的 NameNode 分配更多内存(检查HADOOP_NAMENODE_OPTS)。
    • 数据复制操作将花费更多时间,因为数据复制是跨数据节点的菊花链。在提交写入/追加之前,现在需要 5 个数据节点确认数据存储,而不是 3 个数据节点

    复制对计算的影响:

    映射器:

    • 复制因子越高,调度映射器的选项就越多。复制因子为 3,您可以在 3 个不同的节点上调度映射器。但是,如果因子为 5,您将有 5 种选择
    • 随着复制因子的增加,您可能能够获得更好的数据局部性。每个映射器都可以安排在数据所在的同一节点上(因为现在有 5 个选项,而不是默认的 3 个),从而提高了性能。
    • 由于有更好的数据局部性,更少的映射器将复制节点外或机架外的数据

    由于这些原因,具有较高复制因子的映射器可能比具有较低复制因子的映射器更早完成。

    由于通常映射器的数量总是高于化简器的数量,因此您可能会看到工作绩效的整体提升。

    减速机:

    • 由于 reducer 的输出直接写入 HDFS,因此您的 reducer 可能需要更多时间来执行,并且复制因子更高。

    总体而言,您的映射器可能会以更高的复制因子执行得更快。但是,实际的性能提升取决于各种因素,例如集群的大小、带宽、NameNode 内存等。

    在回答了这个问题后,我在这里遇到了另一个类似的问题:Map Job Performance on cluster。这还包含更多信息,以及各种研究论文的链接。

    【讨论】:

      【解决方案2】:

      将复制因子设置为5 将导致HDFS 名称节点在集群中的可用数据节点上维护5 文件块的总副本。 namenode 执行的此复制操作将导致更高的网络带宽使用,具体取决于要复制的文件的大小和网络的速度。

      复制因子在 map 或 reduce 阶段都没有直接影响。在运行 map-reduce 作业时复制块时,您最初可能会看到性能下降 - 这可能会导致严重的网络延迟,具体取决于文件的大小和您的网络带宽。

      整个集群中的 5 复制因子意味着 4 的数据节点可以从集群中消失,并且您仍然有足够的节点来访问 HDFS 中的所有文件,而不会出现文件损坏或丢失块.如果您的 RF = 4 则可以松动 3 台服务器,并且仍然可以访问 HDFS 中的所有文件。

      设置较高的复制因子会增加您的整体 HDFS 使用量,因此如果您的总数据大小为 1TB,则 RF=3 意味着您的 HDFS 使用量将为 3TB,因为切碎的块在整个数据集中复制 n-1 (3-1 = 2) 次集群。

      【讨论】: