大数据笔记:HDFS文件读写流程详解
标签: 大数据
通过一个工作流的形式,展示HDFS读写流程
三个角色
client:客户端,发起读写请求,向HDFS中存或取数据。
NameNode:HDFS的核心,唯一的领导,把控全局所有的请求,干什么事都要想它汇报。
DataNode:可以有很多,负责数据的存储。
HDFS写数据
小张和client说:“我要写200MB的数据”
client说:“没问题!你的这些数据将会按照128M大小分隔成block,并且以3副本的形式存储!”
client开始将数据拆成128M的blocks,余数单独成一个block
client现在打算要上传第一个block,他对NameNode说:“你好,请帮我写一个128M的block,并有3个副本”
NameNode想了想:“3副本请求的话,我得找三个DataNode来帮我做。” 然后仔细思考了一会
NameNode对client说:“哥们!我给你安排了三个DataNode来做这件事,分别是DataNode1、DataNode2、DataNode3,并且我把他们已经按照离你的距离排好序了!”
client对DataNode1说:“现在我只向你发送数据”。
DataNode1接收存储数据的同时,将相同的数据发送给DataNode2,DataNode也在接收数据的同时将数据发送给DataNode3。当DataNode3写完时,说明第一个Block写完了。(流水线的方式)
一旦当前的Block写完了,DataNode们会向NameNode汇报:已经完成工作。NameNode就掌握了信息:Block已经成功地存储3份了。
Client会对剩下的block重复相同的操作。
所有Block都写完了,连接应该关闭了。NameNode将元信息整理并处理好。(元信息:哪些信息分别存储在哪些DataNode上了)
HDFS读数据
小张对client说:“我想要读数据。” client让小张稍等。
client对NameNode说:“我给你一个文件名,你把这个文件名的具体信息给我”
NameNode给了client具体信息,也就是元信息,其中包括:这些信息一共分为多少个block,每个block的每个副本都存储在哪个DataNode上(DataNode排好序)。
client现在知道了所要读的文件,一共需要下载多少block,也知道了每个block分别在哪个DataNode下载。
client按顺序地去每个DataNode下载对应的block。如果这个DataNode挂了,或者数据丢失和错误,那么client可以去其他的DataNode获取副本数据。
优缺点
优点
数据冗余多备份、硬件容错
处理流式的数据访问,即一次写入多次读取
适合存储大文件
构建在廉价机器上
缺点
低延迟的数据访问
不适合小文件的存储,因为只要小于128M,就是一个元数据,如果小文件很多,那么元数据很大,NameNode有压力