zoukankan      html  css  js  c++  java
  • Hadoop-HDFS

    HDFS - 写文件

    1.客户端将文件写入本地磁盘的N#x4E34;时文件中

    2.当临时文件大小达到一个block大小时,HDFS client通知NameNode,申请写入文件

    3.NameNode在HDFS的文件系统中创建一个文件,并把该block id和要写入的DataNode的列表返回给客户端

    4.客户端收到这些信息后,将临时文件写入DataNodes

    • 4.1 客户端将文件内容写入第一个DataNode(一般以4kb为单位进行传输)
    • 4.2 第一个DataNode接收后,将数据写入本地磁盘,同时也传输给第二个DataNode
    • 4.3 依此类推到最后一个DataNode,数据在DataNode之间是通过pipeline的方式进行复制的
    • 4.4 后面的DataNode接收完数据后,都会发送一个确认给前一个DataNode,最终第一个DataNode返回确认给客户端
    • 4.5 当客户端接收到整个block的确认后,会向NameNode发送一个最终的确认信息
    • 4.6 如果写入某个DataNode失败,数据会继续写入其他的DataNode。然后NameNode会找另外一个好的DataNode继续复制,以保证冗余性
    • 4.7 每个block都会有一个校验码,并存放到独立的文件中,以便读的时候来验证其完整性

    5.文件写完后(客户端关闭),NameNode提交文件(这时文件才可见,֘#x5982;果提交前,NameNode垮掉,那文件也就丢失了。fsync:只保证数据的信息写到NameNode上,但并不保证数据已经被写到DataNode中)

    Rack aware(机架感知)

    通过配置文件指定机架名和DNS的对应关系

    假设复制参数是3,在写入文件时,会在本地的机架保存一份数据,然后在另外一个机架内保存两份数据(同机架内的传输速度快,从而提高性能)

    整个HDFS的集群,最好是负载平衡的,这样才能尽量利用集群的优势

    HDFS - 读文件

    1. 客户端向NameNode发送读取请求
    2. NameNode#x8FD4;回文件的所有block和这些block所在的DataNodes(包括复制节点)
    3. 客户端直接从DataNode中读取数据,如果该DataNode读取失败(DataNode失效或校验码不对),则从复制节点中读取(如果读取的数据就在本机,则直接读取,否则通过网络读取)
     

    HDFS - 可靠性

    1. DataNode可以失效

      DataNode会定时发送心跳到NameNode。如果ղ#x5728;一段时间内NameNode没有收到DataNode的心跳消息,则认为其失效。此时NameNode就会将该节点的数据(从该节点的复制节点中获取)复制到另外的DataNode中

    2. 数据可以毁坏

      无论是写入时还是硬盘本身的问题,只要数据有问题(读取时通过校验码来检测),都可以通过其他的复制节点读取,同时还会再复制一份到健康的节点中

    3. NameNode不可靠
     
  • 相关阅读:
    Windows Azure Cloud Service (14) 使用Windows Azure诊断收集日志记录数据
    Windows Azure Cloud Service (13) 用Visual Studio 2010 将应用程序部署到Windows Azure平台
    Windows Azure Cloud Service (15) 多个VM Instance场景下如何处理ASP.NET Session
    Windows Azure Storage (5) Windows Azure Drive
    Windows Azure Storage (7) 使用工具管理Windows Azure Storage
    SQL Azure(二) SQL Azure vs SQL Server
    webbrowser的自动提交
    提取视频的背景声音的软件
    Listview列排序的bug原因
    两个奇怪的问题
  • 原文地址:https://www.cnblogs.com/wxd0108/p/7149344.html
Copyright © 2011-2022 走看看