HDFS上传数据的流程
1.当客户端输入一条指令:hdfs dfs -put text.txt /text时,这条命令会给到distributefilesystem。
2.通过distributefilesystem简称dfs会创建dfsclient。
3.dfsclient会与hdfs服务器建立rpc通讯,此时客户端就可以访问namenode,并向其发送请求,并且namenode接到请求命令
后会返回一个namenode代理对象(namenodeproxies)。
4.客户端通过代理对象namenodeproxies请求创建文件元信息。
5.namenode接受请求后就开始创建文件元信息,这些元信息包括:文件名:text.txt、存储路径:/text、文件大小:1kb、冗余度:3、数据块:
根据文件大小会切分成多个数据块,如果文件更大,会缓存文件元信息(缓存大小默认为1000m,可更改),数据块可以分别存到3个副本中:
datanode1、datanode2、datanode3。
6.namenode向客户端返回可以存数据的datanode,这里遵循机架感应原则。
7.客户端根据返回的信息先将文件分块(hadoop2.x版本每一个block为128m,而之前的版本为64m)。
8.客户端根据namenode返回的datanoded的地址信息直接发送给datanode,并通过创建输出流outputstream写入到hdfs中,同时datanode
会复制到其他两台机器,完成循环上传。
9.上传完成后,datanode向客户端通信表示已经传完数据块,同时向namenode报告,数据上传完成。
以上是我通过学习,自己总结的hdfs的上传流程,欢迎大家指正,我会根据大家的反馈认真改进完善!
下一篇: python爬取微信公众号文章