hadoop官方文档_Hadoop 随笔(官方文档)

8e571f33b84a44cbf3d3395c4ea8d496.png

Hadoop 随笔

包含模块:

  • Hadoop Common:支持 Hadoop 其他模块的公共实用工具
  • Hadoop Distributed File System (HDFS™):能够为应用数据提供高吞吐量的访问的分布式文件系统
  • Hadoop YARN:作业调度和集群资源管理框架
  • Hadoop MapReduce:一个基于 YARN 的大型数据集并行处理系统
  • Hadoop Ozone:用于 Hadoop 的对象存储

名词解释

Server:可以理解为单个机器,提供服务。包括 CPU、DRAM、Disks

Rack:Multi Servers,40 ~ 80 servers 组成 Rack(机架、机柜),servers 之间通过 Ethernet(以太网)连接

Clusters:Multi Racks,多个 Rack 组成 Cluster,Rack 之间通过 Cluster Switch 连接,

Datacenter:更偏向于物理、地域的划分,一个 Datacenter 可能有多个集群,一个集群也可能跨多个数据中心。

关于网络带宽:单个 server 内不需要网络带宽;多个 server 交互时,同一 Rack 中的网络带宽最为充足,其次为同一 Cluster,不同地域的 Datacenter 网络带宽限制最大。

Hadoop Common

Rack

Hadoop 组件支持 Rack。HDFS 中就是用 Rack ,其通过将 Block 放置在不同的 Rack 上来使用 Rack 的容错机制。Rack 能保证在网络交换机故障时或者在集群中的分区提供数据的可用性。

HDFS

分布式文件系统 HDFS 被设计用于普通硬件上的,其和现有的分布式文件系统很相似,当然也有不同点,这些不同点正正是 HDFS 的优越性的体现。

与其他分布式文件系统的不同点、特点

  • 支持高容错
  • 部署在低成本的硬件上
  • 提供应用的高吞吐量访问
  • 适应与拥有大型数据集的应用
  • 放宽了对 POSIX 的一些要求,允许对文件系统进行流访问

HDFS 设计时的目标

  • 硬件的错误处理

HDFS 中包含数百台、数千台服务器,其中服务器挂掉是常态,因此 HDFS 能够识别错误,并且迅速的、自动的恢复是其设计结构的目标

  • 流式数据访问

这里的流式数据访问是针对特殊应用的,而且此处"流式"的概念更像是批处理,而不是用于交互(interactive)。HDFS 更注重高吞吐量而不是低延迟。

  • 大型数据集

文件大小通常在 GB 到 TB 之间,因此他需要提供高聚合数据带宽,并且在单个集群中扩展到数百个节点,并且在单个实例中支持千万个文件。

  • 简单的一致性模型

HDFS 需要对文件的"单次写多次读"模型,一个文件一旦被创建、写入、关闭之后,除了 append 和 truncate 操作之外,是不希望被更改的(update)。这种模型假设简化了数据一致性问题,并且支持了高吞吐量访问。

  • 移动计算比移动数据更加简单

当计算在数据附近时会变得更高效,对于大型数据集更是如此,因为这样会最小化网络拥塞,并且最大化系统的总吞吐量。HDFS 为此提供了应用程序接口,将计算移动到数据旁边。

  • 异构硬件和软件平台的可移植性

将 HDFS 从一个平台移植到另一个平台是很容易的。

NameNode 和 DataNodes

HDFS 使用主从接结构。一个 HDFS 集群包含一个 NameNode,它是一个主服务器,用来管理文件系统命名空间控制客户端对文件的访问。另外,包含大量的 DataNodes,通常集群中每个节点都有一个,它用来管理其所在节点的存储

HDFS 暴露一个文件系统命名空间并且允许用户存储数据到文件中。在存储时,每个文件被分成一个或多个 blocks,并且这些 blocks 被存储在 DataNodes 集合中。NameNode 执行文件系统命名空间操作,例如打开、关闭、重命名文件和目录。同时 NameNode 决定 blocks 和 DataNodes 的对应关系。DataNodes 用来响应来自文件系统客户端的读或者写请求。DataNodes 同时执行 NameNode 的指令,如创建、删除、复制等。

50b806e4cebe66394eefa162c354ba4e.png

与 HDFS 的整体设计目标一致,NameNode 与 dataNodes 同样也是被设计基于普通机器的。具体做法为:

  • 运行于 Lnux 机器上
  • 使用 Java 语言,移植性好
  • 一般来说每个机器运行一个 DataNode

系统中仅存在单个 nameNode 简化了体系结构。metadata 被 namenode 决策和存储,而用户数据永远不会流经 NameNode。

文件系统命名空间

HDFS 支持传统的层次化文件组织。用户或者应用程序可以创建和存储数据到目录中。文件系统命名空间可以创建、移动、重命名文件,其支持用户配额和访问权限,目前 HDFS 并不支持硬链接和软链接。

除了文件系统命名空间信息,NameNode 同时存储复制因子(replication factor )等信息。

数据复制

HDFS 通过存储 blocks 序列的方式存储文件,为了达到高容错的目的,HDFS 采用复制的方式,每个文件的 block 大小复制因子都是可配置的。HDFS 中除了最后一个 block,其余 block 的大小相同,尽管可以添加可变长度 block 的支持。HDFS 的复制因子可以被指定,其可以在文件创建时、或者创建之后被指定。

NameNode 负责关于 block 复制工作的所有决策。它定期从集群中的所有节点收集 Heartbeat 和 Blockreport,收到 Heartbeat 代表 DataNodes 正常工作,Blockreport 中包含所有 block 的列表。

e92e4dbaed65d73a943349f223501a94.png

HDFS 中复制位置和 Rack 息息相关,其可以保证可靠性、可用性和带宽利用率。集群中两个节点的交流需要网络交换机,其中不同 Rack 上的机器的网络带宽比相同 Rack 上机器的网络交带宽差。

复制放置位置、策略:

从 Rack 的角度:

NameNode 决定每个 DataNodes 所属的 Rack id。其中有集中策略:

  • 均匀的将副本放置在不同的机架上

优点:当整个机架失败时不会损失数据;在读取数据时可以使用多个机架的带宽;可以很轻松的达到负载均衡;

缺点:提高了写操作的成本,因为按照这样方式写操作需要将块转移到多个机架上,之前提高过不同机架上机器传输对应的网络带宽差。

  • 复制因子为 3 时,其中一个副本在当前写机器上的机架上,其余的副本在相同的其余机架上但是不同节点;复制因子为 4 时,前三个按照上述策略,其余的副本随机放置,并且每个机架上的副本数量少于上限。

上限计算公式:$frac{replicas - 1}{racks + 2}$

优点:减少了机架间的写流量,以提高写性能;由于机架失败的概率远远小于节点失败的概率,因此这个策略同样可以保证可靠性和可用性;在读取文件时减少了使用的聚合网络带宽,因此所有的节点并不是分布在不同的机架上。

从 DataNodes 的角度:

每个 DataNode 不允许拥有同一 block 的多个副本,因此副本的最大数量是当时 DataNodes 的总数。


除上述考虑基于机架感知的存储策略,还需要考虑存储类型。即确定候选节点后,还需要检查候选节点是否拥有满足要求的存储空间,如果不满足将查找另一个节点,如果在当前路径中找不到符合要求的足够节点,将会在第二个路径中寻找具有回退类型的节点。

副本选择

为达到最小化网络带宽消耗和读取延迟,HDFS 选择副本的原则是:就近原则。具体为如果读取节点机架存在副本,那么当前副本将会响应请求,不然考虑同一数据中心中,是否存在副本可以使用。

安全模式

启动时,NameNode 会进入安全模式,在安全模式中,不会发生数据块的复制。在这个模式中,NameNode 接收 Heartbeat 和 Nodereport

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值