hdfs分布式文件系统
要处理大数据,首先得解决海量数据的存储,在hadoop中解决海量存储的组件就是hdfs(hadoop filesystem)。是google GFS开源实现。其核心思想分而治之,将一个大文件(GB,TB)分解成多个文件块,由datanode存储文件块存储。hdfs采用master-slave架构,核心组件包括namenode,datanode。
namenode负责存储整个文件系统的命名空间,包括文件夹,文件,权限,文件对应的副本信息,文件块信息,文件块位置信息。其中文件块位置信息保持在内存中。由datanode通过heartbeat主动上报位置信息。
datanode负责实际的文件块存储,一个hdfs上的文件可能分为多个块,分别存储到不同的datanode上,每个datanode存储文件的一部分。一个文件块默认在3个datanode上存储。
hdfs架构大致读写流程如下:
1、在发起一个文件操作前首先冲namenode获取元数据信息,比如要读写的文件的名字,路径
2、namenode返回要操作的文件元数据信息,比如,file1文件的第一个块请从datanode2上获取或写入
3、client向datanode写入或存储文件内容
可以看出整个系统中,namenode占有举足轻重的作用,所有涉及命令空间的操作都要经过namenode,
datanode还会主动上报自身的位置信息和自身存储的块的位置信息到namenode.所以namenode是一个中心,非常重要
那么namenode由于本身不存储文件块位置信息的,那么文件块位置信息从何而来呢?
1、由namenode在心跳包中主动上报
2、每次写入块数据都是经过namenode分配的,包括副本信息。
网友评论