在我的认识里,传统硬盘的写速度应该能够到120M/s的样子,网络传输速度也能够达到10M/s至少,在使用千兆交换机的前提下,甚至能够达到100M/s

PS:附上测试的环境参数:
机器配置如下:
机器数量:7
DataNode:7
内存:64G
硬盘:12T 5400转 磁盘
网络情况:公司内部局域网

写测试:
往HDFS上写100个128M的文件:
使用命令 :

bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.2.2-tests.jar TestDFSIO 
-read -nrFiles 100 -size 128MB -resFile ./TestDFSIOwrite.log

测试结果为:
在这里插入图片描述

看了大佬的分析:

  1. TestDFSIO writeTest对应一个MapReduce job,每个文件对应一个map task,也就是说,TestDFSIO write文件个数(nrFile)就是map任务个数。

  2. Throughput mb/secAverage IO rate mb/sec 是两个最重要的性能衡量指标。Throughput mb/sec衡量每个map task的平均吞吐量,Average IO rate mb/sec 衡量每个文件的平均IO速度。

    举个例子,你让TestDFSIO创造1000个文件,但你的集群中只有200个 map slots。这意味着需要大约5波 MapReduce(1000/200 = 5)才能写完全部的测试数据。所以集群的并发吞吐量为 {Throughput mb/sec} * 200, 并发IO速度则为{Average IO rate mb/sec}*200。

  3. 集群中机器较少时,带宽/disk io会成为瓶颈。举个例子,对于千兆网络,四台机器总共只能提供128M x 4 = 512M带宽,所以多个文件同时写的时候,单个文件的写速度会下降(平摊后)。写文件的数量越接近map slots的数量,Average IO rate mb/sec就越接近饱和的IO使用率。

  4. HDFS复制因子(HDFS replication factor)的作用也很明显,复制因子的值越小,吞吐量和平均IO速度就会越高。

  5. 最后一个关键点是标准差(IO rate std deviation)。高标准差表示数据散布在一个大的值域中,这可能意味着群集中某个节点存在性能相关的问题,这可能和硬件或软件有关。

  6. References:
    作者:taiwo
    链接:https://www.zhihu.com/question/21588815/answer/31027187


引出一个问题:slot是什么?

首先,slot不是CPU的Core,也不是memory chip,它是一个逻辑概念,一个节点的slot的数量用来表示某个节点的资源的容量或者说是能力的大小,因而slot是 Hadoop的资源单位。

Hadoop利用slots来管理分配节点的资源。每个Job申请资源以slots为单位,每个节点会确定自己的计算能力以及memory确定自己包含的slots总量。
当某个Job要开始执行时,先向JobTracker申请slots,JobTracker分配空闲的slots,Job再占用slots,Job结束后,归还slots。每个TaskTracker定期(例如淘宝Hadoop心跳周期是5s)通过心跳(hearbeat)与Jobtracker通信,一方面汇报自己当前工作状态,JobTracker得够某个TaskTracker是否Alive;同时汇报自身空闲slots数量。
JobTracker利用某个调度规则,如Hadoop默认调度器FIFO或者Capacity Scheduler、FairScheduler等。(注:淘宝Hadoop使用云梯调度器YuntiScheuler,它是基于Fair Scheduler进行修改的)

Hadoop里有 两种slots, map slots和reduce slots,map task使用map slots,reduce task使用reduce slots

reducer slots总数的计算公式如下:

Map slots总数=集群节点数×mapred.tasktracker.map.tasks.maximum

Reducer slots总数=集群节点数×mapred.tasktracker.reduce.tasks.maximum

References:
原文链接:https://blog.csdn.net/suibianshen2012/article/details/48272891


下面说下mapred.tasktracker.map.tasks.maximum

mapred.tasktracker.map.tasks.maximum这个应该是hadoop2.x的用法,我在hadoop3.x的官网上看到它已经改名为
mapreduce.tasktracker.map.tasks.maximum

参数 default
mapreduce.tasktracker.map.tasks.maximum 默认:2 . / describe:The maximum number of map tasks that will be run simultaneously by a task tracker.
mapreduce.tasktracker.reduce.tasks.maximum 默认:2 . / describe:The maximum number of reduce tasks that will be run simultaneously by a task tracker.

mapred.tasktracker.map.tasks.maximum设置为节点的cpu cores数目或者数目减1比较合适

										#mapred-site.xml

<property>
    <name>mapred.tasktracker.map.tasks.maximum</name>
    <value>8</value>
    <description>The maximum number of map tasks that will be run
    simultaneously by a task tracker.
    </description>
</property>
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐