some features of hadoop-0.20.2

some hdfs features of hadoop-0.20.2

高度容错性
    a.块复制时不需要全部复制成功才算成功,它有个阀值控制,只要达到就算成功。之后NN会
检查是否有不满足replication num要求的blocks并进行处理。(相信这只是其中之一)
    b.使用skipping模式,更灵活控制。
   
高可靠性
    a.采用redundancy机制,而且分布在不同的racks上。
    b.很多情况下,出现异常时并非立即退出,而是采用retry机制(因为通常异常来源于rpc通信),同样有次数控制。

自动修正能力
    a.使用推测式执行,出现缓慢的tasks时就另起一个并行执行(其中之一)
    ...
   
高吞吐量
    a.并行处理数据读取问题,并且有‘就近’原则处理任务,即移动计算。
    b.NN,JT只处理基本,核心的分配任务,高度问题,基本的读写交互直接由client与DNs直接处理,减轻masters压力。

 

以下部分是hdfs_desing.html的部分描述,并作了些说明:
snapshot 快照
快照支持某一特定时刻的数据的复制备份。利用快照,可以让HDFS在数据损坏时恢复到过去一个已知正确的时间点。(形如os里面的恢复功能)
==HDFS目前还不支持快照功能,但计划在将来的版本进行支持。

cluster balance集群均衡
HDFS的架构支持数据均衡策略。如果某个Datanode节点上的空闲空间低于特定的临界点,按照均衡策略系统就会自动地将数据从这个Datanode 移动到其他空闲的Datanode。当对某个文件的请求突然增加,那么也可能启动一个计划创建该文件新的副本,并且同时重新平衡集群中的其他数据。
==这些均衡策略目前还没有实现。

 文件的删除和恢复
当用户或应用程序删除某个文件时,这个文件并没有立刻从HDFS中删除。实际上,HDFS会将这个文件重命名转移到/trash目录。只要文件还在/trash目录中,该文件就可以被迅速地恢复。文件在/trash中保存的时间是可配置的,当超过这个时间时,Namenode就会将该文件从名字空间中删除。删除文件会使得该文件相关的数据块被释放。注意,从用户删除文件到HDFS空闲空间的增加之间会有一定时间的延迟。
只要被删除的文件还在/trash目录中,用户就可以恢复这个文件。如果用户想恢复被删除的文件,他/她可以浏览/trash目录找回该文件。/trash目录仅仅保存被删除文件的最后副本。/trash目录与其他的目录没有什么区别,除了一点:在该目录上HDFS会应用一个特殊策略来自动删除文件。目前的默认策略是删除/trash中保留时间超过6小时的文件。将来,这个策略可以通过一个被良好定义的接口配置。
TOCONF 通过命令行删除的文件可以在此恢复吗?

Staging(分段运输)
客户端创建文件的请求其实并没有立即发送给Namenode,事实上,在刚开始阶段HDFS客户端会先将文件数据缓存到本地的一个临时文件。应用程序的写操作被透明地重定向到这个临时文件。当这个临时文件累积的数据量超过一个数据块的大小,客户端才会联系Namenode。Namenode将文件名插入文件系统的层次结构中,并且分配一个数据块给它。然后返回Datanode的标识符和目标数据块给客户端。接着客户端将这块数据从本地临时文件上传到指定的 Datanode上。当文件关闭时,在临时文件中剩余的没有上传的数据也会传输到指定的Datanode上。然后客户端告诉Namenode文件已经关闭。此时Namenode才将文件创建操作提交到日志里进行存储。如果Namenode在文件关闭前宕机了,则该文件将丢失。
上述方法是对在HDFS上运行的目标应用进行认真考虑后得到的结果。这些应用需要进行文件的流式写入。如果不采用客户端缓存,由于网络速度和网络堵塞会对吞估量造成比较大的影响。这种方法并不是没有先例的,早期的文件系统,比如AFS,就用客户端缓存来提高性能。为了达到更高的数据上传效率,已经放松了POSIX标准的要求。
TOCONF 没注意到此功能,因为之前看的是copyFromLocal,不属于‘写’操作
ref:当客户端向HDFS文件写入数据的时候,一开始是写到本地临时文件中。假设该文件的副本系数设置为3,当本地临时文件累积到一个数据块的大小时,客户端会从Namenode获取一个Datanode列表用于存放副本。

 

流式的数据访问

运行在HDFS之上的应用程序必须流式地访问它们的数据集,它不是典型的运行在常规的文件系统之上的常规程序。HDFS是设计成适合批量处理的,而 不是用户交互式的。重点是在数据吞吐量,而不是数据访问的反应时间,POSIX强制的很多硬性需求对很多应用不是必须的,去掉POSIX的很多关键地方的 语义以获得更好的数据吞吐率。

运行在HDFS之上的程序有很大量的数据集。这意味着典型的HDFS文件是GB到TB的大小,所以,HDFS是很好地支持大文件。它应该提供很高的聚合数据带宽,应该一个集群中支持数百个节点,还应该支持一个集群中千万的文件。

 

你可能感兴趣的:(数据结构,hadoop,网络应用,OS)