hdfs上的数据块问题

作者: 小小毛同学 | 来源:发表于2019-04-26 10:02 被阅读5次

一,数据块的大小

众所周知,hdfs上的数据块的大小是64M或是128M。那么为什么呢?

1.减少寻道时间,对于hdfs来讲,寻道是一个逻辑的概念,因为真正的寻道发生在磁盘,这里的寻道时间指的就是定位到块的时间。hdfs是存储大数据的,如果块设计的很小,一个文件就会由很多块组成,而HDFS上文件读写的最小单位是块,这样,寻找块的时间就会大大增加,降低读写效率。所以需要专门对hdfs上的小文件做处理的。

2.减少任务数,一个map或者一个reduce都是以一个块为单位处理,如果块很小的话,mapreduce任务数就会非常多,任务之间的切换开销变大,效率降低,同样,如果块很大的话,一个任务中就会有很多很多的数据,这样任务就会很慢。

3.减少元数据,再hdfs中,文件块的信息都是元数据,集群运行过程中元数据会都加载进namenode的内存中,如果块很小的情况下,元数据信息就会很多,namenode压力就会很大。当小文件变多的时候,就会造成namenode的压力多大而容易挂掉。

4.和1很相似,如果数据块很小,一个文件要分成很多块,而每个文件都有副本,当文件删除或者拷贝时,就会导致大量块移动,寻道开销和网络开销都会很大。

5.以后随着磁盘的读写速度的提升是可以提高块的大小的,这样也会是对集群资源的更好的利用,避免浪费。

二,数据块的分布

默认的数据块的复制因子是3,不过这个是可以根据实际情况来更改的。

这条数据所在的数据块的3分,是不会都放到同一台服务器上的。会在当前服务器上放一份,在临近服务器上放一份,最后一份放在其他机架上。这样的话就避免了服务器的宕机造成数据的丢失的情况。

在读取或是追加写数据的时候,是就近原则,在本服务器或是最近的服务器上找到这个数据块所在的地址,直接通过寻道,找到数据块,进行数据的读写操作。

三,数据块的平衡

如果集群在搭建好之后,没有做增加服务器或是磁盘的操作,各台服务器上dn的存储应该是差不多的。

但是当有增加磁盘或是增加服务器的操作的时候,就会有数据块的不平衡的情况出现,这时就需要使用hdfs自带的平衡器来处理。

集群中会有这么一个角色,在执行命令的时候,可以在主节点上执行或是在这个角色的节点上执行。

这个命令是:hdfs balancer

但是这个命令需要花的时间比较长,可以在集群不使用的时候来执行

四,数据块的监控

在hdfs上的数据块,要保证数据块是健康的,如果不健康的话,在删除或是移动操作的时候,容易造成数据的丢失或是角色的报错等。

要确保块是健康的,要用到这个命令。(fsck命令必须由HDFS超级用户来执行,普通用户无权限)命令是:hdfs fsck /

先说每个参数的含义吧

Total size : hdfs集群存储大小,不包括复本大小。(字节->KB->m->G->TB)

Total blocks (validated) : 总共的块数量,不包括复本。

Number of data-nodes : datanode的节点数量

Number of racks : 机架数量

Default replication factor : 默认的复制因子

Average block replication : 当前块的平均复制数,如果小 default replication factor,则有块丢失

Under-replicated blocks : 正在复制块数量,可采用 hadoop fsck -blocks  解决问题

Mis-replicated blocks : 正复制的缺少复制块的数量

Missing replicas : 缺少复制块的数量,通常情况下Under-replicated blocks\Mis-replicated blocks\Missing replicas 都为0,则集群健康,如果不为0,则缺失块了

Corrupt blocks : 坏块的数量,这个值不为0,则说明当前集群有不可恢复的块,即数据有丢失了

这是参数的意义。

上图可以看出集群是不健康的,主要问题是数据的的丢失。

在hdfs的页面也是可以看到这个错误的。

说明数据块是丢失的。

在默认情况下,块扫描器每隔三周(504小时)就会检测块,以应对可能出现的吸盘的故障。损坏的块会报给nn,并被及时修复。

这个周期是由(dfs.datenode.scan.period.hours)属性来设置的。这个属性是需要配置的,如果没有配置的话将不会默认检测的。

这里可以看到外网上的一些处理信息http://www.hadoopinrealworld.com/datanode-block-scanner/

这里是可以看到每个节点的平衡情况的http://datanode:50075/blockScannerReport

直接在配置文件中增加

hdfs上的数据块问题

有更多问题欢迎评论或是私聊(个人微信maochentingqiang),都是可以的。

相关文章

  • hdfs上的数据块问题

    一,数据块的大小 众所周知,hdfs上的数据块的大小是64M或是128M。那么为什么呢? 1.减少寻道时间,对于h...

  • HDFS学习

    1. HDFS:hadoop分布式文件管理系统,以流式数据访问模式来存储超大文件 2. HDFS数据块:HDFS上...

  • 源码|HDFS之DataNode:写数据块(3)

    源码|HDFS之DataNode:写数据块(1)、源码|HDFS之DataNode:写数据块(2)分别分析了无管道...

  • 【2019-04-28】Hadoop分布式文件系统

    Hadoop自带HDFS(hadoop distribute filesystem)。 HDFS 默认数据块 12...

  • 源码|HDFS之DataNode:写数据块(2)

    上一篇源码|HDFS之DataNode:写数据块(1)分析了无管道无异常情况下,datanode上的写数据块过程。...

  • HDFS概念与设计

    数据块 HDFS上的文件可能被划分到多个数据块上存储,默认每一个数据块的大小是128M,小于一个块大小的文件不会占...

  • 大数据技术原理——MapReduce

    Hadoop框架的两大核心为:HDFS和MapReduce。 HDFS是将数据以数据块为单位进行存储。 MapRd...

  • 大数据技术原理——MapReduce

    Hadoop框架的两大核心为:HDFS和MapReduce。 HDFS是将数据以数据块为单位进行存储。MapRdu...

  • HDFS 数据块管理

    Namenode 维护着 HDFS 中两个重要的关系: HDFS 文件系统和目录树 数据块和数据节点的对应关系,即...

  • Hadoop HDFS操作指南

    1 HDFS 组成架构 NameNode(NN)管理HDFS的名称空间配置副本策略管理数据块(Block)映射信息...

网友评论

    本文标题:hdfs上的数据块问题

    本文链接:https://www.haomeiwen.com/subject/utbxnqtx.html