NameNode、DataNode详解(HDFS体系结构)

 分布式文件系统概述

  • 数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,因此迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统 。
  • 是一种允许文件通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和存储空间。
  • 通透性。让实际上是通过网络来访问文件的动作,由程序与用户看来,就像是访问本地的磁盘一般。 容错。即使系统中有某些节点脱机,整体来说系统仍然可以持续运作而不会有数据损失。
  • 分布式文件管理系统很多,hdfs只是其中一种,不合适小文件。

HDFS体系结构

NameNode、DataNode详解(HDFS体系结构)

Client客户端+Namenode+DataNode

1.Namenode

是整个文件系统的管理节点。它维护着1.整个文件系统的文件目录树,2.文件/目录的元信息和每个文件对应的数据块列表。3.接收用户的操作请求。

(见源码) 文件包括:(hdfs-site.xml的dfs.namenode.name.dir属性)

  • fsimage:元数据镜像文件。存储某一时段NameNode内存元数据信息。
  • edits:操作日志文件。
  • fstime:保存最近一次checkpoint的时间 以上这些文件是保存在linux的文件系统中。

总结:

NameNode维护着2张表:
1.文件系统的目录结构,以及元数据信息
2.文件与数据块(block)列表的对应关系
元数据存放在fsimage中,在运行的时候加载到内存中的(读写比较快)。
操作日志写到edits中。(类似于LSM树中的log)

(刚开始的写文件会写入到内存中和edits中,edits会记录文件系统的每一步操作,当达到一定的容量会将其内容写入fsimage中)

>>>多次格式化namenode的问题原因解释?

答:hdfs格式化会改变命名空间id,当首次格式化的时候datanode和namenode会产生一个相同的namespaceID,然后读取数据就可以,如果你重新执行格式化的时候,namenode的namespaceID改变了,但是datanode的namespaceID没有改变,两边就不一致了,如果重新启动或进行读写hadoop就会挂掉。

解决方案:hdfs  namenode -format -force   进行强制的格式化会同时格式化namenode和datanode

查看NameNode内容

  • 启动服务器bin/hdfs oiv -i 某个fsimage文件
  • 查看内容bin/hdfs dfs -ls -R webhdfs://127.0.0.1:5978/
  • 导出结果bin/hdfs oiv -p XML -i tmp/dfs/name/current/fsimage_0000000000000000055 -o fsimage.xml
  • 查看edtis内容bin/hdfs oev -i tmp/dfs/name/current/edits_0000000000000000057-0000000000000000186 -o edits.xml

在hadoop2中,namenode的50030端口换成8088,新的yarn平台默认是8088,也可以通过yarn-site.xml配置,如下:

 

 <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>neusoft-master:8088</value>
</property>
2.Datanode
  • 提供真实文件数据的存储服务。
  • 文件块(block):最基本的存储单位。对于文件内容而言,一个文件的长度大小是size,那么从文件的0偏移开始,按照固定的大小,顺序对文件进行划分并编号,划分好的每一个块称一个Block。
  • HDFS默认Block大小是128MB,以一个256MB文件,共有256/128=2个Block. 不同于普通文件系统的是,HDFS中,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间。ruc

(这样设置可以减轻namenode压力,因为namonode维护者文件与数据块列表的对应大小)

  • Replication。多复本。默认是三个。(hdfs-site.xml的dfs.replication属性)

(1)Hdfs块大小如何设定?

hdfs-default.xml

<property>
<name>dfs.blocksize</name> #block块存储的配置信息
<value>134217728</value> #这里的块的容量最大是128M,请注意
<description>
The default block size for new files, in bytes.
You can use the following suffix (case insensitive):
k(kilo), m(mega), g(giga), t(tera), p(peta), e(exa) to specify the size (such as 128k, 512m, 1g, etc.),
Or provide complete size in bytes (such as 134217728 for 128 MB).
</description>
</property>

描述信息翻译:

新文件的默认块大小(以字节为单位)。
您可以使用以下后缀(不区分大小写):
指定大小(例如128k,512m,1g等)的k(千),m(兆),g(giga),t(tera),p(peta)
或提供完整的大小(以128 MB为单位的134217728)。

***如何修改默认大小的blocksize?答:只需要修改上述配置文件即可。但是这种方式是全局的修改。  64M=67108864

      如果想针对文件修改,只需要使用命令修改即可 hadoop fs -Ddfs.blocksize=134217728 -put  ./test.txt /test

注意区别:一个文件可以产生多个快,多个文件是不可能成为一个块信息的,处于减轻namenode的压力,最好的方式就是一个文件一个块

(3)文件块存放路径查看与具体信息解释

(a)查找datanode存放数据的位置,配置信息在hdfs-site.xml中

副本机制:默认为3

vi hdfs-site.xml,可以修改,配置文件对全局生效

<configuration>
   <property>
     <name>dfs.replication</name>
     <value>3</value>
   </property>
</configuration>

总结:DataNode

使用block形式存储。在hadoop2中,默认的大小是128MB。
使用副本形式保存数据的安全,默认的数量是3个。

 

马洪飞

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:1   其中:访客  1   博主  0

  1. avatar glfore  来自天朝的朋友 QQ浏览器 Windows XP 江苏省苏州市 电信 1

    已经收藏,感谢分享!