• 【Hadoop离线基础总结】HDFS详细介绍


    HDFS详细介绍


    分布式文件系统设计思路

    • 概述
      只有一台机器时的文件查找:hello.txt /export/servers/hello.txt
      如果有多台机器时的文件查找:hello.txt node02 /export/servers/hello.txt

      为了解决数据丢失的问题,引入副本机制,保证数据不会丢失

      如果对文件进行切块存储,那么元数据信息又要继续变化

      blk元数据信息的记录
       blk_00001 node01 node03 /export/servers/blk_00001
       blk_00002 node02 node01 /export/servers/blk_00002
       blk_00003 node03 node02 /export/servers/blk_00003

    • 概念简图
      在这里插入图片描述

    文件系统基本介绍

    • 概览
      在这里插入图片描述
    • 重点了解
      Local:本地文件系统
      HDFS:分布式文件系统(最重要)
      HSFTP:FTP文件系统 ftp:// 可以做文件的上传下载
      WebHDFS:浏览器操作文件系统,可以允许我们通过浏览器上传、下载、修改HDFS上面的文件

    HDFS文件系统的设计目标

    • 概述
      1.硬件错误,特别是硬盘的损坏是常态(副本机制解决)
      2.数据流访问,所有的访问都是访问大量的数据,使用IO流一直操作,追求的是稳定,不是效率
      3.大数据集,假设所有存储到hdfs的数据都是海量的数据,不擅长处理小文件(因为一个小文件会占用一个元数据,元数据都存储在内存当中,大量的小文件会产生大量的元数据,导致占用NameNode大量内存)
      4.简单的相关模型,假设文件是一次写入,多次读取,不会有频繁的更新(比较擅长存储一些历史数据)
      5.移动计算比移动数据便宜
      6.多种软硬件的可移植性

    HDFS基础架构图

    在这里插入图片描述
    在这里插入图片描述

    • NameNode和DataNode总结概述
      在这里插入图片描述
      NameNode主要负责管理文件系统的名字空间(namespace)以及客户端对文件的访问,还有存储元数据。DataNode则主要负责处理用户的读写数据NameNode的元数据保存在两个地方,一个是内存,一个是磁盘(磁盘存的是元数据的快照,如果快照非常大,停机再启动代价会非常大)

    文件副本机制和block块存储

    • 图解
      在这里插入图片描述
    • 概述
      数据副本的存放机制:NameNode会首先找离客户端最近(跨交换机最少的)的一台机器上传block块,然后再去做备份。
      NameNode负责数据block块的复制。(定期检测block的副本数,如果不够3个,就进行复制)
      bolck块的大小,可以根据实际工作当中的文件特性来调整,如果都是一些大文件,可以微调block块的大小这么做的原因可以举例来说明
      128M的bolck块:300M的文件会分成3个block块,要占用3个元数据
      256M的block块,300M的文件只会分成2个block块,只需要占用2个元数据
      这样可以有效节省NameNode的内存空间,这也是HDFS更擅长处理大文件的原因之一。

      块缓存:distributedCache 可以用来实现我们的文件的缓存。

      hdfs的权限验证:采用了与linux类似的权限验证机制,权限验证比较弱(防止好人做错事,不能阻止坏人做坏事)(HDFS相信你告诉我你是谁,你就是谁)


    FSImage与edits


    HDFS文件的写入过程和读取过程

    • 写入过程
    Created with Raphaël 2.2.0开始第一步:客户端向NameNode请求上传一个文件第二步:NameNode反馈给客户端是否有权限上传第三步:客户端被通知拥有权限上传文件后,开始将文件切分成block块,并向NameNode询问第一个block块存储的位置第四步:通过机架感知原理,NameNode要找到离客户端最近(跨交换机最少的)的一台机器,并反馈给客户端第五步:客户端找到对应的DataNode以及对应block的id,然后开始建立RPC连接,并通过RPC连接建立一个pipeline当一个block传输完成之后,client再次请求NameNode上传第二个block到服务器(重复以上步骤)写入完毕(数据全部上传完成后,客户端会通知NameNode)
    • block块复制机制
      第一个block块保存在本机
      第二个block块保存在同一个交换机下的另一台机器
      第三个block块保存在不同的交换机下的机器
      block块存满之后,反向的校验机制会给客户端一个相应,告诉客户端第一个block已经保存,可以上传第二个block块……「block块ack机制」

    • 读取过程

    Created with Raphaël 2.2.0开始第一步:客户端发起请求,读取文件服务端校验客户端是否有权限读取文?第二步:NameNode查找元数据信息,找到这个文件对应的block块存储的位置第三步:客户端与DataNode通信建立socket通信,读取第一个block块。直到所有的block块都读取完成后,在客户端进行block块的拼接,组成一个最完整的文件读取完毕拒绝客户端请求yesno
    • 寻找block策略
      第一个找离客户端最近的block块找最近一次“心跳”的DataNode进行读取
    • 如果block块读取到一半的时候抛错了怎么办?
      客户端会重新请求NameNode找出出错block的副本,找副本重新读,没有断点续传的功能
  • 相关阅读:
    SQL SERVER 2008的数据压缩
    protected,internal和protected internal
    CSS笔记
    太吓人了!妈妈必看:国内人贩子抢孩子竟使出狠招
    ASP.NET上传图片的简单方法
    VS2005快捷键大全
    判断ExecuteScalar()是否返回结果
    AppSettings和ConnectionStrings的区别
    VSS中的签入和签出
    对目前工作烦躁的人来看看,你真正明白多少
  • 原文地址:https://www.cnblogs.com/zzzsw0412/p/12772494.html
Copyright © 2020-2023  润新知