HDFS中的block、packet、chunk
- Block
这个大家应该知道,文件上传前需要分块,这个块就是block,一般为128MB。 - packet
packet是第二大的单位,它是client端向DataNode,或DataNode的PipLine之间传数据的基本单位,默认64KB。 - chunk
chunk是最小的单位,它是client向DataNode,或DataNode的PipLine之间进行数据校验的基本单位,默认512Byte,因为用作校验,故每个chunk需要带有4Byte的校验位。所以实际每个chunk写入packet的大小为516Byte。
HDFS读数据流程
注意:
- datanode根据它们与客户端的距离(集群的网络拓扑)来进行排序。
- FSdataInputStream根据datanode的距离顺序读取数据块,每读完一个块,即关闭与该datanode的链接。
- FSdataInputStream与datanode的数据以packet为基本单位。
HDFS写流程
注意:
- 文件在客户端完成逻辑分片
- DistributedFileSystem向namenode请求上传文件时,namenode会检查是否已存在文件及文件读写权限。若通过检查,直接先将操作写入EditLog。
- 数据packet在datanode中会先写入ByteBuffer中,在由ByteBuffer写入block中
- 当第一个datanode完成数据写入后即返回应答,不必等所有的datanode都完成数据写入。