1) hadoop 从 HDFS 文件读取过程
page: 83
客户端通过hadoop的api调用,使用RPC来调用namenode,以确定文件起始块的位置。对于每一个块,namenode返回存在该块复本的datamode地址。
namenode 告知客户端每个块中最佳的datanode,并让客户端直接联系该datanode且检索数据。namenode仅需要响应块位置的请求,而无需响应数据请求。
2) 文件写入
page:85
客户端通过api调用,对namenode进行RPC调用,在文件系统的命名空间中创建一个新文件,但文件中还没有相应的数据块;
客户端通过返回的outputstream写入数据,这个outputstream将数据分成一个个的数据包,写入内部队列,它根据datanode列表来要求namenode分配适合的新块存储数据,
outputstream将数据包传输到第一个datanode,第1个datanode存储数据并且将数据传输到第2个datanode;
outputstream维护一个内部数据包队列等待datanode的收到确认回执,称为“确认队列”,当收到所有datanode确认消息后,该数据包才会从确认队列删除;
在通过api创建一个文件之后 ,希望它在文件系统的命名空间中立即可见,但是,写入文件的内容并不保证能立即可见。