HDFS 解析

介绍

         HDFS是Hadoop的存储组件,HDFS分布式文件系统是在Google 2003年发表的论文文件系统GFS(中文)这篇论文后实现的。

HDFS的特点:

        HDFS利用超大数据块和数据局部性优化来减少网络输入/输出(I/O)

        可扩展性和可使用性

        HDFS按照配置的副本数(3个副本)复制文件,可容忍硬件和软件的错误,并能自动重新复制坏节点上的数据块

        Hadoop通过多个块存储文件,对每一个块而言,NameNode用于确定那个DataNode用于存储这个块数据。当确定块的DataNode后,NameNode开始尝试连接本地节点,如果客户端在DataNode上运行,节点按照以下顺序执行:

        1:本地磁盘:网络(I/O)代价昂贵,所以本地节点直接的网络阐述速度比跨机器的节点之间的网络传输速度要快

        2:本地机器:在一个机器中的节点之间的网络传输速度要比跨机器的节点之间的网络传输速度快

      HDFS通过管道完成副本写操作。当客户端收到来自NameNode的DataNode列表,客户端将块数据形成的数据流后传输给第一个DataNode(图上2),之后轮流将数据传输给下一个DataNode(图3)这样数据就达到了所有的DataNode(图4)最后一个DataNode执行完打包后,返回一个ack给前一个DataNode,直到达到客户端(5,6,7)。客户端收到所有的ack后,继续写下一个块。当每个DataNode完成本地快时,这些块将从临时存储转换为永久存储,并且每个DataNode异步通知存储这个块的NameNode。最后当所有块被写入之后,客户端关闭数据流,NameNode被告知它不许持久化与文件相关的快。(图8)


HFDS读取数据

HDFS读取文件的交互过程

          DFSClient包含于NameNode和DataNode通信相关的所有的客户端逻辑。当数据流传输到已经存在的HDFS文件被请求时,DFSClient创建一个DFSInputStream,DFSInputStream会从NameNOde获取文件前10个块的元数据(图1),对于每一个块,NameNode根据DataNode与客户端的远近来对DataNode进行排序;本地DataNode(在同一物理机器上)比远程DataNode有优势,

         当客户端接收到来之NameNode的块列表,它会从每个块挑选第一个DataNode,然后为那个DataNode开通一个数据流(图2),当库虎的请求数据流中的字节时,DFSInputStream紧接着会读取DataNode的数据流知道最后一个块(图3),之后关闭与当前DdataNode的连接,并在后面的DataNode重复同样的操作(图4, 5),如果文件比10个块大,他会请求NameNode获取接下来10个块信息(图 6),继续之前的操作,直到文件读取完毕

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值