`

HDFS学习(二)

阅读更多

HDFS 数据流:

1.文件读取:

客户端通过调用FileSystem 对象的open()方法来打开希望读取的文件,对于hdfs来说,这个对象是分布式文件系统的一个实例。

DistributedFileSystem 通过rpc来调用namenode,以确定文件起始块的位置,对于每一个块,namenode返回存有该块副本的

datanode地址。datanode根据他们与客户端的距离来排序。

DistributedFileSystem 类返回一个FSDataInputStream 对象给客户端并读取数据,FSDataInputStream 类转而封装

DFSInputStream 类,DFSInputStream 管理datanode 与namenode的I/O

客户端对这个输入流调用read(),存着datanode文件起始块的DFSInputStream 随即连接距离最近的datanode,反复对数据流

read()方法,可将数据从datanode 传输到客户端,到达块的末端时,DFSInputStream 会关闭与该datanode的连接。

2.文件的写入:

DistributedFileSystem 对象的 create()来创建文件,DistributedFileSystem 对namenode RPC 调用,在文件系统命名空间中

创建一个文件,namenode则执行各种检查。通过则创建文件,DistributedFileSystem 给客户端返回一个FSDataOutputStream 对象。

FSDataOutputStream 封装了DFSoutputStream 来实现datanode之间及datanode与namenode的数据交互。

客户端写入数据时,DFSoutputStream 将数据拆分成一个个的数据包,数据包有指定的大小,写入内部队列,成为数据对列,

DataStream处理数据队列,它的责任是根据datanode列表来要求namenode分配适合的新快来存储数据备份,这一组datanode组成 一个管线,同时DFSoutputStream 也维护这一个内部队列,知道datanode返回确认存储的信息才删除内部队列

3.复本的布局

一个机架内的随机节点A
与A不同的机架的随机节点B
与B同一机架的另一不同节点

4.文件一致性

HDFS 提供一个方法来强制所有的缓存与数据节点同步,对FSDataOutputStream 调用sync()方法,sync()返回成功后则所有reader

可见

5.dictcp 并行复制

应用在两个集群见传输数据(版本一样,保持rpc版本一致)
bin/hadoop distcp hdfs://namenode1/sourcefile hdfs://namenode2/distfile

可选择override 及 update 属性

6.hadoop存档

bin/hadoop archiveName files.har /my/files my
将 /my/files 所有文件存档为 file.har 存储到 my 文件夹下

bin/hadoop fs -lsr har://my/files.har
……………………

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics