hdfs设计原则1.非常大的文件这里的非常大是指几百MB,GB,TB.雅虎的hadoop集群已经可以存储PB级别的数据2.流式数据访问基于一次写 这里的非常大是指几百MB,GB,TB.雅虎的hadoop集群已经可以存储
hdfs设计原则1.非常大的文件这里的非常大是指几百MB,GB,TB.雅虎的hadoop集群已经可以存储PB级别的数据2.流式数据访问基于一次写
这里的非常大是指几百MB,GB,TB.雅虎的hadoop集群已经可以存储PB级别的数据
2.流式数据访问
基于一次写多次读。
3.商用硬件
hdfs的高可用是用软件来解决因此不需要昂贵的硬件来保障高可用性各个生产商售卖的pc或者虚拟机即可。
hdfs不适用的场景 1.低延迟的数据访问 hdfs的强项在于大量的数据传输递延迟不适合他10毫秒以下的访问可以无视hdfs不过hbase可以弥补这个缺陷。 2.太多小文件 namenode节点在内存中hold住了整个文件系统的元数据因此文件的数量就会受到限制每个文件的元数据大约150字节 1百万个文件每个文件只占一个block那么就需要300MB内存。你的服务器可以hold住多少呢你可以自己算算 3.多处写和随机修改 目前还不支持多处写入以及通过偏移量随机修改 hdfs block 为了最小化查找时间比例hdfs的块要比磁盘的块大很多。hdfs块的大小默认为64MB和文件系统的块不同 hdfs的文件可以小于块大小并且不会占满整个块大小。 查找时间在10ms左右数据传输几率在100MB/s,为了使查找时间是传输时间的1%块的大小必须在100MB左右 一般都会设置为128MB 有了块的抽象之后hdfs有了三个优点 1.可以存储比单个磁盘更大的文件 2.存储块比存储文件更加简单每个块的大小都基本相同 3.使用块比文件更适合做容错性和高可用 namenodes和datanodes hdfs集群有两种类型的节点一种为master及namenode另一种为worker及datanodes。 namenode节点管理文件系统的命名空间。它包含一个文件系统的树所有文件和目录的原数据都在这个树上这些 信息被存储在本地磁盘的两个文件中image文件和edit log文件。文件相关的块存在哪个块中块在哪个地方这些 信息都是在系统启动的时候加载到namenode的内存中并不会存储在磁盘中。 datanode节点在文件系统中充当的角色就是苦力按照namenode和client的指令进行存储或者检索block并且周期性 的向namenode节点报告它存了哪些文件的block namenode节点如果不能使用了那么整个hdfs就玩完了。为了防止这种情况有两种方式可供选择 1.namenode通过配置元数据可以写到多个磁盘中最好是独立的磁盘或者NFS. 2.使用第二namenode节点第二namenode节点平时并不作为namenode节点工作它的主要工作内容就是定期根据编辑 日志edit log合并命名空间的镜像(namespace image),防止编辑日志过大合并后的image它自己也保留一份等着 namenode节点挂掉然后它可以转正由于不是实时的有数据上的损失是很可能发生的。 hdfs Federation namenode节点保持所有的文件和块的引用在内存中这就意味着在一个拥有很多很多文件的很大的集群中内存就成为了一个 限制的条件hdfs federation在hadoop 2.x的被实现了允许hdfs有多个namenode节点每个管hdfs的一部分比如一个管/usr 另一个管/home每个namenode节点是相互隔离的一个挂掉不会影响另外一个。 hdfs的高可用 不管namenode节点的备份还是第二namenode节点都只能保证数据的恢复并不能保证hdfs的高可用性一旦namenode节点挂掉 就会产生单点故障这时候要手动去数据备份恢复或者启用第二节点新的namenode节点在对外服务器要做三件事 1.把命名空间的镜像加载到内存中 2.重新运行编辑日志 3.接受各个datanode节点的block报告 在一个大型一点的hdfs系统中等这些做完需要30分钟左右。 2.x已经支持了高可用性(HA)通过一对namenode热备来实现一台挂掉备机马上提供无中断服务 要实现HA,要做三点微调 1.namenode节点必须使用高可用的共享存储。 2.datanode节点必须象两个namenode节点发送block报告 3.客户端做改动可以在故障时切换到可用的namenode节点上而且要对用户是无感知的 failover和fencing 将备份namenode激活的过程就叫failover管理激活备份namenode的系统叫做failover controller zookeeper就可以担当这样的角色可以保证只有一个节点处于激活状态。 必须确认原来的namenode已经真的挂掉了很多时候只是网络延迟如果备份节点已经激活了 原来的节点又可以提供服务了这样是不行的防止原来namenode活过来的过程就叫fencing。 可以用STONITH实现 STONITH可以做到直接断电把原namenode节点fencing掉 感谢Tom White,此文章大部分来自于大神的definitive guide奈何中文版翻译太烂就在英文原版的基础上和官方的一些文档加入一些自己的理解。 全当是读书笔记吧画蛇添足之举。 转自http://blog.csdn.net/lastsweetop/article/details/8992505【本文转自:香港大带宽服务器 http://www.558idc.com/st.html 欢迎留下您的宝贵建议】