hdfs基础知识


1 www.transwarp.io HDFS基础知识 2 www.transwarp.io Transwarp Confidential HDFS简介 • 起源: – 源于Google发布的GFS论文 – HDFS是Hadoop Distribute File System 的简称,是Hadoop的一个分布式文件系统。 • 设计目标: – 大文件存储:支持TB-PB级的数据量 – 高容错:运行在商用硬件上,而商业硬件并不可靠 – 高吞吐量:为大量数据访问的应用提供高吞吐量支持 • 适合场景 – 大文件存储 – 流式数据访问 • 不适合的场景 – 存储大量小文件 – 随机读取、低延迟读取 3 www.transwarp.io Transwarp Confidential HDFS设计目标 • 硬件错误是常态 – 副本冗余机制 • 流式数据访问 – 批量读而非随机读 – 关注吞吐量而非相应时间 • 大规模数据集 – 典型文件大小GB-TB级别 – 关注横向线性扩展 • 简单一致性模型 – 一次写,多次读 – 支持追加、不允许修改 4 www.transwarp.io Transwarp Confidential HDFS的基本概念 • 数据块(block): – 大文件会被分割成多个block进行存储,block大小默认为128MB。 • 注意:小于一个块大小的文件不会占据整个块的空间 – 每一个block会在多个datanode上存储多份副本,默认是3份。 • NameNode: – 记录文件系统的元数据: – 维护文件系统树及整棵树内所有的文件和目录 • DataNode: – 存储和管理数据块 – 将信息上报给NameNode 5 www.transwarp.io Transwarp Confidential HDFS的架构 • 采用Master/Slave主从架构 – NameNode • 记录文件系统的元数据 • 服务器位置信息和副本数 – DataNode • 存储和管理数据块 • 将信息上报给NameNode – Client • HDFS对外接口 • 从NameNode获取文件信息 • 连接DataNode读写数据 NameNode 客户端 DataNode DataNode DataNode DataNode 机架1 读 DataNode DataNode 机架2 客户端 块信息 数据请求 备份 写 Metadata(Name,replicas,...) 6 www.transwarp.io Transwarp Confidential NameNode的作用 • 管理文件系统的命名空间 – 文件系统元数据信息:所有目录和文件 • 记录命名空间的改动和本身属性的改动 – 命名空间镜像文件 :fsimage – 编辑日志文件: editLog • 保存数据块的节点信息 – 不持久化保存,重启系统时DataNode重建 • 协调客户端(client)对文件的访问 • 思考:HDFS如果存储大量的小文件对NameNode的影响? – 例如:1,000,000个1MB的小文件 7 www.transwarp.io Transwarp Confidential fsimage和EditLog • fsimage – 最新的元数据检查点 • EditLog – 命名空间的变化 • fsimage、EditLog合并 – Secondary Namenode周期性合并,生 成新的fsimage,EditLog记录新的变化 • 容错 – 思考:主namenode挂掉,辅助 namenode能恢复吗? 8 www.transwarp.io Transwarp Confidential DataNode的作用 • 存储并检索数据块 – 供客户端或NameNode调度 • 定期向NameNode发送存储块的列表 – NameNode中保存文件和块之间的所属关系 – DataNode中保存数据块和本地文件的对应关系 – 思考:如果NameNode毁坏,DataNode能够恢复文件吗? 9 www.transwarp.io Transwarp Confidential HDFS架构优势 • 降低namenode工作负载 – namenode不处理数据 • 并行读写任务 – namenode将任务分配给 datanode,可以并行处理 读写任务 – 充分利用带宽 NameNode 客户端 DataNode DataNode DataNode DataNode 机架1 读 DataNode DataNode 机架2 客户端 块信息 数据请求 备份 写 Metadata(Name,replicas,...) 10 www.transwarp.io Transwarp Confidential 数据块block • HDFS中数据读写的最小单位 – 磁盘块:512字节 – 文件系统块:几千字节 – HDFS块:128MB(默认值) – 不足128MB的块在实际磁盘中不会占用128MB的空间 • 块大小的选择 – 目标:最小化寻址开销,降到1%以下 – 块太小:寻址时间占比过高 – 块太大:map数太少,作业变慢 • 采用块存储的优势 – 文件的数据块可分布于不同磁盘 – 元数据和块分开存储,元数据统一管理 – 通过数据备份,提供数据容错能力和可用性 – 多个副本,提高读取性能,结合hadoop计算框架,计算跟着数据走 11 www.transwarp.io Transwarp Confidential 数据块和副本 • 副本考量 – 数量 – 布局 – 可靠性、写入带宽、读取带宽折中 • 默认副本数3 • 默认布局 – 第1个放在客户端所在节点 – 第2个同机架的不同节点 – 第3个放在不同机架的另外一个节点 – 很好的稳定性、负载均衡,较好的写入带宽、 读取性能,块均匀分布 Node 机架1 数据中心 Node 机架2 12 www.transwarp.io Transwarp Confidential HDFS网络拓扑 • 带宽稀缺,距离标准 • 简单衡量 – 网络看做树,节点间距离是到共同祖 先的距离总和 • 数据中心d1机架r1中的节点n1 – 表示为/d1/r1/n1 • 几个例子 –/d1/r1/n1与/d1/r1/n2的距离2 –/d1/r1/n1与/d1/r2/n3的距离4 –/d1/r1/n1与/d2/r3/n4的距离6 13 www.transwarp.io Transwarp Confidential HDFS权限控制 • 类似POSIX系统 – 目录d、读权限r、写权限w、可执行权限x – 所属用户owner、所属组别group及其他other 14 www.transwarp.io Transwarp Confidential HDFS可靠性 • 冗余副本策略 • 机架策略 • 心跳机制 • 安全模式 • 校验和 • 元数据保护 15 www.transwarp.io Transwarp Confidential 心跳机制 • 心跳机制 – DataNode周期性向NameNode发送心跳信号和块报告 – NameNode根据报告验证元数据 – 超时的DataNode标记为宕机,不再发送IO任务 • 复制副本 – DataNode失效造成某些块副本数下降(复制对用户透明) – 其他原因:副本本身损坏、磁盘错误、复制因子增大 16 www.transwarp.io Transwarp Confidential 安全模式 • namenode启动时首先进入安全模式 – 只读状态,无法修改 – 直到datanode上报的block数达到阈值 – 上报的block个数/要求的个数,默认0.999 • 离开安全模式 – 自然离开:上报block数达到阈值 17 www.transwarp.io Transwarp Confidential 安全模式恢复 • 引起安全模式的原因 – block上报不足 • datanode没启动,磁盘坏了,服务器坏了 – namenode磁盘满 • 检查log,会有相关exception – 用户强制关机等操作不当(特别注意!) • block损坏,checksum不一致 • 故障查询 – 找到datanode不能正常启动的原因,重新启动 – 清理namenode磁盘 – 谨慎操作,有问题找星环,注意数据丢失 18 www.transwarp.io Transwarp Confidential 校验和 • 文件创建时,每512字节产生1个校验和 • 使用CRC-32校验和,32位整数,4字节 • 校验和保存在同名.meta文件中 • 客户端获取数据,检查校验和,是否损坏 – 校验和损坏? – 能否校正? • 校验理由 – 常时间离线数据,容易损坏 19 www.transwarp.io Transwarp Confidential HDFS2 • HDFS HA – 解决namenode单点故障 • HDFS Federation – 解决namenode内存瓶颈,允许HDFS中多个namenode • HDFS快照 – 保存HDFS某一时间的只读镜像 20 www.transwarp.io Transwarp Confidential HDFS HA • 单点问题 – 一个集群中只有一个NameNode,宕机或者升级维护需要停止整个集群 – 解决可用性问题:7*24服务 • 解决办法 – 1.x版本中,secondary NameNode • 恢复时间慢,部分数据丢失 – 2.x版本中,HA QJM • 热切换 NameNode 客户端 DataNode DataNode DataNode DataNode 机架1 读 DataNode DataNode 机架2 客户端 块信息 数据请求 备份 写 21 www.transwarp.io Transwarp Confidential HDFS2.0 HA的架构 ZooKeeper ZooKeeper ZooKeeper FailoverController Active FailoverController Standby NameNode Active NameNode Standby Cmds Monitor Health Of NN.OS,HW Monitor Health Of NN.OS,HW Shared Storage Shared NN state with single writer (fenced) DataNode DataNode DataNode Block Reports to Active & Standby DN fencing: Update cmds from one ................. DataNode同时向两个 NameNode发送数据块列 表,做到热切换 两个NameNode,分别牌 active和standby某一时刻 只有一个active,可以切换, active修改记录写在共享存储 中的EditLog,standby监听 active修改记录写在 共享存储中的 EditLog,standby监 听 ZooKeeper FailoverController监 控NameNode的运行情况,当 active挂掉,快速切换,切断原 active的连接,防止脑裂fencing 22 www.transwarp.io Transwarp Confidential HA方案(NFS) • 失效隔离措施fencing – 切断原active的连接防止脑裂 – 共享存储:只有一个namenode能写 – 客户端:只有一个namenode响应请求 – Datanode:只有一个namenode能下命令 • NFS限制 – HA能力受限于共享目录 – NFS本身的单点失效,冗余硬盘、网络、电源 23 www.transwarp.io Transwarp Confidential QJM • 利用2N+1台JournalNode存储EditLog • 最多容忍N台服务器挂掉 • 基于Paxos算法 – Paxos算法是一种基于消息传递的一致性 算法。这个算法被认为是类似算法中最 有效的。 – Paxos 算法解决的问题是一个分布式系 统如何就某个值(决议)达成一致。 – 一个典型的场景是,在一个分布式数据 库系统中,如果各节点的初始状态一致, 每个节点都执行相同的操作序列,那么 他们最后能得到一个一致的状态。为保 证每个节点执行相同的命令序列,需要 在每一条指令上执行一个“一致性算法” 以保证每个节点看到的指令一致。 24 www.transwarp.io Transwarp Confidential QJM设计方案 • 通过读写多个存储节点,达到高可用性,并引入数据一致性算法,防止异常造成的数 据不一致。 25 www.transwarp.io Transwarp Confidential QJM写操作 • RPC同时向2N+1个JN服务器写日志,只要有N+1个节点返回成功,写操作就算成功。 • 主节点会标记返回失败的JN节点,下次写日志将不再写该节点,直到下次调用滚动日 志操作,如果此时该JN节点恢复正常,之后主节点会向其写日志。保证txid连续,如 果不连续说明出错了,会向主节点报错,恢复日志 26 www.transwarp.io Transwarp Confidential QJM读操作 • 1. 从每个JN节点拿出所有日志,按txid从小到大排序 • 2. 消化日志,从小到大消化。集合中一个不行换一个 27 www.transwarp.io Transwarp Confidential QJM优势 • 不需要额外的共享存储,降低了复杂度和维护成本 • 不需要单独配置fencing实现,QJM内置了fencing • 不存在单点失效 • 系统鲁棒性可配置,能容忍最多N台机器宕机 • 不会因为一台JournalNode延迟影响性能,也不会因为JournalNode数量增多而影响 性能 28 www.transwarp.io Transwarp Confidential HDFS存储架构的局限性 • HDFS双层结构 – namespace管理目录、文件、数据块 • 支持常见的文件系统操作,如创建文件,修改文件,删除文件等 – Block Management • 块管理:块的修改及副本复制存放,创建数据块,删除数据块等 • 物理存储:存储实际的数据块 • 局限性 – namespace和block managerment高耦合 – namenode扩展性 • namespace只能存放在单个namenode上,而namenode在内存中存储了整个分布式文件系统中的元 数据信息,这限制了集群中数据块,文件和目录的数目 – 制约性能 • 文件操作的性能制约于单个namenode的吞吐量 – 隔离性 • 某个用户提交的负载很大的job会减慢其他用户的job 29 www.transwarp.io Transwarp Confidential Federation原理 • 多个namenode/namespace • 每个namenode拥有一个存储池block pool – 相互独立不需要协调,各自管理部分目录 – 都可以对外服务 – 一个name service挂了不影响其他的 • datanode向所有namenode发送心跳和块报告,为所有存储池服务 30 www.transwarp.io Transwarp Confidential Federation命名空间管理 • 这个配置配置在客户端 • Client Side Mount Table和linux系统类 似 • 下面独立的命名空间,mount到全局 mount-table中,就可以做到将数据全局 共享,独立控制权限 31 www.transwarp.io Transwarp Confidential Erasure Code将HDFS存储能力翻倍 • 3倍存储开销 • 副本数=3, 可容忍任 意两个块丢失 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 1 2 3 4 5 6 7 8 9 10 P1 P2 P3 P4 • 1.4倍存储开销 • 副本数=1, 校验块数量 =4, 可容忍任意四个块 丢失 Reed-Solomon Erasure Codes 源数据块 校验数据块 开源的HDFS2 TDH优化的HDFS2 冷数据存储场景 32 www.transwarp.io Transwarp Confidential Erasure code • 应用背景 – 数据快速膨胀,多副本策略造成资源利用率低 – 替代RAID5、RAID6等方案,支持多个盘失效 • RAID5支持一个盘失效,RAID6支持两个盘 • Erasure code – 原始n份数据,增加m份,通过n+m中的任意n份,还原出原始数据 – 分为encode和decode两个过程 – 计算能力换存储空间 1 2 3 4 5 6 7 8 9 10 P1 P2 P3 P4 Reed-Solomon Erasure Codes 源数据块 校验数据块 TDH优化的HDFS2 33 www.transwarp.io Transwarp Confidential Erasure code原理 • 预备阶段 – 将一个待编码数据单 元(Data Unit)分 成n个数据块 • 编码阶段 – 原始n个数据块,通 过范德蒙矩阵或柯西 矩阵等编码矩阵,相 乘得到n+m个数据 块 • 数据丢失 – 最多容忍m个数据块 丢失,剩下的称为幸 存者 • 解码阶段 – 乘以对应编码矩阵的 逆矩阵,计算原始数 据 34 www.transwarp.io Transwarp Confidential Erasure code实现 • 适用数据 – 一定时间后的冷数据 • 实现方式 – 后台单独服务,对冷数据进行编码 – 另一服务对数据进行检查,进行数据修复 • 适用场景 – 替代传统RAID – 云存储,减少n-way副本的成本开销 – P2P – 数字编码
还剩33页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

jacky_liu8

贡献于2016-09-20

下载需要 10 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf