测试上传数据到集群和拉取数据的时间。HDFS的读写性能主要受网络和磁盘影响比较大。为了方便测试,将hadoop102、hadoop103、hadoop104虚拟机网络的带宽都设置为100Mbps。100Mbps/8=12.5M/s。

1 测试HDFS写性能

写测试原理:
  向磁盘写测试文件,然后通过MapTask读文件写到HDFS,写的过程中会记录每个Map向HDFS写的总时间和平均速度,然后把值汇总到ReduceTask,汇总之后再由ReduceTask计算吞吐量:

  Average IO rate=所有的map平均速度之和/文件总数

  Througput=所有数据量累加/所有map总时间之和

  测试文件个数=集群cpu总核数-1(如3台服务器,每台服务器cpu核数为1,则测试文件个数=3*1-1=2)用来保证每个MapTask在每个节点上都有启动。

在这里插入图片描述
向HDFS写2个128M的文件。

hadoop jar/opt/module/hadoop-3.3.1/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.3.1-tests.jarTestDFSIO -write -nrFiles 2 -fileSize 128MB

如果测试中出现异常,会提示内存大于虚拟内存。
原因:
  虚拟内存检测中,设置的物理内存为2G,虚拟内存为物理内存的2.1倍,即虚拟内存为4.2G,但由于centos7和Java8兼容不是特别好,Linux会给程序预留大量内存,导致实际得到的虚拟内存小于物理内存,导致虚拟内存经常溢出,所以只开启物理内存。

解决:
  在yarn-site.xml中设置虚拟内存检测为false,然后分发文件并重启yarn。

<!--是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true-->
<property>
    <name>yarn.nodemanager.vmem-check-enabled</name>
     <value>false</value>
</property>

在这里插入图片描述
返回参数解释:
  Number of files:生成MapTask数量,一般是集群中CPU核数-1,测试虚拟机就按照实际的物理内存-1分配即可。

  Total MBytes processed:单个map处理的文件大小。

  Throughput mb/sec:单个mapTak的吞吐量
    Througput=所有数据量累加/所有map总时间之和
    集群整体吞吐量:生成mapTask数量x单个mapTak的吞吐量。

  Average IO rate mb/sec:平均mapTak的吞吐量
    Average IO rate=所有的map平均速度之和/文件总数
    单个map平均速度=单个MapTask处理文件大小/单个MapTask写数据的时间

  IO rate std deviation:方差,反映各个mapTask处理的差值,越小越均衡。

结果分析:
在这里插入图片描述
副本1在本地,所以不参与测试,参与测试的文件数量=2个文件x2个副本=4个。

压测后的速度=1.67

实测速度=1.67M/s x 4个文件 = 6.68M/s

三台服务器带宽总和=12.5+12.5+12.5=37.5M/s

  实测速度远小于网络,并且实测速度不能满足工作需求,可以使用固态硬盘或者增加磁盘个数。

2 测试HDFS读性能

读取HDFS集群2个128M的文件。

hadoop jar/opt/module/hadoop-3.3.1/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.3.1-tests.jarTestDFSIO -read -nrFiles 2 -fileSize 128MB

在这里插入图片描述
文件读取速度大于带宽原因:
  数据读取使用就近原则,此时只有3台服务器、3个副本,读取时相当于读取的时本地磁盘的数据,没有经过网络。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐