- 硬件故障的容错,在软件层面cover硬件故障。
- 流式数据读取,数据的访问是顺序的,对数据跳转访问支持不友好。
- 数据集巨大,以TB为单位。
- 数据一致性模型:写仅支持append和truncate,不支持update。
- hdfs使用时,倾向于在靠近hdfs的集群创建application,原因是hdfs数据量巨大,数据的传输成本高。
- NameNode采用master/slave机制,避免数据丢失。
- DataNode中,同一个文件会有多个副本(可配置)。面临的问题是:副本在同机房时如果机房发生意外,数据会丢失。副本不在同一机房时,写数据会高度依赖机房间的带宽。针对3个副本的优化是,2个副本在同一个机房的不同DataNode上,1个副本在不同机房的DataNode上。
- 数据读取优化,选择离application最近的机房读取副本数据。
- NameNode的safemode:Namenode启动时进入safemode,对每个DataNode通过BlockReport获取其存储的数据块的信息,对所有数据块的副本数进行比较,如果副本数小于指定的百分比,那么先进行数据库的复制,直到所有数据块的副本数都满足配置的百分比,退出safemode,开始提供服务。
- NameNode中MetaData的持久化。EditLog存储每一个客户端发送的修改,FsImage存储NameNode内存中的全量数据。重启或者达到触发条件时,NameNode会从磁盘中加载FsImage和EditLog,更新内存中的数据并生成新的FsImage和清空旧的EditLog。触发条件通常是时间间隔或累计修改记录数量。PS:对应redis的RDB+AOF。Q:触发数据合并时,如何处理新的写入请求?保留旧的FsImage和EditeLog,fork新进程来创建FsImage,对于新的写入请求,写入旧的EditLog的同时也写入新创建的EditLog,如果新的FsImage未创建完成就宕机,那么从旧的FsImage和EditLog中恢复数据。如果FsImage创建成功,删除旧的FsImage和EditLog。
- NameNode只接受客户端和DataNode的RPC请求,不主动推送任何请求。
- NameNode通过HeartBeat来确定DataNode是否有效,通常间隔是10min,当DataNode被判定无效时,DataNode将不会被分配读写并会、触发其上面DataBlock的复制,确保每个DataBlock的副本数达到最低限度。这也是为什么心跳间隔时间不能太短,太短容易触发大规模的副本复制。
- 集群的负载均衡?集群中的DataNode检测到磁盘容量低于阈值时,将其上面的DataBlock拷贝到别的DataNode中。
- DataBlock的数据一致性,client写数据同时会针对每个DataBlock计算checksum并存储到NameNode中,读数据时校验checksum,如果不同则说明数据异常。
- MetaData数据的一致性,同时写多个FsImage和EditLog?有用吗?
- DataBlock数据的写?一、client向NameNode发送写请求,NameNode回复可写的DataNodeList。二、client向第一个DataNode写数据并告知DataNodeList信息。三、第一个DataNode写数据并且告知下一个DataNode写数据和DataNodeList。
HDFS Architecture 翻译和理解
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- hdfs是什么? 问题: 1. hdfs是基于什么样的原理将文件分块存储到分布式环境中的各个设备上的? 2. h...
- 数据一致性 HDFS作为分布式文件系统在分布式环境下如何保证数据一致性。HDFS中,存储的文件将会被分成若干的大小...