我正在运行一个计算密集型、基于hadoop的map reduce应用程序。我已经将hadoop配置为使用尽可能少的线程,但是多个并发部署会导致应用程序执行时间的增加。
我找不到执行时间增加的原因,所以一定有一个瓶颈我没有发现和/或配置参数我错过了。
试验台
我的测试台由3个dell poweredge r630组成,每个都有一个intel xeon e5-2630v3:8核,2线程/核。这些机器位于同一个位置 10 Gbps
群集,由同一交换机互连。这些将被称为 M1
, M2
, M3
.
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个容器, C1
, C2
以及 C3
,每个物理机器有一个容器。我们假设 C1
是在 M1
, C2
在 M2
, C3
在 M3
.
特别地:
一个容器, C1
,充当“主人”;它运行namenode和jobtracker服务。
另外两个集装箱, C2
以及 C3
,作为“从属”,它们运行datanode和tasktracker服务。
我做了两次实验:
一个并发部署
两个并行部署
“两个并发”部署意味着有两个相同的部署同时运行。为了进一步澄清,当两个部署正在运行时,存在六个容器: C1a
以及 C1b
在 M1
- C2a
以及 C2b
在 M2
- C3a
以及 C3b
在
M3 C1a
, C2a
以及 C3a
属于同一个Map,减少执行,并按预期相互通信。容器也是如此 C1b
, C2b
以及 C3b
分别是。
执行时间
两个案例(1个并发部署,2个并发部署)都运行了10次,以获得一个好的示例。这里是1个和2个并发部署的执行时间;很明显,两个并发部署的执行时间增加了6.72%。
发行
我的问题是:为什么在运行两个并发部署时执行时间更长,即使我已经将hadoop配置为使用尽可能少的线程?特别地:
我可能是pcie瓶颈还是cpu瓶颈((见下文)
在配置hadoop以使用尽可能少的线程时,我是否错过了其他一些东西?
hadoop使用的线程是否比我所知道的多,这可能会阻塞cpu或其他资源?
我已经调查了以下情况:
带宽消耗:我们绝对不是网络瓶颈。该网络可以支持高达10 gbps的速度,应用程序平均不超过400-500 mbps,并且没有其他人使用该集群。
pcie:我已经测量了pcie带宽,以调查我是否在那里遇到瓶颈。我在superuser上打开了一个相关的问题,询问我的读数是否表明pci堵塞。
cpu利用率:请参阅下一节。
cpu指标
我安装了pcm工具来测量执行期间的cpu利用率。这些工具安装在承载从属容器(datanode、tasktracker)的一台物理计算机上。
我测量了以下情况下处于活动状态的内核的利用率:
空闲(标记为“0租户”)
1个并发部署(标记为“1租户”)
2个并发部署(标记为“2个租户”)
很明显,1个或2个并发部署的cpu利用率是相似的,尽管1个部署的cpu利用率平均略高。因此,cpu利用率似乎不是一个问题;我会错过什么?
请让我在评论中知道我是否可以提供任何额外的信息。
1条答案
按热度按时间nhjlsmyf1#
回答我自己的问题,最终的瓶颈是写入磁盘时的i/o带宽。在…的帮助下
![](https://i.stack.imgur.com/6PAak.png)
iotop
我测量了书写速度:和
dd
我测量了最大写入速度:写入速度似乎恒定在10 mb/秒左右,经常达到120-160 mb/秒。一个自然的问题是“为什么我们要连续写入磁盘?”这是hadoop的工作原理:Map器正在将它们的中间输出写入本地磁盘,而不是hdfs,正如这里所讨论的那样。
因此,由于Map程序不断地向本地硬盘写入数据,因此在运行多个hadoop执行时,可能会出现瓶颈,即使我们有空闲的cpu处理能力。