Hadoop生态圈
Hadoop框架
主要服务介绍
软件 | 解析 | 备注 |
---|---|---|
HDFS | 分布式存储数据,数据分散存储 | 一个存储文件在HDFS中被分成若干个小块,每个小块被存储在不同的服务器上 |
MapReduce | 第一代分布式计算框架 — 分布式计算(将任务 分布在多个服务器上,服务器越多,计算越快) | Map阶段—多台机器同时读取文件内容,分别做统计。Reduce阶段— 将Map结果作为输入,进行汇总,整理,输出结果 |
Tez、Spark | 第二代分布式计算框架 | 计算框架 |
Yarn | 分布式资源管理器 | 管理多种计算模型,为各个模型分配资源 |
Spark | 以内存换效率 | 中间计算结果不落地,在内存中直接进入下一步骤 |
HBase | 分布式列存储数据库(非关系型数据库) | 负责HDFS文件的读取,写入,速度快 |
Hive | 数据仓库 | 类似于SQL实现数据库查询的语言,将SQL转化为MapReduce 程序 |
Oozie | 工作流调度器 | 对有依赖关系的程序,依次执行 |
Sqoop | 数据库系统的导入 | 将MYSQL数据库导入到 HDFS中 |
Pig | 数据库导入任务,映射到MapReduce中执行 | 减少用户自行编写 Java程序 |
Flume | 日志收集工具 | 节约数据传输开销,同时可以对数据日志进行简单处理,将日志写成各种数据目标 |
Kafka | 分布式消息队列 | 生产者、消费者 |
ZooKeeper | 分布式协作服务 | 解决单点故障问题 |
HDFS(分布式文件系统)
- 提供分布式存储支持的系统,上层的很多计算框架(Hbase、Spark等)等依赖于HDFS存储
- 主要由 NameNode、DataNode 两部分组成
- NameNode 是 HDFS的管理节点,存储数据元(文件对应的数据块、文件大小、文件权限等),同时负责读、写调度和存储分配
- DataNode 节点是真正的存储节点,用来存储数据和,在DataNode上每个数据块会根据设置副本数进行分级复制,保证同毅文件的每个数据块副本都不在同一个机器上
MapReduce(分布式计算框架) — 离线计算(非实时计算)
- Map阶段—多台机器同时读取文件内容,分别做统计。Reduce阶段— 将Map结果作为输入,进行汇总,整理,输出结果
Yarn(分布式资源管理器)
- 支持CPU和内存两种资源管理
- 资源管理由 ResourceManager(RM)、applicationMaster(AM)、NodeManager(NM) 共同完成
- RM 负责对NM 上的资源进行统一管理和调度
- NM 负责 资源的供给 和隔离
- AM 用户提交应用程序后,会创建一个跟踪和管理这个程序的AM,负责向RM申请资源,并要求NM启动指定资源的任务
- 可以管理多种计算模型,如Spark、Storm、MapReduce、Flink 都可以放在 Yarn 下进行统一管理
Spark(内存计算) — 内存中分布式计算(内存换效率)
- MapReduce 是将每一步的中间计算结果存入到磁盘中,下一步进行使用时,在从磁盘中取出。
- Spark 任务则在计算过程中,中间结果不会落地,直接进入下 一步骤,最终将最后的结果写入磁盘
HBase(分布式列存储数据库)
- 面向列存储的数据 — 非关系型数据库(NoSQL)
- 将不同数据的同一属性值存储在一起,在查询时,只遍历需要的数据,实现数据即是索引
- 内部管理的文件全部存储在HDFS中。
- 适用场景 — 交易历史查询操作,查询场景简单,检索条件少,每秒几万行数据更新。
Hive(数据仓库)
- 一种类似 SQL的查询语言(HQL),可以将 SQL 转化为 MapReduce 任务在Hadoop 上执行
Oozie(工作流调度器)
- 在执行多个任务时,任务之间有依赖关系,一个任务的开启需要依赖另一个任务的完成
- Oozie 是一个基于共工作流引擎的调度器,是一个运行在Java Servlet容器(如Tomact)中的Javas Web 应用,可运行 Hadoop 的 MapReduce 和Pig等任务
- 工作流通过 hPDL 定义,工作流操作通过远程系统启动任务,当任务完成后,远程系统会回调通知任务结束,然后再开始下一个操作
Sqoop 和 Pig
- 将原有 MYSQL数据库文件导入到HDFS系统中。Sqoop (SQL-to-Hadoop)实现
- Pig 是一种数据流语言,可以完成 排序,过滤,求和,关联等操作,支持自定义函数,将数据映射到MapReduce作业,上传到集群运行,减少用户编写Java 程序的苦恼
Flume(日志收集工具)
- 数据传输机制,保证数据传输的实时性,完整性,及节约带宽
- 将数据从生产、传输、处理并最终写入目标路径的过程,抽象为数据流,数据原 支持再 Flume中定制数据发送方,从而支持收集各种不同协议数据
- 同时提供对 日志数据进行简单处理的能力,如过滤,格式转换。
- 具有 将日志写往各种数据目标(文件、HDFS、网络)的能力
- Hadoop 平台主要是通过 Flume 将数据从源服务器写入Hadoop 的HDFS中
Kafka(分布式消息队列)
- 实时处理大量数据以满足各种需求的场景
- 作为多种类型的 数据管道和消息系统使用
ZoopKeeper(分布式协作服务)
- 针对单点故障,一般采用双机热备份处理,但由于网络问题,容易 造成双主节点问题
- 两个节点启动后 ,都会去ZooKeeper中进行注册信息,ZooKeeper对先注册的节点A进行锁定,对两个节点进行选取,对节点 B 进行阻塞备用,如果 A故障,这时 ZooKeeper 删除 A节点注册 信息,启用 B 节点
Ambari(大数据运维工具)
- 大数据基础运维平台,实现生态圈各种组件的自动化部署,服务管理和监控警告
- Ambari 通过 puppet 实现自动化安装和配置
- 通过 Ganglia 收集监控度量指标
- 通过 Nagios 实现故障警报
- Ambari 已支持大多数 Hadoop 组件,包括 HDFS、MapReduce、Oozie、Hive、Pig、 Hbase、ZooKeeper、Sqoop、Kafka、Spark、Druid、Storm 等几十个常用的 Hadoop 组件