HDFS的写流程
1.HDFS客户端创建对象DistributedFileSystem,该对象中封装了与HDFS文件系统操作相关方法
2.调用DistributedFileSystem的create()方法,通过RPC请求NameNode创建文件
NameNode会执行检测,检测通过就会为本次请求记下一条记录,返回FSDataOutputStream输出流对象给客户端用于写数据
3.客户端通过FSDataOutputStream输出流开始写入数据
4.客户端写入数据时,将数据分成一个个数据包(packet 默认64k),内部组件DataStreamer请求NameNode挑出适合存储数据副本的一组DataNode地址。
5.传输的反方向上,会通过ACK机制校验数据包传输是否成功
6.客户端完成数据写入后,在FSDataOutputStream输出流输出流上调用close()方法关闭。
=================================================================
1.核心概念———Pipeline管道
这是HDFS在上传文件写数据过程中采用的一种数据传输方式。
客户端把数据穿个第一个Datanode,然后第一个datanode传给第二个。。。这就是管道
2.核心概念——ACK应答响应
ACK就是确定字符,在HDFS管道传输数据过程中,传输的反方向会进行ACK校验,确保数据传输安全。如果上一级没有收到ACK响应或者收到的不全就可以再传输一次。
3.核心概念——默认的3副本存储策略
3副本存储位置:
第一副本:优先客户端本地,否则随机
第二副本:不同于第一块副本的不同机架
第三副本:第二块副本相同机架不同机器