标签:style blog http io os 使用 ar 文件 sp
客户端发起delete操作,名字节点执行标记删除,当数据节点向名字节点发送心跳的时候,名字节点以DataCommand的形式将删除命令带回给数据节点,执行删除数据的操作。
客户端发起open操作打开文件输入流FSDataInputStream(其包装了具体的输入流DFSInputSteam),然后使用read方法发起读数据操作。DFSInputStream对象通过和数据节点的流接口,发起getBlockLocations调用,返回数据块的位置。当一个快读取完毕后,它会关闭当前连接,继续使用getBlockLocations获取下一个数据块的数据节点信息。 由于getBlockLocations不会返回一个文件所有的数据块信息,因此getBlockLocations可能需要被多次调用。读取如果出现错误,客户端会将此错误报告给名字节点。同时尝试从下一个数据节点读取块。
客户端使用DistributeFIleSystem的create方法创建文件,其中创建了DFSOutputStream,远程调用完毕后DistributeFIleSystem将DFSOutputStream对象包装在FSDataOutputStream中返回给客户端。 当客户端写入数据时候,由于是个空文件,首先DFSOutputStream向名字节点申请数据块,返回LocateBLock对象,通过此对象,DFSOutputStream开始和数据节点通信,写入数据,写入完毕后close关闭流。如果写入过程中数据节点故障,数据流会被关闭,当前正常工作的数据节点上的数据块会被赋予一个新的版本号,旧的不完整的会因为版本号不匹配被删除。
名字节点和数据节点是主从关系,数据节点不会主动向名字节点发起ipc调用。数据节点向名字节点发送心跳包,如果名字节点有需要数据节点配合的地方,会返回给数据节点DataCommand数组。例如需要删除数据节点的数据时候,名字节点会返回给数据节点DNA_INVALIDATE命令,数据节点删除数据块,释放存储空间。
标签:style blog http io os 使用 ar 文件 sp
原文地址:http://blog.csdn.net/lpstudy/article/details/40109583