首先看看出场的角色,第一个是client客户端,用来发起读写请求,读取HDFS上的文件或往HDFS中写文件;第二个是Namenode,唯一的一个,会协调所有客户端发起的请求;第三个是DataNode,负责数据存储,跟Namenode不一样,DataNode有很多个,有时候能达到数以千计。
写数据流程
往HDFS中写数据的流程如下:
第1幅图:我们跟客户端说,你帮我写一个200M的数据吧,客户端说没问题啊,但是…
第2幅图:客户端不知道我们对数据有没有其他的要求啊,问我们是不是忘了什么东西呢?我们想起来我们还是有要求的,第一我们要把数据分成若干块,并且每块的大小是128M,第二,每个数据块应该复制3份。其实这就是我们说的HDFS的文件分块和多副本,如果你不说的话客户端怎么知道到底怎么分,复制多少份呢?
第3幅图:由上面的对话我们发现,如果对于每个文件客户端都要这么问一下,是不是太麻烦了?所以说一个好的客户端应该是,用户就算不说你也要知道有这两个属性:块的大小,一个文件应该按照怎样的大小切分(通常是64M或128M);复制因子,每