大数据hadoop学习

1、HDFS默认分块64M,一个文件可能被分成多个快存储。

2、HDFS的nameNode和dataNode

     NameNode存储元数据,存储在内存中,保存文件、block、datanode之间的映射关系,起到数据目录的作用;

    DataNode存储数据,文件保存到磁盘,维护了dataNode id 与本地文件映射关系。

    NameNode的数据结构:FsImage,维护文件树以及文件树中文件,文件夹的关系。FsImage没有记录快存储在哪一个数据节点上,而是由名称节点把这些映射保存在内存中,数据节点会把自己所包含的块列表上报给名称节点,并定期执行这个操作;

  EditLog记录了所有针对文件的创建、删除、重命名等操作。

  名称节点启动的时候,会首先将FsImage的内容加载到内存中,然后执行EditLog文件中的操作,保证内存中的元数据与实际同步。一旦内存中成功建立文件系统元数据的映射,则创建一个新的FsImage和一个空的EditLog文件。因为FsImage可能很大,所以每一次名称节点起来以后,会对FsImage和EditLog进行合并,生成一个新的FsImage和空的EditLog,删除原来的FsImage ,所以每一次更新从EditLog读取。


3、随着对HDFS的不断操作,EditLog也会不断变大,这时候SecondryNameNode起作用了,SecondryNameNode的工作情况:

   1)定期与namenode通信,请求其停止使用EditLog,暂时将新的写操作写到一个新文件edit.new上;这个操作瞬间完成,上层基本感受不到;

   2)SecondryNameNode通过http get请求,将namenode的EditLog和FsImage下载到本地相应的文件目录下;

   3)SecondryNameNode合并FsImage和EditLog;

   4)SecondryNameNode post新的FsImage到namenode上;

   5)nameNode接收到FsImage后,替换掉原来的FsImage,并且edit.new替换掉原来的EditLog,从而减小EditLog。


4、数据节点

     数据节点会根据客户端或者namenode的调度进行数据的存储和检索,并定期向namenode发送自己的存储块的列表;

    数据节点的数据是存储在本地的Linux文件系统中。

5、HDFS采用Master/slave结构,HDFS的命名空间包括目录、文件、块,和传统的分级文件系统一致。

6、HDFS使用的是TIC/IP协议,客户端通过TCP协议向名称节点发起请求并且使用的是客户端协议进行交互;

     名称节点与数据节点使用数据节点协议进行交互。客户端与数据节点的交互是用的是RPC协议。

     名称节点不会主动发起RPC交互,二是响应客户端和数据节点的RPC请求。

7、HDFS的冗余存储

     HDFS采用多副本方式对数据进行冗余存储,通常一个数据块的多个副本保存在不同的数据节点上;

    优点:加快数据传输;容易检查数据错误;保证数据的可靠性。

8、多副本冗余备份的数据存取策略

     第一副本放在上传文件的数据节点;如果是分布式,则随机选取一个cpu和磁盘不太忙的节点存储;

    第二副本放在与第一副本不同机架的节点上;

     第三副本放在与第一副本相同机架不同的数据节点上。

9、多副本的读取策略

   HDFS提供API确定数据节点机架ID,客户端也可以调用APi获取自己所在的机架ID。客户端读取数据的时候,从名称节点获取数据块列表,找到副本所在的数据节点,然后通过API确定客户端与这些数据节点的机架ID;当发现某个数据块节点的机架ID与客户端相同时,就选择该副本进行读取,如果没有,则随机选取一个副本进行读取。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值