Hadoop 起源于 Google 的三大论文:
- GFS:Google 的分布式文件系统 Google File System
- MapReduce:Google 的 MapReduce 开源分布式并行计算框架
- BigTable:一个大型的分布式数据库
上述三大论文的演变关系:
- GFS —— -> HDFS
- Google MapReduce —— -> Hadoop MapReduce
- BigTable —— -> HBase
Hadoop 名称的由来:
Hadoop 之父 Doug Cutting 儿子毛绒玩具象命名的。
Hadoop主流版本:
- 原 生 版 本 : A p a c h e 基 金 会 h a d o o p \color{#FF0000}{原生版本:Apache 基金会 hadoop} 原生版本:Apache基金会hadoop
- Cloudera版本(Cloudera‘s Distribution Including Apache Hadoop,简称"CDH")
- Hortonworks版本(Hortonworks Data Platform,简称"HDP")
* | Apache Hadoop | CDH | HDP |
---|---|---|---|
管理工具 | 手动人工 | Cloudera Manager | Ambari |
收费情况 | 开源 | 社区版免费,企业版收费 | 免费 |
实际生产过程中是根据原生版本衍生自己封装的版本,这里我们只是为了学习Hadoop,直接使用原生版本即可
Hadoop框架最核心设计:HDFS 和 MapReduce
- HDFS 为海量的数据提供了存储
- MapReduce 为海量的数据提供了计算
Hadoop框架的四个模块:
- Hadoop Common:这些是其他 Hadoop 模块所需的 Java 库和实用程序。这些库提供文件系统和操作系统级抽象,并包含启动 Hadoop 所需的 Java 文件和脚本
- Hadoop YARN:这是一个用于作业调度和集群资源管理的框架
- Hadoop Distributed File System(HDFS):分布式文件系统,提供对应用程序数据的高吞吐量访问
- Hadoop MapReduce:基于 YARN 的用于并行处理大数据集的系统
Hadoop 的优点:
- Hadoop是一个能够对大量数据进行分布式处理的软件框架
- Hadoop 以一种可靠、高效、可伸缩的方式进行数据处理
- Hadoop 是可靠的,因为它假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新分布处理
- Hadoop 是高效的,因为它以并行的方式工作,通过并行处理加快处理速度
- Hadoop 是可伸缩的,能够处理 PB 级数据
- Hadoop 依赖于社区服务,因此它的成本比较低,任何人都可以使用
- Hadoop是一个能够让用户轻松架构和使用的分布式计算平台
- 主要优点为:
- 高可靠性 Hadoop按位存储和处理数据的能力值得人们信赖
- 高扩展性 Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中
- 高效性 Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快
- 高容错性 Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配
- 低成本 与一体机、商用数据仓库以及QlikView、Yonghong Z-Suite等数据集市相比,hadoop是开源的,项目的软件成本因此会大大降低
Hadoop 核心架构
- HDFS
对外部客户机而言,HDFS就像一个传统的分级文件系统。可以创建、删除、移动或重命名文件,等等。
但是 HDFS 的架构是基于一组特定的节点构建的。这些节点包括 NameNode(仅一个),它在 HDFS 内部提供元数据服务;DataNode,它为 HDFS 提供存储块。HDFS 内部的所有通信都基于标准的 TCP/IP 协议 - NameNode
NameNode 是一个通常在 HDFS 实例中的单独机器上运行的软件。它负责管理文件系统名称空间和控制外部客户机的访问,NameNode 决定是否将文件映射到 DataNode 上的复制块上。
对于最常见的 3 个复制块,第一个复制块存储在同一机架的不同节点上,最后一个复制块存储在不同机架的某个节点上。
实际的 I/O事务并没有经过 NameNode,只有表示 DataNode 和块的文件映射的元数据经过 NameNode。
当外部客户机发送请求要求创建文件时,NameNode 会以块标识和该块的第一个副本的 DataNode IP 地址作为响应。
这个 NameNode 还会通知其他将要接收该块的副本的 DataNode。
NameNode 在一个称为 FsImage 的文件中存储所有关于文件系统名称空间的信息。
这个文件和一个包含所有事务的记录文件(这里是 EditLog)将存储在 NameNode 的本地文件系统上。
FsImage 和 EditLog 文件也需要复制副本,以防文件损坏或 NameNode 系统丢失。 - DataNode
DataNode 也是一个通常在 HDFS实例中的单独机器上运行的软件。Hadoop 集群包含一个 NameNode 和大量 DataNodeDataNode 通常以机架的形式组织,机架通过一个交换机将所有系统连接起来。Hadoop 的一个假设是:机架内部节点之间的传输速度快于机架间节点的传输速度。DataNode 响应来自 HDFS 客户机的读写请求。它们还响应来自 NameNode 的创建、删除和复制块的命令。NameNode 依赖来自每个 DataNode 的定期心跳(heartbeat)消息。每条消息都包含一个块报告,NameNode 可以根据这个报告验证块映射和其他文件系统元数据。如果 DataNode 不能发送心跳消息,NameNode 将采取修复措施,重新复制在该节点上丢失的块 - 文件操作
DFS 并不是一个万能的文件系统。它的主要目的是支持以流的形式访问写入的大型文件。
如果客户机想将文件写到 HDFS 上,首先需要将该文件缓存到本地的临时存储。
如果缓存的数据大于所需的 HDFS 块大小,创建文件的请求将发送给 NameNode。NameNode 将以 DataNode 标识和目标块响应客户机。
同时也通知将要保存文件块副本的 DataNode。
当客户机开始将临时文件发送给第一个 DataNode 时,将立即通过管道方式将块内容转发给副本 DataNode。
客户机也负责创建保存在相同 HDFS名称空间中的校验和(checksum)文件。
在最后的文件块发送之后,NameNode 将文件创建提交到它的持久化元数据存储(在 EditLog 和 FsImage 文件) - Linux 集群
Hadoop 框架可在单一的 Linux 平台上使用(开发和调试时),官方提供MiniCluster作为单元测试使用,
不过使用存放在机架上的商业服务器才能发挥它的力量。这些机架组成一个 Hadoop 集群。
它通过集群拓扑知识决定如何在整个集群中分配作业和文件。
Hadoop 假定节点可能失败,因此采用本机方法处理单个计算机甚至所有机架的失败
Hadoop应用场景:
- 在线旅游
- 移动数据
- 电子商务
- 能源开采与节能
- 基础架构管理
- 图像处理
- 诈骗检测
- IT安全
- 医疗保健
大数据的生态体系(开发 + 运维)
HDFS 工作原理