Hadoop 框架理解

Hadoop 框架理解_第1张图片

鲁棒性

数据磁盘故障、心跳和重新复制

每一个DataNodeNameNode定期发送心跳消息。网络分区可以导致datanode的子集与NameNode失去连接。NameNode通过心跳检测这种情况的消息。datanode最近没有心跳,NameNode认为该datanode死亡,并且不向它推送任何的新的IO请求。死亡的DataNode任何数据对于HDFS不可用DataNode死亡可能会导致一些块的复制因子低于指定值NameNode不断跟踪哪些模块需要复制,并且在必要时启动复制。重新复制可能由于许多原因造成:比如一个DataNode不可用,副本损坏,复制品DataNode硬盘故障,或文件的复制因子增加

数据完整性

有可能是从一个DataNode获取数据损坏已经损坏。这些损坏可能由于为存储设备故障,网络故障或缺陷的软件。HDFS客户端软件HDFS文件内容进行校验和当一个客户端创建一个HDFS文件时,它计算文件块的校验和同时在HDFS名称空间吧校验和存储在在一个单独的隐藏文件。当客户端检索文件内容时,确认收到每个DataNode匹配的数据的校验和和关联的校验和文件里面的校验和一样,如果校验和不一样,那么客户端就可以选择从其他有该数据快的datanode上获取数据。

元数据损坏

FsImage和EditLogHDFS的核心数据结构。这些文件的损坏可以导致整个HDFS宕机。出于这个原因,NameNode可以配置为支持维护FsImage和EditLog的多个副本。任何EditLog或者FsImage更新触发每个FsImages和EditLog同步更新。多个副本FsImage EditLog同步更新可能降低命名空间处理事务数速度然而,这个代价是可以接受的,因为HDFS数据密集型应用程序不是元数据密集型。NameNode重启时,它选择最新EditLogFsImage使用

NameNode属于HDFS集群的单点故障。如果NameNode出现故障,人工干预是必要的。目前,并不支持NameNode软件的自动重启和故障转移到另一个机器。

数据组织

数据块

HDFS被设计为支持非常大的文件。那些处理大型数据集应用程序HDFS相互兼容。这些应用程序编写自己的数据只有一次,但他们读一或多次并且要求需要读取得速度非常快HDFS支持对文件写一次读多次HDFS所使用的一个典型的块大小是64 MB的。因此,一个HDFS文件切成64 MB的块,如果可能,每个块将驻留在不同DataNode。

客户端请求创建一个文件立即达到NameNode。事实上,最初HDFS客户端缓存文件数据到本地的一个临时文件。应用程序写文件被透明地重定向到这个临时文件。当本地临时文件的长度超过一个HDFS块大小,客户请求NameNode。NameNode将文件名插入到文件系统层次结构和同时分配数据块给客户端。然后客户端数据写到给定的DataNode的数据块中。当一个文件被关闭,其余没有写完的本地临时文件中的数据转移到DataNode。然后客户端告诉NameNode,文件关闭。NameNode提交文件创建操作持久化存储。如果关闭文件NameNode死亡,文件丢失。

 采用经过仔细考虑的运行HDFS上的目标应用程序的特点决定采取上述措施。这些应用程序需要流写入文件。如果客户直接写入远程文件没有任何客户端缓冲,网络速度和网络中的拥塞会造成很大影响。这种方法不是没有先例。早期的分布式文件系统,例如AFS,使用客户端缓存来提高性能。

管道复制

当客户端写入数据到一个HDFS文件,其数据是首次写入本地文件。假设HDFS文件的replication因子3当本地文件积累一完整的数据块时,客户端从NameNode检索datanode的列表。这个列表包含即将被写入数据的datanode块。首先客户端数据到第一个DataNode。第一个DataNode一边把数据写进本地存储中,一边把数据传给第二个DataNode。反过来第二个DataNode开始接收数据,且把数据传给第三个DataNode。最后,第三个DataNode写数据本地存储库。因此,一个DataNode可以从上一个管道接收数据,同时将数据转发给下一个管道。因此,数据在管道里从一个DataNode到下一个。

删除文件

当一个文件被用户或应用程序删除,它不是立即从HDFS移除。相反,HDFS把它丢到/trash目录中。该文件可以快速恢复,只要它仍然/trash。可配置文件/trash的存留时间。期满后,NameNode从HDFS文件名称空间中将其删除。删除文件导致与文件关联的数据块被释放。注意,一个文件被用户删除和HDFS上空余空间增加之间会有一个明显的时间延迟时间

用户可以恢复删除文件,只要它仍然在/trash目录中。如果用户想恢复一个已经删除的文件,进入/trash目录检索文件即可/trash目录只包含被删除文件最新的副本。/trash目录其他任何目录相同。但是HDFS指定策略从这个目录中自动删除文件。当前默认垃圾时间间隔设置为0(删除垃圾文件之后不储存/trash)。这个值是可配置的参数core-site.xml fs.trash.interval


你可能感兴趣的:(hadoop)