1.6 HDFS文件写入过程
Client 发起文件上传请求, 通过 RPC 与 NameNode 建立通讯, NameNode检查目标文件是否已存在, 父目录是否存在, 返回是否可以上传
Client 请求第一个 block 该传输到哪些 DataNode 服务器上
NameNode
根据配置文件中指定的备份数量及机架感知原理进行文件分配,返回可用的 DataNode
的地址如: A, B, C
3.1 Hadoop 在设计时考虑到数据的安全与高效, 数据文件默认在 HDFS,上存放三份, 存储策略为本地一份, 同机架内其它某一节点上一份,不同机架的某一节点上一份。
Client 请求 3 台 DataNode
中的一台 A 上传数据(本质上是一个 RPC调用,建立 pipeline ), A 收到请求会继续调用 B, 然后 B 调用 C,将整个 pipeline 建立完成, 后逐级返回 client
Client 开始往 A 上传第一个block(先从磁盘读取数据放到一个本地内存缓存), 以 packet为单位(默认64K), A 收到一个 packet 就会传给 B, B 传给 C. A每传一个 packet 会放入一个应答队列等待应答
数据被分割成一个个 packet 数据包在 pipeline 上依次传输, 在 pipeline反方向上, 逐个发送 ack(命令正确应答), 最终由 pipeline 中第一个DataNode
节点 A 将 pipelineack 发送给 Client
当一个 block 传输完成之后, Client 再次请求 NameNode
上传第二个 block到服务 1