精华内容
下载资源
问答
  • HDFS工作原理

    2017-11-23 17:00:58
    HDFS工作原理一、 概述 1、 HDFS集群分为两大角色:NameNode、DataNode 2、 NameNode负责管理整个文件系统的元数据 3、 DataNode负责管理用户的文件数据块 4、 文件会按照固定的大小(blocksize)切成若干块后...

    HDFS工作原理

    一、 概述
    1、HDFS集群分为两大角色:NameNode、DataNode
    2、NameNode负责管理整个文件系统的元数据
    3、DataNode负责管理用户的文件数据块
    4、文件会按照固定的大小(blocksize)切成若干块后分布式存储在若干平台的datanode上
    5、每一个文件块可以有多个副本,并存放在不同的datanode上
    6、DataNode会定期向NameNode汇报自身所保存的文件block信息,而namenode则会负责保持文件的副本数量
    7、HDFS的内部工作机制对客户端保持透明,客户端请求访问HDFS都是通过向namenode申请来进行的。

    二、 HDFS写数据流程

    1、概述
    客户端要向HDFS写数据,首先要跟namenode通信,确认可以写文件并获取接收文件块的datanode。然后,客户端按顺序将文件逐个块(block)传递给响应的datanode,并由接受到block的datanode负责向其他datanode复制块的副本。

    2、写数据的详细步骤
    图1.HDFS写数据过程

    a、和NameNode通信请求要上传文件,NameNode收到请求后检查目标文件是否已经存在,父目录是否存在
    b、NameNode返回信息告知客户端是否可以上传文件
    c、如果可以上传,client会向NameNode请求第一个文件块(block)128M该传输给哪个DataNode服务器
    d、NameNode返回3个可用DataNode服务器A、B、C
    e、客户端client会请求3台DataNode中一台假设为A,进行上传数据(本质上一个RPC调用,简历popeline),A收到请求后会继续调用B,然后B调用C,将整个pipeline建立完成,逐级返回客户端
    f、客户端Client开始往DataNodeA以packet(64K)为单位上传第一个文件块(Block)(先从磁盘读取数据放到一个本地内存缓存)。当A收到一个packet就会传递给B,B会传给C;A每传一个packet会放入一个应答队列等待应答。
    g、当一个文件块传输完成之后,客户端client再次请求namenode上传第二个文件块的服务器。
    

    三、 HDFS读数据流程

    1、 概述
    客户端将要读取的文件路径发送给NameNode,NameNode获取文件的元数据(主要是block的存放位置信息)返回给客户端,客户端根据返回的信息找到相应的DataNode,逐个获取文件的块信息并在客户端本地进行数据追加合并从而获得整个文件。

    2、读数据的详细步骤
    图2.HDFS读数据过程

    a、  客户端和NameNode通信查询元数据,找到文件块所在的DataNode服务器
    b、  挑选一台DataNode服务器(就近原则,然后随机),请求简历socket流。
    c、  DataNode开始发送数据(从磁盘里面读取数据放入流,以packet为单位来做校验)
    d、  客户端以packet为单位接收,先在本地进行缓存,然后写入目标文件。
    

    四、 NameNode工作机制

    1、 NameNode职责
    负责客户端的请求
    负责元数据的管理
    负责维护目录树
    2、 元数据存储机制

    a)内存中有一份完整的元数据(内存meta data)
    b)磁盘有一个“准完整”的元数据镜像(fsimage)文件,该文件在NameNode的工作目录中
    c)用于衔接内存元数据和持久化元数据镜像fsimage之间的操作日志:edits文件
    当客户端对hdfs中的文件进行新增或者修改操作,操作记录首先被记入edits日志文件中,当客户端操作成功后,相应的元数据会更新到内存元数据中。
    

    3、 元数据查看
    通过hdfs的工具查看
    hdfs oev –I 日志文件 -o 输出路径及文件名
    hdfs oiv –I fsimage_000000000xxx –p XML –o fsimage.xml
    4、 元数据的checkpoit
    每隔一段时间,会由secondary namenode将namenode上积累的所有的edits和一个最新的fsimage下载到本地,并加载到内容进行merger,整个过程称为checkpoint

    a、客户端更新元数据(更改文件名称、路径、删除文件、增删改操作),NameNode会将操作日志记录到edits中。
    b、Secondary NameNode会定期的去请求NameNode是否需要CheckPoint。
    c、如果需要,namenode会滚动当前的日志edits.inprogess,将当前的edits和NameNode中的fsimage下载到SN中。
    d、SN将edits和fsimage加载到内存进行合并,dump成新的fsimage镜像文件,并重新上传到namenode中,重新命名为新的fsimage
    e、需要注意的是,checkpoint时,会把正在写的edits滚动一下,然后将fsimage和日志下载SN机器上,只有第一次才下载fsimage,这是的文件操作没有那么大的数据量,以后只负责下载日志文件,合并旧的fsimage。
    

    Checkpoint的附带作用
    NameNode工作时的元数据使用的是内存元数据,并不会查找fsimage和edits,这两个数据主要用来持久化,如果nameNode宕机,内存中没有元数据,hdfs重新启动的时候,数据就会冲fsimage和edits中加载。
    namenode和secondary namenode的工作目录存储结构完全相同,所以,当namenode故障退出需要重新恢复时,可以从secondary namenode的工作目录中将fsimage拷贝到namenode的工作目录,以恢复namenode的元数据。

    Checkpoint的触发条件:

    a、设置默认时间
    b、edits中记录数
    dfs.namenode.checkpoint.check.period=60  #检查触发条件是否满足的频率,60秒
    dfs.namenode.checkpoint.dir=file://${hadoop.tmp.dir}/dfs/namesecondary
    

    以上两个参数做checkpoint操作时,secondary namenode的本地工作目录

    dfs.namenode.checkpoint.edits.dir=${dfs.namenode.checkpoint.dir}
    dfs.namenode.checkpoint.max-retries=3  #最大重试次数
    dfs.namenode.checkpoint.period=3600  #两次checkpoint之间的时间间隔3600秒
    dfs.namenode.checkpoint.txns=1000000 #两次checkpoint之间最大的操作记录
    

    5、 元数据的目录结构
    部署集群后,需要在NameNode节点格式化磁盘

    hdfs namenode -format
    

    格式化后,将会在$dfs.namenode.name.dir/current目录下的文件结构

    current/
    |-- VERSION
    |-- edits_*
    |-- fsimage_0000000000008547077
    |-- fsimage_0000000000008547077.md5
    `-- seen_txid
    

    其中dfs.name.dir是在hdfs-site.xml文件中配置的,默认配置如下:

    <property>
      <name>dfs.name.dir</name>
      <value>file://${hadoop.tmp.dir}/dfs/name</value>
    </property>

    hadoop.tmp.dir是在core-site.xml中配置的,默认值如下

    <property>
      <name>hadoop.tmp.dir</name>
      <value>/tmp/hadoop-${user.name}</value>
      <description>A base for other temporary directories.</description>
    </property>

    dfs.namenode.name.dir属性可以配置多个目录,
    如/data1/dfs/name,/data2/dfs/name,/data3/dfs/name,….。各个目录存储的文件结构和内容都完全一样,相当于备份,这样做的好处是当其中一个目录损坏了,也不会影响到Hadoop的元数据,特别是当其中一个目录是NFS(网络文件系统Network File System,NFS)之上,即使你这台机器损坏了,元数据也得到保存。
    下面对$dfs.namenode.name.dir/current/目录下的文件进行解释。

    五、 DataNode工作原理

    1、 DataNode职责
    管理存储文件块数据
    定期向NameNode会标自身所持有的block信息(通过心跳信息上报)

    <property>
        <name>dfs.blockreport.intervalMsec</name>
        <value>3600000</value>
        <description>Determines block reporting interval in milliseconds.</description>
    </property>

    2、 DataNode掉线
    DataNode进程死亡或者网络故障噪声dataNode无法与NameNode通信,NameNode不会立即把该节点判定为死亡,要经过一段时间,这段时间可称为超时时长。HDFS默认的超时时长为10分钟30秒。超时时间为timeout,则超时时长计算公式为:
    timeout = 2*heartbeat.recheck.interval+10*dfs.heartbeat.interval
    默认heartbeat.recheck.interval大小为5分钟,dfs.heartbeat.interval默认为3秒
    hdfs-site.xml中heartbeat.recheck.interval的单位为毫秒,dfs.heartbeat.interval单位为秒。

    <property>
            <name>heartbeat.recheck.interval</name>
            <value>2000</value>
    </property>
    <property>
            <name>dfs.heartbeat.interval</name>
            <value>1</value>
    </property>
    展开全文
  • hdfs工作原理

    2013-03-19 22:08:57
    前段有人问我hdfs工作原理,我说的不是清楚可能是因为平时对知识没有梳理,所以今天痛下决心,抽时间将知识梳理下,同时也希望能帮助那些刚接触hadoop不理解其原理的童鞋能有更深入的认识.  下面我将从以下三个方面来...

          书上和网上有对hdfs讲解的有很多,但是很多讲解的都不是很全面.前段有人问我hdfs工作原理,我说的不是清楚可能是因为平时对知识没有梳理,所以今天痛下决心,抽时间将知识梳理下,同时也希望能帮助那些刚接触hadoop不理解其原理的童鞋能有更深入的认识.

           下面我将从以下三个方面来阐述下hdfs的工作原理:

           一,当用client向hdfs中写入数据的时候.

               当我们向hdfs 写数据的时候,客户端要做两件事.首先,将数据文件划分不同的数据块,划分的标准默认是64MB或128MB,这个是可以配置的.其次是向namenode请求一批(实际上就是默认的3个)datanode以存放数据块.当然namenode不是随便的选出三个datanode给client,它会选择三个最靠近client的三个datanode,那么这个距离是怎么计算的呢,是这样的,它会去计算两个节点与父节点带宽之和来计算两个节点的距离,在得到三个最近的datanode之后,namenode会先按与client的距离对datanode排下序,然后返回给客户端.

               下面client要做的就是向namenode返回的3个datanode中传输数据了.当它在写第一个数据块时,它会先向离它最近的那个datanode写数据.那么client如何知道它向第一个datanode写入数据是否成功了呢?是这样的,client在向datanode传数据的同时,会计算下数据快的校验和,这个校验和也会传给datanode,datanode 在存储完数据后,会对数据块取下校验和与client的校验和进行比对,如果一致的话说明数据保存成功,然后它会向client进行ack,告诉client数据已经成功保存了,同时它也会告诉namenode数据块保存成功了.剩下的数据块保存到下两个datanode的过程和第一个过程是相似的,只是数据的传输不是都是client去传递的,而是datanode之间进行传递的,每个datanode成功保存完数据后都会向client进行ack并通知namenode保存数据完毕.当client接受到所有的datanode的ack后,client会告诉namenode数据块全部写入完毕.当namenode接受到client的消息后,namenode要做的就是维护两张表,一张表是每个数据块对应的datanode地址,另一张表是存储数据副本的时候经过了那些管线.

          二,当从hdfs中读数据的时候.

                 当client要从hdfs中读取数据的时候,首先客户端要知道数据存储在哪吧,怎么才能知道啊,谁知道啊?当然是namenode啊,namenode存储了所有的数据块元数据信息.client会给namenode请求数据的文件地址,namenode会返回给client关于数据块的相关信息即数据块存放在哪些datanode上了,每个datanode存放了哪些数据块,当然这些datanode也是按照与client距离排过序的.当client拿到这些信息后,它会先到离它最近的那个datanode上下载数据.

             三,故障的规避.

                  因为是分布式文件系统,网路中什么事情都有可能发生,如datanode挂掉,datanode不能返回客户端想要的数据,datanode在保存数据的时候数据损毁,或者最严重的namenode挂掉.

                  下面看看这个四个问题,hadoop是如何规避的呢。

                  首先是datanode挂掉,当hdfs启动后每个datanode节点会定期上报自己的健康状况,每个datanode会每三秒向namenode发送心跳,证明自己还或者,假如namenode是秒钟没有收到datanode发送的心跳,namenode会认为这个datanode已经挂掉了.

                  下一个问题datanode不能返回客户端想要的数据,当客户端datanode请求数据或写入数据的时候,datanode无相应怎么办呢,当客户端长时间没有接收到datanode的ack后,client也为认为这个datanode已经挂掉了,于是会跳过这个datanode,请求下个datanode.    

                  第三个问题,datanode保存的数据发生损坏,这个该怎么办呢,datanode会定期上报自己所存的数据快健康状况,健康状况是通过校验和来判断的,当nomenode收到datanode发送的数据块健康状况的报告后它就知道那些数据块损毁,然后它就会去更新它维护的两张表,即数据块在哪些datanode上存着,每个datanode上存放了哪些数据块,如果namenode发现哪个数据块的副本没有达到标准,它会通知其它的datanode从已有数据块的datanode上copy相应的数据块.

                  第四个问题,namenode挂掉,这个问题是最严重的,目前的最好的解决办法就是加一个辅助namenode即secondNamenode,以备分数据块的元数据信息,尽可能的避免数据丢失.


                  太晚了,不写了,回去了.以后有时间再改吧,写篇日志这么费劲.




    展开全文
  • (转)通过漫画轻松掌握HDFS工作原理 原文

    (转)通过漫画轻松掌握HDFS工作原理





    原文

    展开全文
  • Hadoop HDFS工作原理

    2013-01-22 17:02:19
    Hadoop、MapReduce和HDFS工作原理 公司内部资料 供大家参考 呵呵
  • hdfs工作原理图解

    千次阅读 2017-10-18 17:50:59
    这里分析下客户端在上传和下载时它们的工作机制namenode和secondarynamenode的工作原理namenode的职责: 1、记录元数据 元数据就是datanode上每个文件的块信息 块信息包括 文件的路径 文件的副本数量 文件的...

    hdfs文件系统分namenode和datanode两部分
    这里分析下客户端在上传和下载时它们的工作机制

    namenode和secondarynamenode的工作原理

    namenode的职责:
    1、记录元数据
    元数据就是datanode上每个文件的块信息
    块信息包括

        文件的路径
        文件的副本数量
        文件的切块大小
        文件的块信息
        文件块的位置信息
    

    2、响应客户端请求

        处理客户端请求
    

    3、负载均衡

        平衡datanode节点上的文件块储存负载
    

    namenode工作原理
    说明:

    • namenode元数据以树状结构完整的储存在内存中,只在一开始序列化出一个镜像文件(镜像一)
    • namenode把之后的操作记录到日志里
    • secondarynamenode会定期从namenode下载原镜像和日志文件,其中原镜像只在第一次时下载,然后在自己机器上反序列化镜像到内存,并根据日志文件修改它,并序列化出新的镜像,上传给namenode(镜像二),来保证namenode上有及时的备份文件
    • 这样做的好处是将namenode把元数据信息存到磁盘的操作交给了secondarynamenode机器 ,自己只做记录日志的操作,从而提高性能

    这里写图片描述
    图中fsimage为两个镜像文件,edits为操作日志文件

    datanode工作机制

    职责:

    • 接收客户端发送过来的文件块block
    • 为客户端读取指定的文件块block
    • 定期向namenode汇报自身所持有的block,以保证集群的整体负载均衡

    hdfs文件上传图解
    这里写图片描述
    说明:

    • 1、根namenode通信请求上传文件,namenode检查目标文件是否已存在,父目录是否存在
    • 2、namenode返回是否可以上传
    • 3、client请求第一个 block该传输到哪些datanode服务器上
    • 4、namenode返回3个datanode服务器ABC
    • 5、client请求3台dn中的一台A上传数据(本质上是一个RPC调用,建立pipeline),A收到请求会继续调用B,然后B调用C,将整个pipeline建立完成,逐级返回客户端
    • 6、client开始往A上传第一个block(先从磁盘读取数据放到一个本地内存缓存),以packet为单位,A收到一个packet就会传给B,B传给C;A每传一个packet会放入一个应答队列等待应答
    • 7、当一个block传输完成之后,client再次请求namenode上传第二个block的服务器。

    hdfs文件下载图解
    这里写图片描述
    说明:

    • 1、跟namenode通信查询元数据,找到文件块所在的datanode服务器
    • 2、挑选一台datanode(就近原则,然后随机)服务器,请求建立socket流
    • 3、datanode开始发送数据(从磁盘里面读取数据放入流,以packet为单位来做校验)
    • 4、客户端以packet为单位接收,现在本地缓存,然后写入目标文件
    展开全文
  • 一图看懂hadoop分布式文件存储系统HDFS工作原理 转载于:https://www.cnblogs.com/AlexQY/p/9856477.html
  • Hadoop中HDFS工作原理

    2017-02-16 10:41:32
    由于目前主要用到HDFS,所以这里看一下它的工作原理,以及相应的介绍下配置。 什么是HDFS?Hadoop Distributed File System,字面意思,Hadoop分布式文件系统,通俗的讲,就是可以将不同节点的设备用来存储。它...
  • 深刻理解HDFS工作原理

    千次阅读 2017-01-11 16:45:27
    概述HDFS(Hadoop Distributed File System )Hadoop分布式文件系统的简称。HDFS被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统。DFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能...
  • Hadoop之HDFS工作原理

    2017-06-20 14:19:41
    HDFS特点 HDFS(Hadoop Distributed File System )Hadoop分布式文件系统。 HDFS有如下特点: 保存多个副本,且提供容错机制,副本丢失或宕机自动恢复。默认存3份。运行在廉价的机器上。适合大数据的处理。HDFS...
  • HDFS工作原理(1.0)

    千次阅读 2016-12-29 16:39:47
    NameNode 是整个文件系统的管理节点。它维护着整个文件系统的文件目录树,文件/目录的元信息和每个文件对应的数据块列表。...hdfs-site.xml的dfs.name.dir属性。 edits:操作日志文件。 fstime:保存最近一次checkpoi
  • 漫画HDFS工作原理

    2014-06-12 10:41:56
    转自:http://blog.csdn.net/netcoder/article/details/7442779
  • HADOOP中HDFS工作原理

    千次阅读 2017-03-14 21:19:58
    转载:http://www.weixuehao.com/archives/596 http://www.cnblogs.com/iloveyouforever/p/4303903.html http://www.cnblogs.com/iloveyouforever/p/4304355.html ...HDFS(Hadoop Distributed File System )H
  • 文章目录HDFS集群的读写流程HDFS集群三个角色把数据写到HDFS集群上从HDFS集群读数据的流程HDFS的容错机制错误类型和错误检测解决读写错误解决DateNode错误副本放置策略 HDFS集群的读写流程 HDFS集群三个角色 ​ ...
  • 漫画描述HDFS工作原理

    2015-03-23 14:49:00
    作者不详,内容浅显易懂,特拿来与大家分享。                  
  • 微博上看到的一张关于HDFS的图片,形象生动的解释的HDFS工作原理,再确切一点是 写操作的的基本过程: 1 一个集群中只有一个NameNode,可以有多个DataNodes 2 namenode 承担 数据的位置存储信息 ,并将...
  • 漫画讲解HDFS工作原理

    2013-03-17 10:42:49
    转自:http://blog.csdn.net/netcoder/article/details/7442779
  • 由于目前主要用到HDFS,所以这里看一下它的工作原理,以及相应的介绍下配置。 什么是HDFS?Hadoop Distributed File System,字面意思,Hadoop分布式文件系统,通俗的讲,就是可以将不同节点的设备用来存储。它...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 50,087
精华内容 20,034
关键字:

hdfs工作原理