gpt4 book ai didi

hadoop - 并发执行 “single-threaded” hadoop:瓶颈在哪里?

转载 作者:行者123 更新时间:2023-12-02 20:56:06 24 4
gpt4 key购买 nike

我正在运行一个计算密集型,基于hadoop的map-reduce应用程序。我已将hadoop配置为使用尽可能少的线程,但是多个并发部署会导致应用程序的执行时间增加。

我找不到执行时间增加的原因,因此必须存在一个我尚未发现的瓶颈和/或一个我错过的配置参数。

试验台

我的测试平台包括3个Dell PowerEdge R630,每个都带有Intel Xeon E5-2630v3:8核,每核2个线程。这些机器位于同一10 Gbps集群中,并通过同一交换机互连。这些将称为M1M2M3

Hadoop配置

我正在hadoop-1.2.1上运行 java-1.6.0-openjdk-amd64 。我已将hadoop配置为使用尽可能少的线程。这是我的mapred-site.xml配置:

<configuration>
<property>
<name>mapred.map.tasks</name>
<value>1</value>
</property>
<property>
<name>mapred.tasktracker.map.tasks.maximum</name>
<value>1</value>
</property>
<property>
<name>mapred.reduce.tasks</name>
<value>1</value>
</property>
<property>
<name>mapred.tasktracker.reduce.tasks.maximum</name>
<value>1</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>10.0.0.1:9001</value>
</property>
<property>
<name>mapred.map.tasks.speculative.execution</name>
<value>false</value>
</property>
<property>
<name>mapred.reduce.tasks.speculative.execution</name>
<value>false</value>
</property>
<property>
<name>tasktracker.http.threads</name>
<value>2</value>
</property>
<property>
<name>mapred.reduce.parallel.copies</name>
<value>2</value>
</property>
</configuration>

部署方式

实际部署发生在通过 nova-docker生成的容器上。在每个部署中,我生成3个容器 C1C2C3,每台物理机有1个容器。假设 C1产生了 M1C2产生了 M2C3产生了 M3

尤其是:
  • 一个容器C1充当“主”;它运行Namenode和Jobtracker服务。
  • 其他两个容器C2C3充当“奴隶”,它们运行Datanode和Tasktracker服务。

  • 我已经进行了两次实验:
  • 一个并发部署
  • 两个并发部署

  • “两个并发”部署意味着有两个相同的部署并发运行。为了进一步说明,当运行两个部署时,存在六个容器:
    - C1a上的 C1bM1 - C2a上的 C2bM2 - C3a上的 C3bM3 C1aC2aC3a属于相同的map-reduce执行,并且按预期相互通信。分别针对容器 C1bC2bC3b也是一样。

    执行时间处理时间

    两种情况(1个并发部署,2个并发部署)都运行了10次,以获取良好的样本。这是1个和2个并发部署的执行时间。显而易见,在2个并发部署中,执行时间增加了6.72%。

    MapReduce Execution time

    问题

    我的 问题是:为什么即使我将hadoop配置为使用尽可能少的线程,运行两个并发部署时执行时间也会更长?尤其是:
  • 我可以遇到PCIe瓶颈或CPU瓶颈吗? (请参见下文)
  • 在配置hadoop以使用尽可能少的线程时,我是否错过了其他事项?
  • hadoop是否使用了比我所知道的更多的线程,这可能会使CPU或其他资源拥挤?

  • 我已经调查了以下内容:
  • 带宽消耗:我们绝对不是网络瓶颈。网络可以维持高达10 Gbps的速度,该应用程序的平均消耗不超过400-500 Mbps,并且没有其他人使用该群集。
  • PCIe:我已经测量了PCIe带宽,以调查是否存在瓶颈。我打开了一个related question on Superuser询问我的读数是否表明PCI拥塞。
  • CPU使用率:请参阅下一节。

  • CPU指标

    我安装了 PCM tools来测量执行期间的CPU使用率。这些工具安装在承载从属容器(Datanode,Tasktracker)的 物理机之一上。

    在以下情况下,我测量了处于 Activity 状态的内核的利用率:
  • 空闲(标记为“0个租户”)
  • 1个并发部署(标记为“1个租户”)
  • 2个并发部署(标记为“2个租户”)

  • CPU utilization

    显而易见,1个或2个并发部署的CPU利用率是相似的,尽管1个部署的CPU利用率平均较高。因此,CPU利用率似乎不是问题。我可能会缺少什么?

    请在评论中让我知道我是否可以提供任何其他信息。

    最佳答案

    为了回答我自己的问题,最终的瓶颈是写入磁盘时的I / O带宽。在iotop的帮助下,我测量了写入速度:

    enter image description here

    并使用dd测量了最大写入速度:

    # dd if=/dev/zero of=diskbench bs=1G count=1 conv=fdatasync
    1+0 records in
    1+0 records out
    1073741824 bytes (1.1 GB) copied, 7.38756 s, 145 MB/s

    写入速度似乎恒定在10 MB /秒左右,经常达到120-160 MB /秒。一个自然的问题是“为什么我们要连续写入磁盘?” hadoop的工作方式是:映射器将中间输出写入本地磁盘,而不是HDFS,正如 here所述。

    因此,由于映射器不断向本地硬盘写入数据,因此即使我们有足够的CPU处理能力,在运行多个hadoop时,也会出现瓶颈。

    关于hadoop - 并发执行 “single-threaded” hadoop:瓶颈在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44489647/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com