[大数据学习](一)Hadoop生态圈
Hadoop 生态圈总览图#
-coordination and management(协调与管理) -query(查询) -data piping(数据管道) -core hadoop(核心 hadoop) -machine learning(机器学习) -nosql database(nosql 数据库)
1.HDFS(分布式文件系统)—— 核心#
源自于 Google 的 GFS 论文,发表于 2003 年 10 月,HDFS 是 GFS 克隆版。
HDFS 是整个 hadoop 体系的基础,负责数据的存储与管理。HDFS 有着高容错性(fault-tolerant)的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。它提供了一次写入多次读取的机制,数据以块的形式,同时分布在集群不同物理机器上。
client:切分文件,访问 HDFS 时,首先与 NameNode 交互,获取目标文件的位置信息,然后与 DataNode 交互,读写数据
NameNode:master 节点,每个 HDFS 集群只有一个,管理 HDFS 的名称空间和数据块映射信息,配置相关副本信息,处理客户端请求。
DataNode:slave 节点,存储实际数据,并汇报状态信息给 NameNode,默认一个文件会备份 3 份在不同的 DataNode 中,实现高可靠性和容错性。
Secondary NameNode:辅助 NameNode,实现高可靠性,定期合并 fsimage 和 fsedits,推送给 NameNode;紧急情况下辅助和恢复 NameNode,但其并非 NameNode 的热备份。
2.MapReduce(分布式计算框架)—— 核心#
源自于 google 的 MapReduce 论文,发表于 2004 年 12 月,Hadoop MapReduce 是 google MapReduce 克隆版。
MapReduce 是一种基于磁盘的分布式并行批处理计算模型,用于处理大数据量的计算。它屏蔽了分布式计算框架细节,将计算抽象成 map 和 reduce 两部分,其中 Map 对应数据集上的独立元素进行指定的操作,生成键 - 值对形式中间结果。Reduce 则对中间结果中相同的键的所有值进行规约,以得到最终结果。MapReduce 非常适合在大量计算机组成的分布式并行环境里进行数据处理。
JobTracker:master 节点,只有一个,管理所有作业,任务 / 作业的监控,错误处理等,将任务分解成一系列任务,并分派给 TaskTracker。
TaskTracker:slave 节点,运行 Map task 和 Reduce task;并与 JobTracker 交互,汇报任务状态。
Map task:解析每条数据记录,传递给用户编写的 map () 函数并执行,将输出结果写入到本地磁盘(如果为 map—only 作业,则直接写入 HDFS)。
Reduce task:从 Map 它深刻地执行结果中,远程读取输入数据,对数据进行排序,将数据分组传递给用户编写的 Reduce () 函数执行。
3.Yarn(分布式资源管理器)—— 核心#
YARN 是下一代 MapReduce,即 MRv2,是在第一代 MapReduce 基础上演变而来的,主要是为了解决原始 Hadoop 扩展性较差,不支持多计算框架而提出的。 Yarn 是下一代 Hadoop 计算平台,yarn 是一个通用的运行时框架,用户可以编写自己的计算框架,在该运行环境中运行。 用于自己编写的框架作为客户端的一个 lib,在运用提交作业时打包即可。该框架为提供了以下几个组件:
- 资源管理:包括应用程序管理和机器资源管理
- 资源双层调度
- 容错性:各个组件均有考虑容错性
- 扩展性:可扩展到上万个节点
4.Spark(分布式计算框架)#
Spark 是一个 Apache 项目,它被标榜为 “快如闪电的集群计算”。它拥有一个繁荣的开源社区,并且是目前最活跃的 Apache 项目。最早 Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用的并行计算框架。是一种基于内存的分布式并行计算框架,不同于 MapReduce 的是 ——Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。Spark 提供了一个更快、更通用的数据处理平台。和 Hadoop 相比,Spark 可以让你的程序在内存中运行时速度提升 100 倍,或者在磁盘上运行时速度提升 10 倍
Cluster Manager:在 standalone 模式中即为 Master 主节点,控制整个集群,监控 worker。在 YARN 模式中为资源管理器
Worker 节点:从节点,负责控制计算节点,启动 Executor 或者 Driver。
Driver: 运行 Application 的 main () 函数
Executor:执行器,是为某个 Application 运行在 worker node 上的一个进程
Spark 将数据抽象为 RDD(弹性分布式数据集),内部提供了大量的库,包括 Spark Core、Spark SQL、Spark Streaming、MLlib、GraphX。 开发者可以在同一个应用程序中无缝组合使用这些库。
Spark Core:包含 Spark 的基本功能;尤其是定义 RDD 的 API、操作以及这两者上的动作。其他 Spark 的库都是构建在 RDD 和 Spark Core 之上的
Spark SQL:提供通过 Apache Hive 的 SQL 变体 Hive 查询语言(HiveQL)与 Spark 进行交互的 API。每个数据库表被当做一个 RDD,Spark SQL 查询被转换为 Spark 操作。
Spark Streaming:对实时数据流进行处理和控制。Spark Streaming 允许程序能够像普通 RDD 一样处理实时数据,通过短时批处理实现的伪流处理。
MLlib:一个常用机器学习算法库,算法被实现为对 RDD 的 Spark 操作。这个库包含可扩展的学习算法,比如分类、回归等需要对大量数据集进行迭代的操作。
GraphX:控制图、并行图操作和计算的一组算法和工具的集合。GraphX 扩展了 RDD API,包含控制图、创建子图、访问路径上所有顶点的操作
5.Tez (DAG 计算模型)#
Tez 是 Apache 最新开源的支持 DAG 作业的计算框架,它直接源于 MapReduce 框架,核心思想是将 Map 和 Reduce 两个操作进一步拆分, 即 Map 被拆分成 Input、Processor、Sort、Merge 和 Output Reduce 被拆分成 Input、Shuffle、Sort、Merge、Processor 和 Output 等 这样,这些分解后的元操作可以任意灵活组合,产生新的操作,这些操作经过一些控制程序组装后,可形成一个大的 DAG 作业。 目前 hive 支持 mr、tez 计算模型,tez 能完美二进制 mr 程序,提升运算性能。
6.Hive(基于 Hadoop 的数据仓库)#
由 facebook 开源,最初用于解决海量结构化的日志数据统计问题。
Hive 定义了一种类似 SQL 的查询语言 (HQL), 将 SQL 转化为 MapReduce 任务在 Hadoop 上执行。通常用于离线分析。
HQL 用于运行存储在 Hadoop 上的查询语句,Hive 让不熟悉 MapReduce 开发人员也能编写数据查询语句,然后这些语句被翻译为 Hadoop 上面的 MapReduce 任务。
7.Pig (ad-hoc 脚本)#
由 yahoo! 开源,设计动机是提供一种基于 MapReduce 的 ad-hoc (计算在 query 时发生) 数据分析工具
Pig 定义了一种数据流语言 —Pig Latin,它是 MapReduce 编程的复杂性的抽象,Pig 平台包括运行环境和用于分析 Hadoop 数据集的脚本语言 (Pig Latin)。
其编译器将 Pig Latin 翻译成 MapReduce 程序序列将脚本转换为 MapReduce 任务在 Hadoop 上执行。通常用于进行离线分析。
8.Mahout(数据挖掘算法库)#
Mahout 起源于 2008 年,最初是 Apache Lucent 的子项目,它在极短的时间内取得了长足的发展,现在是 Apache 的顶级项目。
Mahout 的主要目标是创建一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。
Mahout 现在已经包含了聚类、分类、推荐引擎(协同过滤)和频繁集挖掘等广泛使用的数据挖掘方法。
除了算法,Mahout 还包含数据的输入 / 输出工具、与其他存储系统(如数据库、MongoDB 或 Cassandra)集成等数据挖掘支持架构。
9.Ambari(安装部署配置管理工具)#
Apache Ambari 的作用来说,就是创建、管理、监视 Hadoop 的集群,是为了让 Hadoop 以及相关的大数据软件更容易使用的一个 web 工具。
10. Oozie (工作流调度器)#
Oozie 是一个可扩展的工作体系,集成于 Hadoop 的堆栈,用于协调多个 MapReduce 作业的执行。它能够管理一个复杂的系统,基于外部事件来执行,外部事件包括数据的定时和数据的出现。
Oozie 工作流是放置在控制依赖 DAG(有向无环图 Direct Acyclic Graph)中的一组动作(例如,Hadoop 的 Map/Reduce 作业、Pig 作业等),其中指定了动作执行的顺序。
Oozie 使用 hPDL(一种 XML 流程定义语言)来描述这个图。
11.HBase(分布式列存数据库)#
源自 Google 的 Bigtable 论文,发表于 2006 年 11 月,HBase 是 Google Bigtable 克隆版
HBase 是一个建立在 HDFS 之上,面向列的针对结构化数据的可伸缩、高可靠、高性能、分布式和面向列的动态模式数据库。
HBase 采用了 BigTable 的数据模型:增强的稀疏排序映射表(Key/Value),其中,键由行关键字、列关键字和时间戳构成。
HBase 提供了对大规模数据的随机、实时读写访问,同时,HBase 中保存的数据可以使用 MapReduce 来处理,它将数据存储和并行计算完美地结合在一起。
12.Sqoop(数据 ETL / 同步工具)#
Sqoop 是 SQL-to-Hadoop 的缩写,主要用于传统数据库和 Hadoop 之前传输数据。数据的导入和导出本质上是 Mapreduce 程序,充分利用了 MR 的并行化和容错性。
Sqoop 利用数据库技术描述数据架构,用于在关系数据库、数据仓库和 Hadoop 之间转移数据。
13.Flume(日志收集工具)#
Cloudera 开源的日志收集系统,具有分布式、高可靠、高容错、易于定制和扩展的特点。
它将数据从产生、传输、处理并最终写入目标的路径的过程抽象为数据流,在具体的数据流中,数据源支持在 Flume 中定制数据发送方,从而支持收集各种不同协议数据。
同时,Flume 数据流提供对日志数据进行简单处理的能力,如过滤、格式转换等。此外,Flume 还具有能够将日志写往各种数据目标(可定制)的能力。
总的来说,Flume 是一个可扩展、适合复杂环境的海量日志收集系统。当然也可以用于收集其他类型数据
Flume 以 Agent 为最小的独立运行单位,一个 Agent 就是一个 JVM。单个 Agent 由 Source、Sink 和 Channel 三大组件构成
在这里插入图片描述
Source:从客户端收集数据,并传递给 Channel。
Channel:缓存区,将 Source 传输的数据暂时存放。
Sink:从 Channel 收集数据,并写入到指定地址。
14. Zookeeper(分布式协作服务)#
源自 Google 的 Chubby 论文,发表于 2006 年 11 月,Zookeeper 是 Chubby 克隆版
解决分布式环境下的数据管理问题:统一命名,状态同步,集群管理,配置同步等。
Hadoop 的许多组件依赖于 Zookeeper,它运行在计算机集群上面,用于管理 Hadoop 操作。
15.HCatalog(数据表和存储管理服务)#
HCatalog 是 Hadoop 的表和存储管理工具。它将 Hive Metastore 的表格数据公开给其他 Hadoop 应用程序。使得具有不同数据处理工具(Pig,MapReduce)的用户能够轻松在网格读写数据。HCatalog 的表抽象为用户提供了 Hadoop 分布式文件系统 (HDFS) 中数据的关系视图,并确保用户不必担心数据存储在何处或以何种格式存储 ——RCFile 格式、文本文件、SequenceFiles 或 ORC 文件。
HCatalog 像 Hive 的一个关键组件一样工作,它使用户能够以任何格式和任何结构存储他们的数据。
16.Impala(SQL 查询引擎)#
impala 是 cloudera 提供的一款高效率的 sql 查询工具,提供实时的查询效果,官方测试性能比 hive 快 10 到 100 倍,其 sql 查询比 sparkSQL 还要更加快速,号称是当前大数据领域最快的查询 sql 工具,
impala 是参照谷歌的新三篇论文(Caffeine–网络搜索引擎、Pregel–分布式图计算、Dremel–交互式分析工具)当中的 Dremel 实现而来,其中旧三篇论文分别是(BigTable,GFS,MapReduce)分别对应我们即将学的 HBase 和已经学过的 HDFS 以及 MapReduce。
impala 是基于 hive 并使用内存进行计算,兼顾数据仓库,具有实时,批处理,多并发等优点。是 CDH 平台首选的 PB 级大数据实时查询分析引擎。
17.Presto(分布式大数据 SQL 查询引擎)#
Presto 是一个开源的分布式 SQL 查询引擎,适用于交互式分析查询,数据量支持 GB 到 PB 字节。
Presto 的设计和编写完全是为了解决像 Facebook 这样规模的商业数据仓库的交互式分析和处理速度的问题。
Presto 是一个交互式的查询引擎,我们最关心的就是 Presto 实现低延时查询的原理,特点如下:
1、完全基于内存的并行计算
2、流水线
3、本地化计算
4、动态编译执行计划
5、小心使用内存和数据结构
6、类 BlinkDB 的近似查询
7、GC 控制
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: