赞
踩
1.客户端要写入数据首先要向NameNode发起上传请求,NameNode要检测目标文件是否存在,父目录是否存在,返回是否可以上传。
2.客户端请求第一个block应该往DateNode上传在哪里
3.NameNode根据配置文件中的备份数量进行分配,返回可用的DataNode的地址
4.请求3台DataNode中的一台上传数据,执行流水线复制
5.
6.数据被分割成一个个packet数据包在pipeline上依次传输,在pipeline反方向上,逐个发送ack(命令正确应答),最终由pipeline中第一个DataNode节点A将pipelineack发送给client;
7.关闭写入流
8.储存数据成功,数据传到哪里告诉NameNode
1.客户端先通过调用FileSystem对象的open来读取要打开的文件
2.Client向NameNode发起RPC请求,来确认请求文件block所在的位置
3.NameNode根据网络拓扑得出数据所在的位置
4.Client 选取排序靠前的 DataNode 来读取 block,如果客户端本身就是DataNode,那么将从本地直接获取数据(短路读取特性);
5.调用DataInputStream的read方法,读取数据
6.并行读取数据,如果失败重新读取数据
7.上传告知NameNode后续文件block所在的位置
8.NameNode返回block所在的位置
1.当DataNode读取block的时候,它会计算checksum
2.如果计算后的checksum,与block创建时(第一次上传是会计算checksum值)值不一样,说明block已经损坏。
3.client读取其他DataNode上的block.
4.datanode在其文件创建后周期验证checksum
数据在写入之后进行校验和的计算,DataNode周期性进行校验和计算,将计算结果与第一次的结果进行对比。
若相同表示无数据丢失,若不相同表示数据有丢失,丢失进行数据恢复。
数据读取之前对数据进行校验,与第一次的结果进行对比。若相同表示数据没有丢失,可以读取。若不相同表示数据
有所丢失。到其他副本读取。
## 一次写入,多次读取
HDFS适合一次写入,多次读取的应用场景,支持末尾追加,但是不支持中间追加修改。HDFS 适合用来做大数据分析的底层存储服务,并不适合用来做.网盘等应用,因为,修改不方便,延迟大,网络开销大,成本太高。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。