• HDFS中block设置128M的原因


    现在记录一下为什么HDFS上一个block设置128M,参考了博客进行理解。

    block块为什么设置的比较大

    这是一个经典的面试题,需要从性能和储存上来考虑。

    传输性能上考虑

    在硬盘上读取数据就是一个个的扇区读取的,读取的最小单位是扇区sector,一个扇区大小一般为512byte,如果要读取到一个数据,需要完成寻址操作和读取操作,就首先找到数据存储的地方,让磁头找到要读取的扇区,然后读取。
    HDFS系统不像物理的磁盘一样,是一种建立在物理文件系统上的抽象的文件系统,读取数据的最小单位是block。它也需要寻址和读取操作,一般来说需要设置寻址的时间除以读取时间越短越好,这样可以最小化寻址开销,即让寻址在读取文件的总时间中最少。如果一个block设置很小,则寻址的时间和读取的时间可能会差不多,这样读取一个文件寻址所占的时间可能会很多。
    打个比方计算一下,考虑到磁盘传输数据的速度明显大于定位所需要的时间,假设传输速率100M/s,定位一个block时间0.1s(实际比这个快)。
    (1)如果block设置为10M,一个100M文件需分成10个block,则读取一个10M的block,定位时间0.1s,读取时间也是0.1s,则读取完100M文件总共需要2s,寻址相当如占了一半时间。
    (2)如果将block设置为100M,则定位1次需要0.1s,读取一次完成需要1s,总共只需要1.1s,明显节约了时间。
    所以block块的大小不能设置过小,需要设置大一些,现在Hadoop 2.X中,考虑到磁盘传输速度和寻址时间,一般设置128M。
    那为什么不将block设置越大越好呢,这是因为MapReduce执行任务时一次只能处理一个block的数据,如果设置越大就会有越少的map来执行任务,这样会影响计算性能,因此也不能设置过大。

    存储性能上考虑

    简单理解,存储上如果block设置过小,则会产生的更多的元数据(块的位置、大小等信息,150字节),这样对namenode来说压力很增大,因此也不建议block设置过小。

    设置128M原因

    以下是设置128M的原因分析,参考了如下博客。

    (1)现有条件:HDFS寻址时间实际大概0.01s,即10ms,普通磁盘的传输速度100M/s,由于一般HDFS部署在廉价的机器上因此考虑普通磁盘也是有道理的。

    (2)测试经验:大量测试经验表明寻址时间占传输时间的1%是性能比较优的。因此寻址一次0.01s,比较适合输出1s的数据,所以100M/s下就是可以传输100M的数据,因此选择128M。

    实际生产中,磁盘传输效率会更高,就会设置block的大小更大一些,可以参考上面的计算方法估算。

    参考博文:
    (1)https://www.cnblogs.com/isabellasu/p/11175643.html

  • 相关阅读:
    1040. Moving Stones Until Consecutive II
    999. Available Captures for Rook
    1035. Uncrossed Lines
    1031. Maximum Sum of Two Non-Overlapping Subarrays
    配置启动挂载:fstab文件详解
    Linux下某个进程CPU占用率高分析方法
    linux中uptime命令查看linux系统负载
    强大的strace命令用法详解
    公司内网,配置代理以后无法使用yum源
    sshd_config配置文件
  • 原文地址:https://www.cnblogs.com/youngchaolin/p/11519810.html
Copyright © 2020-2023  润新知