Hadoop - block,replication,architecture

Hadoop - block,replication,architecture

1.Block

  • hadoop2.0以上,一个block块的大小为128m,hadoop2.0以下为64m
  • block块为128m,并不意味着存储就是128m,打个比方,一瓶水500ml,用150ml的杯子来分,那么至少需要4个杯子,3*150ml=450ml,剩下的一个杯子只有50ml了,这个150ml就相当于一个block的大小,而没满的杯子只有50ml的了,但是我们分的杯子规格是固定的.block就是规格,容量
  • hdfs适用场景:大文件存储,小文件是致命的

原因:假设有10个10m的小文件,30m的1个大文件

每个小文件都不足128m,都不会占满128m,使用10个块,30m的也占不满,所以也占用一个块,总共用了11个块

如果条件是1个100m的和30m的文件,那么只需要2个块,block块的数量减少了很多

我们知道NameNode是存储block块相关信息的,当block块很多时,NameNode需要管理的block太多了

小文件(<=30m),nn维护的字节大约250字节,假设nn内存4G,有1亿个小文件,那么需要1e*250字节/1024/1024/1024=23G大约,内存直接爆了

需要注意,NameNode不存储block,之存储block在哪个节点,哪个路径等等相关信息

  • block块的大小可在hdfs-site.xml进行调整dfs.blocksize

2. Replication

replication副本数,默认情况下3份,伪分布式只需要1份就好了,调整hdfs-site.xml调整dfs.replication参数

思考

块大小128m,副本数3,一个文件260m,可以分多少块,多少实际存储

answer: 9块,3*260m=780m实际存储

3. HDFS Architecture

HDFS has a master/slave architecture. An HDFS cluster consists of a single NameNode, a master server that manages the file system namespace and regulates access to files by clients. In addition, there are a number of DataNodes, usually one per node in the cluster, which manage storage attached to the nodes that they run on. HDFS exposes a file system namespace and allows user data to be stored in files. Internally, a file is split into one or more blocks and these blocks are stored in a set of DataNodes. The NameNode executes file system namespace operations like opening, closing, and renaming files and directories. It also determines the mapping of blocks to DataNodes. The DataNodes are responsible for serving read and write requests from the file system’s clients. The DataNodes also perform block creation, deletion, and replication upon instruction from the NameNode.

HDFS是一个主从架构。一个HDFS集群由一个NameNode组成,NameNode是一个主服务器,它管理文件系统命名空间并控制客户机对文件的访问。另外,还有许多datanode,通常是集群中的每个节点,它们管理属于它们所在的节点上的存储。HDFS提供了一个文件系统命名空间,允许将用户数据存储在文件中。在HDFS内部,一个文件会被分成一个或多个块,这些块存储在一组datanode中。NameNode执行文件系统命名空间的相关操作,如打开、关闭和重命名文件和目录。同时,它也保存了块到datanode的映射关系。datanode负责处理来自文件系统客户端的读写请求。datanode扮演了执行来自NameNode的指令如创建、删除和复制的角色。

Hadoop - block,replication,architecture

  • 主从架构

  • Rack机架

  • NameNode

    • 存储文件系统的命名空间
      • 文件名称
      • 文件目录
      • 文件属性(权限,创建时间,副本数…)
      • 文件对应哪些block,block在哪些节点
    • 不会持久化存储这个映射关系,一般是集群启动和运行时datanode定期发送blockreport
  • DataNode

    • 存储数据块和数据库校验以及和NameNode通信
      • 定期发送心跳包(dfs.heartbeat.interval),默认3
      • 定期发送blockreport块报告(dfs.blockreport.intervalMsec),默认6h
  • SecondaryNameNode

    • 定期合并NameNode的fsimage和editlog为新的fsimage,并推送给NameNode,俗称检查点(checkpoint),也就是定期备份
    • 备份流程

    NN情况
    Hadoop - block,replication,architecture
    SNN情况Hadoop - block,replication,architecture

    [外链图片转存失败(img-vVkPoz65-1562478995558)(C:\Users\lurongjiang\AppData\Roaming\Typora\typora-user-images\1562477160668.png)]

nn中edits_inprogress…314是正在写的操作日志,其他edits都是过往的editlog,fsimage…313是最新的checkpoint,距离314还差一个314,当snn去checkpoint会把edits…314(如果期间有多个editlog会拷贝多个editlog)和fsimage…313复制到snn,进行合并之后,发送给nn fsimag…314

总的来说,就是snn把上一次检查点到本次检查点期间的日志拷贝到snn,进行合并之后,发送给nn

4. 副本放置策略

  • client写block块
    • 如果提交的节点就是datanode,现在所在的datanode写第一份
    • 如果提交节点不是datanode,那么就是集群外,会随机挑选一个不太忙,cpu空闲的datanode进行写第一份
  • 完成之后在另一个机架上(防止一个机架挂,全都挂了)datanode写block块的第2个副本
  • 第2个block副本写完之后,第3个在与第二个副本相同机架的不同datanode进行第3份的block块副本写