HDFS
HDFS:Hadoop分布式文件系统。
文件系统的块(Block):是磁盘块的整数倍,HDFS默认块的大小为64MB(降低寻址开销),即每次读写的数据量最小都必须是块。块也不宜过大,因为MapReduce的Map一次只处理一个块中的数据。(普通操作系统中,文件系统一般会把磁盘空间划分成每512字节为一组的“磁盘块”,是文件系统读写操作的最小单位)。
主节点/名称节点,从节点/数据节点:名称节点负责文件和目录的创建删除等,同时管理数据节点和数据块的映射关系。所以客户端只有访问名称节点才能得到文件块的映射,找对数据节点上块的位置,继而读取;在写入时也是由名称节点负责分配存储的位置,客户端才能写入到指定的位置。名称节点不参与数据的传输。
名称节点:①FsImage:用于维护文件系统树及树中的所有文件和文件夹的元数据。②EditLog:文件的增删改等操作都会被记录。当名称节点启动时会先加载FsImage到内存,然后执行EditLog中的所有操作,使内存中的元数据最新,而后得到一个新的FsImage和一个空的EditLog。(名称节点在刚启动时会处于“安全模式”,只提供读。)
数据节点:定时向名称节点发送自己所存储块的列表。
第二名称节点:作用:①辅助名称节点合并FsImage和EditLog。如果EditLog一直在记录,变得很大,在后来的重启中可能会处于较长的“安全模式”,所以第二名称节点会隔一段时间同步名称节点的F和E,假设时间为t1,之后会暂时出现一个新的E.new,然后第二名称节点合并F和E,合并过程和名称节点的一样,再然后把F同步到名称节点,恢复E.new为E。从而减小了E。②作为名称节点的“检查点”。当名称节点故障,第二名称节点上是有t1时间同步过来的F的,可用来恢复系统。不能作为“热备份”,因为t1时间之后故障的话会丢失部分E的操作,所以只能恢复到t1时刻。
无法高效存储小文件,小文件指大小超过一个块的文件。因为名称节点负责管理文件系统的元数据,元数据保存在内存中,因此大量的元数据信息很容易降低数据索引的效率,并且在MapReduce中处理大量小文件会产生过多的Map任务,线程开销增大。
通信协议:①客户端(主动TCP)名称节点。②名称节点(数据节点协议)数据节点。③客户端(RPC)数据节点。
数据复制:比如客户端把数据写入HDFS的操作,①对文件进行切块。②每一个块分别请求名称节点,名称节点会给出数据列表。③客户端把数据写入到数据列表中的第一个数据节点。④第一个数据节点会把写入的数据和数据列表传递给第二个数据节点。⑤第二个数据节点写入并传递。。。。