linux怎么查看本机内存大小
289
2022-11-23
0002 - HDFS入门指南
1 - HDFS 简介
HDFS(Hadoop Distributed File System)是 Hadoop 下的分布式文件系统。是一个适合运行在低成本的通用硬件之上,具有高容错、高吞吐量等特性。
2 - HDFS 优缺点
2.1 - 优点
1、高容错HDFS 数据自动保存多副本(默认 3 副本)提高可靠性,如果部分硬件的损坏不会导致全部数据的丢失,并且会自动恢复。2、高吞吐量HDFS 是为高吞吐量的数据传输而设计的,因此不适用于对延迟要求高的数据访问。3、支持大文件HDFS 适合大文件的存储,GB、TB、甚至 PB 级数据,百万规模以上的文件数量。4、流式数据访问HDFS 适合一次写入多次读取(write-once-read-many)的访问模型。采用追加(append-only)的方式写入数据。不支持随机访问数据,不能从文件任意位置新增数据。5、跨平台移植性HDFS 具有良好的跨平台移植性,因此,其它大数据计算框架都将其作为数据持久化存储的首选方案。
2.2 - 缺点
1、不适合低延迟数据访问由于 Hadoop 针对高数据吞吐量做了优化,牺牲了获取数据的延迟,因此不适用于低延迟访问数据的业务。2、无法高效存储小文件HDFS 将每一个文件存储为一个块,每一个块的元数据存储在 NameNode 的内存中。因此,Hadoop 对小文件的存储非常低效。
因为大量的小文件会耗尽 NameNode 中的内存,但是存储这些小文件的所需的存储空间没有变多,一个 1M 的小文件 只会需要 1M 的存储空间,不会用掉 128M 的存储空间。
每个文件、目录和数据块的存储信息大约占 150byte。因此,如果有一百万个小文件,每个小文件都会占一个数据块,那至少需要 300MB内存。3、不支持修改文件HDFS 适合一次写入,多次读取的场景。Hadoop2.0 虽然支持文件末尾的追加功能,但不建议对 HDFS 上的文件进行修改,因为效率低下。4、不支持多用户并行写入同一时间内,只能有一个用户执行写的操作。
3 - HDFS 角色术语
HDFS 为大数据平台提供了统一的存储,它主要由三部分构成,分别是 NameNode、DataNode 和 SecondaryNameNode。如果是 HA 架构,还有 StandbyNameNode 和 JournalNode。
NameNode(NN): 管理文件系统的命名空间、维护文件系统的目录结构树以及元数据信息;记录写入的每个数据块与其归属文件的对应关系。 DataNode(DN): 用于存储每个文件的数据块,并且会周期性的向 NameNode 报告该 DataNode 的数据存放情况。 SecondaryNameNode(SNN): 单节点集群下,用于备份 NameNode 的元数据(定时异地冷备份)。当 NameNode 发送故障时,不能完整恢复元数据,可能会丢失一部分数据。 StandbyNameNode: 备用节点,与 Active NameNode 中的数据保持实时同步。随时准备在 Active NameNode 出现异常时接管其服务。 JournalNode(JN): HA 集群下,用于同步主备 NameNode 之间的元数据信息。 ZKFC: 与 NameNode 一一对应的服务,即每个 NameNode 都需要部署 ZKFC。它负责监控 NameNode 的状态,并及时把状态写入 Zookeeper。ZKFC 也有选择谁作为 Active NameNode 的权利。
4 - HDFS 架构设计
4.1 - HDFS 架构
HDFS 是 Master/Slave 的架构。由一个或两个 NameNode(NN) 和多个 DataNode(DN) 组成。
hdfs_architecture.png
4.2 - HDFS HA 架构
HA 即为 High Availability,用于解决 NameNode 单点故障问题。随时准备在 Active NameNode 出现异常时接管其服务,从而不间断的对外提供服务。
hdfs_ha_architecture.png
为保持 Active 和 Standby 节点的数据一致性,两个节点都要与一组称为 JournalNode 的节点通信,同步元数据信息。
由于 JournalNode 消耗资源很小,可以与 Hadoop 其它服务共用机器。因此,建议将 JournalNode 部署在管理节点上,以避免数据节点在进行大数据量传输时引起 JournalNode 写入失败。
4.3 - 文件系统命名空间(NameSpace)
HDFS 的 文件系统命名空间 的层次结构与大多数文件系统类似(如 Linux),可以创建、删除、移动、重命名目录或文件,支持用户配额和访问权限,但不支持硬链接和软连接。NameNode 负责维护文件系统命名空间,记录对文件系统命名空间或其属性的任何更改。
4.4 - 数据复制
由于 HDFS 运行在低成本的通用硬件之上,这意味着硬件是不可靠的,为了保证容错性,HDFS 提供了数据复制机制。HDFS 将每一个文件存储为一个块,每个块由多个副本以实现容错,块的大小和副本数可以自行配置(默认情况下,块大小是 128M,默认副本数是 3)。
NameNode 全权管理数据块的复制,它周期性的从集群中的每个 DataNode 接收心跳信号和块状态报告(Blockreport)。接收到心跳信号意味着该 DataNode 节点工作正常。块状态报告包含了一个该 DataNode 上所有数据块的列表。
hdfs_dataNodes.png
4.5 - 副本的放置策略
大型 HDFS 实例一般运行在跨越多个机架的计算机组成的集群上,不同机架上的两台机器之间的通讯需要经过交换机。在大多数情况下,同一个机架内的两台机器间的带宽会比不同机架的两台机器间的带宽大。因此,通过一个机架感知的过程,NameNode 可以确定每个 DataNode 所属的机架 ID。
当副本数等于 3 时,HDFS 的存放策略是将一个副本存放在本地机架的节点上,一个副本放在同一机架的另一个节点上,最后一个副本放在不同机架的节点上。这种策略减少了机架间的数据传输,这就提高了写操作的效率。机架的错误远远比节点的错误少,所以这个策略不会影响到数据的可靠性和可用性。
当副本数大于 3 时,则随机确定第 4 个和之后副本的存放位置,同时保持每个机架的副本数量低于上限,通常是 (副本数 - 1) / 机架数量 + 2 。由于 NameNode 不允许一个 DataNode 节点拥有同一块的多个副本,因此创建的最大副本数为 DataNode 的总数。
4.6 - 读取副本的选择策略
为了降低整体的减少带宽消耗和读取延迟,HDFS 会尽量让读取程序读取离它最近的副本。如果在读取程序的同一个机架上有一个副本,那么就读取该副本。如果一个HDFS集群跨越多个数据中心,那么客户端也将首先读本地数据中心的副本。
4.7 - 架构的稳定性
HDFS 的主要目标就是即使出现故障也要保证数据存储的可靠性。常见的三种故障情况是:NameNode 故障, DataNode 故障和网络割裂(network partitions)。1、磁盘数据错误,心跳检测和重新复制每个 DataNode 节点周期性向 NameNode 发送心跳信号,将超过 10 分钟没有收到心跳的 DataNode 会标记为宕机,不会再将新的 IO 请求发给它们,也不会再使用宕机 DataNode 上的数据。DataNode 的宕机可能会导致某些块的副本数小于其指定值,NameNode 不断的检测这些需要复制的数据块,一旦发现就启动复制操作。在下列情况下,可能需要重新复制:
某个 DataNode 节点失效; 某个副本遭到损坏; DataNode 节点上的硬盘错误; 文件的副本系数增大。
2、集群均衡HDFS 的架构支持数据均衡策略。如果某个 DataNode 节点上的空闲空间低于特定的临界点,按照均衡策略系统就会自动的将数据从这个 DataNode 移动到其它空闲的 DataNode。当对某个文件的请求突然增加,那么也可能启动一个计划创建该文件新的副本,并且同时重新平衡集群中的其它数据。这些均衡策略目前还没有实现。
HDFS 架构与数据重新平衡兼容。如果 DataNode 上的可用空间低于某个阈值,可能会自动将数据从一个 DataNode 移动到另一个 DataNode。如果对特定文件的需求突然很高,也可能会动态创建额外的副本并重新平衡集群中的其它数据。
3、数据完整性从某个 DataNode 获取的数据块有可能是损坏的,损坏可能是由 DataNode 的存储设备错误、网络错误或者软件 bug 造成的。HDFS 客户端实现了对 HDFS 文件内容的校验和(checksum)检查。当客户端创建一个新的 HDFS 文件,会计算这个文件每个数据块的校验和,并将校验和作为一个单独的隐藏文件保存在同一个 HDFS 名字空间下。当客户端获取文件内容后,它会检验从 DataNode 获取的数据跟相应的校验和文件中的校验和是否匹配,如果不匹配,客户端可以选择从其它 DataNode 获取该数据块的副本。
4、元数据磁盘故障FsImage 和 Editlog 是 HDFS 的核心数据结构。如果这些文件损坏了,整个 HDFS 实例都将失效。因而,NameNode 可以配置成支持维护多个 FsImage 和 Editlog 的副本。任何对 FsImage 或者 Editlog 的修改,都将同步到它们的副本上。这种多副本的同步操作可能会降低 NameNode 每秒处理的名字空间事务数量。然而这个代价是可以接受的,因为即使 HDFS 的应用是数据密集的,它们也非元数据密集的。当 NameNode 重启的时候,它会选取最近的完整的 FsImage 和 Editlog 来使用。
NameNode 是 HDFS 集群中的单点故障(single point of failure)所在。如果 NameNode 机器故障,是需要手工干预的。
提高故障恢复能力的方案:
使用多个 NameNode 启用高可用性 使用 NFS 上的共享存储或使用分布式编辑日志(称为 Journal)。
5、支持快照快照支持某一特定时刻的数据的复制备份。利用快照,可以让 HDFS 在数据损坏时恢复到过去一个已知正确的时间点。HDFS 目前已经支持快照功能。
5 - 图解 HDFS 存储原理
5.2 - HDFS 读数据原理
5.3 - HDFS 故障类型和其检测方法
5.4 - 副本布局策略
::: hljs-center
扫一扫,我们的故事就开始了。
:::
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~