随着云计算、大数据等名词的流行,涌现出一大批相关的技术,其中Hadoop 是较早出现的一种分布式架构,得到了大量的应用。
3.1 大数据定义
所谓大数据是这样一个数据集合,它的数据量和复杂度是传统的数据处理应用无法应对的。大数据带来的挑战包括数据分析、数据捕获、数据治理、搜索、共享、存储、传输、可视化、查询、更新和信息安全等。 “ 大数据 ” 这个术语很少指一个特定大小的数据集,它通常指的是对很大的数据应用预测分析、用户行为分析或其他的数据分析方法,从数据中提炼出有用的信息,使数据产生价值,因此大数据更像是一套处理数据的方法和解决方案。如果非要给出一个定量的标准,大数据的数据量至少是TB级别的,在当前这个信息爆炸的时代,PB别的数据量已经较为常见了。用于分析的数据量越大,分析得到的结果就越精确,基于分析结果做出的决策也就越有说服力,而更好的决策能够降低成本、规避风险、提高业务运营的效率。
大数据所包含的数据集合的大小通常超越了普通软件工具的处理能力,换句话说,普通软件没办法在一个可以容忍的时间范围内完成大数据的捕获和处理。大数据的数据量一直在飞速增长,2012年的时候,一般要处理的数据集合还只有几十TB,到现在PB甚至更大量级的数据已不新鲜。要管理如此之大的数据,需要一系列新的技术和方法,它们必须具有新的数据整合形式,从各种各样大量的复杂数据中洞察有价值的信息。
现在普遍认可的大数据是具有 4V ,即 Volume 、 Velocity 、 Variety 、 Veracity 特征的数据集合。用中文简单描述就是大、快、多、真。
-
Volume—— 生成和存储的数据量大
随着技术的发展,人们收集信息的能力越来越强,随之获取的数据量也呈爆炸式增长。例如百度每日处理的数据量达上百 PB ,总的数据量规模已经到达 EP 级。 -
Velocity—— 数据产生和处理速度快
指的是销售、交易、计量等人们关心的事件发生的频率。例如, 2015 年双十一当天,支付宝的峰值交易数为每秒 8.59 万笔。 -
Variety—— 数据源和数据种类多样
现在要处理的数据源包括各种各样的关系数据库、 NoSQL 、平面文件、 XML 文件、机器日志、图片、音视频流等,而且每天都会产生新的数据格式和数据源。 -
Veracity—— 数据的真实性和高质量
诸如软硬件异常、应用系统bug人为错误等都会使数据不正确。大数据处理中应该分析并过滤掉这些有偏差的、伪造的、异常的部分,防止脏数据损害到数据分析结果的准确性。
3.2 Hadoop 简介
Hadoop是较早用来处理大数据集合的分布式存储计算基础架构,最早由Apache软件基金会开发。利用Hadoop,用户可以在不了解分布式底层细节的情况下,开发分布
式程序,充分利用集群的威力,执行高速运算和存储。简单地说, Hadoop 是一个平台,在它之上可以更容易地开发和运行处理大规模数据的软件。
Hadoop 软件库是一个计算框架,在这个框架下,可以使用一种简单的编程模式,通过多台计算机构成的集群,分布式处理大数据集。 Hadoop 被设计成可扩展的,它可以方便地从单一服务器扩展到数千台机器,每台机器进行本地计算和存储。除了依赖于硬件交付的高可用性,软件库本身也提供数据保护,并可以在应用层做失败处理,从而在计算机集群的顶层提供高可用服务。
3.2.1 Hadoop 的构成
Hadoop 包括以下四个基本模块:
- Hadoop 基础功能库:支持其他 Hadoop 模块的通用程序包。
- HDFS :一个分布式文件系统,能够以高吞吐量访问应用的数据。
- YARN :一个作业调度和资源管理框架。
- MapReduce :一个基于 YARN 的大数据并行处理程序。
除了基本模块, Hadoop 相关的其他项目还包括:
Ambari :一个基于 Web 的工具,用于配置、管理和监控 Hadoop 集群。支持 HDFS 、 MapReduce 、 Hive 、 HCatalog 、 HBase 、 ZooKeeper 、 Oozie 、 Pig 和 Sqoop 。Ambari,如热点图等。 Ambari 以图形化的方式查看 MapReduce 、 Pig 和 Hive 应用程序的运行情况,因此可以通过对用户友好的方式诊断应用的性能问题。
- Avro :一个数据序列化系统。
- Cassandra :一个可扩展的无单点故障的 NoSQL 多主数据库。
- Chukwa :一个用于大型分布式系统的数据采集系统。
- HBase :一个可扩展的分布式数据库,支持大表的结构化数据存储。
- Hive :一个数据仓库基础架构,提供数据汇总和命令行的即席查询功能。
- Mahout :一个可扩展的机器学习和数据挖掘库。
- Pig :一个用于并行计算的高级数据流语言和执行框架
- Spark :一个处理 Hadoop 数据的、高速的、通用的计算引擎。 Spark 提供了一种简单而富于表达能力的编程模式,支持包括 ETL 、机器学习、数据流处理、图像计算等多种应用。
- Tez :一个完整的数据流编程框架,在 YARN之上建立,提供强大而灵活的引擎,执行任意的有向无环图数据处理任务,既支持批处理又支持交互式的用户场景。Tez已经被Hive、Pig等Hadoop生态圈的组件所采用,用来替代 - MapReduce 作为底层执行引擎。
- ZooKeeper :一个用于分布式应用的高性能协调服务。
3.2.2 Hadoop 的主要特点
- 扩容能力:能可靠地存储和处理 PB 级的数据。
- 成本低:可以利用廉价通用的机器组成的服务器群分发、处理数据。这些服务器群总计可达数千个节点。
- 高效率:通过分发数据, Hadoop 可以在数据所在的节点上并行地处理它们,这使得处理非常快速。
- 可靠性: Hadoop 能自动地维护数据的多份复制,并且在任务失败后能自动地重新部署计算任务。
3.2.3 Hadoop 架构
Hadoop 由通用包、 MapReduce ( MapReduce/MR1 或 YARN/MR2 )、 HDFS 所构成。通用包提供文件系统和操作系统级别的抽象,包含有必需的 Java Archive ( JAR )和启
动 Hadoop 集群所需的相关脚本。
为了有效调度任务,每一个与 Hadoop 兼容的文件系统都应该具有位置感知的功能,简单说位置感知就是知道工作节点所处的机架(准确地说是网络交换机),因此也叫机架感知。Hadoop应用能够使用这一信息执行数据所在节点上的代码。当任务失败时,在相同交换机上的节点之间进行失败切换,这会节省网络流量。HDFS使用机架感知在多个交换机的节点间复制数据,用于数据冗余。这种方法降低了机架掉电或交换机故障产生的影响,如果一个硬件出现问题,数据仍然是可用的。
一个小规模的 Hadoop 集群包含一个主节点和多个从节点(工作节点)。主节点上的进程有 Job Tracker (对应 MR2 的 Resource Manager )、 NameNode ,依据配置可能还会有 Task Tracker (对应 MR2的Node Manager )和 DataNode 。从节点或工作节点上的进程有 DataNode 和 TaskTracker ,尽管该节点可能只是一个数据工作节点,或者只是一个计算工作节点。这种架构一般只用于非标准的小型应用。
在一个大型 Hadoop 集群中, HDFS 节点通过专用的 NameNode 服务器进行管理, NameNode 服务器上保存有文件系统的索引。 Secondary NameNode 可以产生NameNode内存结构的快照,因此可以防止NameNode 文件系统损坏造成的数据丢失。类似地,也有一个独立的JobTracker服务器管理节点间的作业调度。当HadoopMapReduce运行在其他文件系统上时,HDFS的NameNode、Secondary NameNode和DataNode会被与特定文件系统相关的等价结构所代替。
3.3 Hadoop 基本组件
- HDFS : Hadoop 分布式文件系统。
- YARN :一个资源调度框架。
- MapReduce :一个分布式处理框架。
3.3.1 HDFS
HDFS 是一个运行在通用硬件设备之上的分布式文件系统。HDFS是高度容错的,在廉价的硬件上部署。HDFS提供以高吞吐量访问应用数据的能力,非常适合拥有大数据集的应用。 HDFS 放宽了一些 POSIX 的需求,允许对文件系统数据的流式访问。 HDFS 源自为 Apache Nutch Web 搜索引擎项目建立的框架,是 Apache Hadoop 的核心项目。
3.3.2 MapReduce
MapReduce 是一个分布式计算软件框架,支持编写处理大数据量( TB 以上)的应用程序。 MapReduce 程序可以在几千个节点组成的集群上并行执行。集群节点使用通用的硬件,以硬件冗余保证系统的可靠性和可用性,而 MapReduce 框架则从软件上保证处理任务的可靠性和容错性。
在 Hadoop 中每个 MapReduce 应用程序被表示成一个作业,每个作业又被分成多个任务。应用程序向框架提交一个 MapReduce作业,作业一般会将输入的数据集合分成彼此独立的数据块,然后由 map 任务以并行方式完成对数据分块的处理。框架对map的输出进行排序,之后输入到reduce任务。MapReduce作业的输入输出都存储在一个如HDFS的文件系统上。框架调度并监控任务的执行,当任务失败时框架会重新启动任务。
- 处理步骤
MapReduce 数据处理分为 Split 、 Map 、 Shuffle 和 Reduce 4 个步骤。应用程序实现 Map 和 Reduce 步骤的逻辑, Split 和 Shuffle 步骤由框架自动完成。
-
逻辑表示
MapReduce 计算模型一般包括两个重要的阶段: Map 是映射,负责数据的过滤分发; Reduce 是规约,负责数据的计算归并。 Map 函数和 Reduce 函数都是通过键/值对来操作数据的。 Map 函数将输入数据按数据的类型和一定的规则进行分解,并返回一个中间键/值对的列表。 -
应用程序定义
- 输入程序:输入程序将输入的文件分解成适当大小的 ‘splits’ (实践中典型的是 64MB 或 128MB ),框架为每一个 split 赋予一个 Map 任务。输入程序从稳定存储(一般是分布式文件系统)读取数据并生成键/值对。输入程序最常见的例子是读取一个目录下的所有文件,并将每一行作为一个记录返回。
- map 函数: map 函数处理输入的键/值对,生成零个或多个中间输入键/值对。map函数的输入与输出可以是不同的类型。例如单词计数应用,map函数分解每行的单词并输出每个单词的键/-值对。单词是键,单词的实例数是值。
分区函数:每个map函数的输出通过应用定义的分区函数分配给特定的reduce任务。分区函数的输入是键、值和reduce任务的数量,输出reduce任务的索引值。典型的分区函数是取键的哈希值,或对键的哈希值用 - reduce 任务数取模。选择适当的分区函数对于数据在 reduce 间的平均分布和负载均衡非常重要。 - 比较函数:通过应用的比较函数从 Map 运行的节点为 reduce 拉取数据并排序。
-reduce函数:框架按键的排序为每个唯一的键调用一次应用的reduce函数。reduce函数会在与键相关的多个值中迭代,然后生成零个或多个输出。例如单词计数应用,reduce函数获取到输入值,对它们进行汇总 计算,并为每个单词及其计数值生成单个输出项。 - 输出程序:输出程序负责将 reduce 的输出写入稳定存储。
- MapReduce 示例
3.3.3 YARN
YARN 是一种集群管理技术,全称是 Yet Another Resource Negotiator 。可以看到,YARN是第二代Hadoop的一个关键特性。Apache开始对YARN的描述是,为MapReduce重新设计的一个资源管理器,经过不断地发展和改进,现在的YARN更像是一个支持大数据应用的分布式操作系统.
- 第一代 Hadoop 的问题
- 可扩展性问题。 JobTracker 完成了太多的任务,造成了过多的资源消耗,当 MapReduce 作业非常多的时候,会产生很大的内存开销,同时也增加了 JobTracker 失败的风险。内存管理以及 JobTracker 中各特性的粗粒度锁问题成为可扩展性的显著瓶颈。将 JobTracker 扩展到 4000 个节点规模的集群被证明是极端困难的。
- 内存溢出问题。在 TaskTracker 端,以 MapReduce 任务的数目作为资源的表示过于简单,没有考虑到任务中 CPU 、内存的占用情况,如果几个大内存消耗的任务被调度到了一起,很容易出现内存溢出问题。
- 可靠性与可用性问题。JobTracker失败所引发的中断,不仅仅是丢失单独的一个作业,而是会丢失集群中所有的运行作业,并且要求用户手动重新提交并恢复他们的作业。从操作的角度来看, MapReduce框架在发生任何变化时(如修复缺陷、性能提升或增加特性),都会强制进行系统级别的升级更新。操作员必须协调好集群停机时间,关掉集群,部署新的二进制文件,验证升级,然后才允许提交新的作业。任何停机都会导致处理的积压,当作业被重新提交时,它们会给JobTracker造成明显的压力。更糟的是,升级强制让分布式集群系统的每一个客户端同时更新。这些更新会让用户为了验证他们之前的应用程序是否适用于新的 Hadoop 版本而浪费大量时间。
- 资源模型问题。在 TaskTracker 端,把资源强制划分为 map 任务槽位和 reduce 任务槽位, map 和 reduce 的槽位数量是配置的固定值,因此闲置的 map 资源无法启动reduce任务,反之亦然。当系统中只有 map 任务或只有 reduce 任务的时候,也会造成资源的浪费。
-
YARN 架构
3.4 Hadoop 生态圈的其他组件
3.5 Hadoop 与数据仓库
3.5.1 关系数据库的可扩展性瓶颈
关系数据库的可扩展性一直是数据库厂商和用户最关注的问题。从较高的层次看,可扩展性就是能够通过增加资源来提升容量,并保持系统性能的能力。可扩展性可分为向上扩展( Scale up )和向外扩展( Scale out )。
向上扩展有时也称为垂直扩展,它意味着采用性能更强劲的硬件设备,比如通过增加 CPU 、内存、磁盘等方式提高处理能力,或者购买小型机或高端存储来保证数据库系统的性能和可用性。无论怎样,向上扩展还是一种集中式的架构。也就是说,数据库系统运行在一台硬件设备上,要做的就是不断提高这台设备的配置以加强性能。
3.5.2 CAP 理论
- Consistency (一致性):所有节点上的数据时刻保持同步。
- Availability (可用性):每个请求都能接收到一个响应,无论响应成功或失败。
- Partition tolerance (分区容错性):系统应该能持续提供服务,无论网络中的任何分区失效。
3.5.3 Hadoop 数据仓库工具
1 . RDS 和 TDS
RDS 是原始数据存储,其数据是从操作型系统抽取而来。它有两个作用,一是充当操作型系统和数据仓库之间的过渡区,二是作为细节数据查询的数据源。
TDS 是转换后的数据存储,也就是数据仓库,用于后续的多维分析或即席查询。这两类数据逻辑上分开,物理上可以通过在 Hive 上建立两个不同的数据库来实现,最终所有数据都被分布存储到 HDFS 上。
2 .抽取过程
这里的抽取过程指的是把数据从操作型数据源抽取到 RDS 的过程,这个过程可能会有一些数据集成的操作,但不会做数据转换、清洗、格式化等工作。
Hadoop 生态圈中的主要数据摄取工具是 Sqoop 和 Flume 。
Sqoop 被设计成支持在关系数据库和 Hadoop 之间传输数据。
Flume 被设计成基于流的数据捕获,主要是从日志文件中获取数据。
使用这两个工具可以完成数据仓库的抽取。如果数据源是普通的文本和 CSV 文件,抽取过程将更加简单,只需用操作系统的 scp 或 ftp 命令将文件拉取到 Hadoop 集群的任一节点,然后使用 HDFS 的 put 命令将已在本地的文件上传到 HDFS ,或者使用 Hive 的 load data 将文件装载进表里就可以了。
3 .转换与装载过程
转换与装载过程是将数据从 RDS 迁移到 TDS 的过程,期间会对数据进行一系列的转换和处理。经过了数据抽取步骤,此时数据已经在 Hive 表中了,因此 Hive 可以用于转换和装载。
Hive 实际上是在 MapReduce 之上封装了一层 SQL 解释器,这样可以用类 SQL 语言书写复杂的 MapReduce 作业。 Hive 不但提供了丰富的数据查询功能和分析函数,还可以在某些限制下进行数据的行级更新,因此支持 SCD1 (渐变维的一种处理类型)。在第 8 章中将详细介绍如何使用 Hive 进行数据的转换与装载。
4 .过程管理和自动化调度
ETL 过程自动化是数据仓库成功的重要衡量标准,也是系统易用性的关键。
Hadoop 生态圈中的主要管理工具是 Falcon 。 Falcon 把自己看作是数据治理工具,能让用户建立定义好的 ETL 流水线。除 Falcon 外,还有一个叫做 Oozie 的工具,它是一个Hadoop 的工作流调度系统,可以使用它将 ETL 过程封装进工作流自动执行。
5 .数据目录
数据目录存储的是数据仓库的元数据,主要是描述数据属性的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。
Hadoop 生态圈中主要的数据目录工具是 HCatalog 。 HCatalog 是 Hadoop 上的一个表和存储管理层。使用不同数据处理工具(如 Pig 、 MapReduce )的用户,通过HCatalog可以更加容易地读写集群中的数据。
HCatalog引入“表”的抽象,把文件看做数据集。它展现给用户的是一个HDFS上数据的关系视图,这样用户不必关心数据存放在哪里或者数据格式是什么等问题,就可以轻松知道系统中有哪些表,表中都包含什么。
HCatalog 默认支持多种文件格式的读写,如 RCFile 、 SequenceFiles 、 ORC files 、 text files 、 CSV 、 JSON 等。
6 .查询引擎和SQL层
查询引擎和 SQL 层主要的职责是查询和分析数据仓库里的数据。由于最终用户经常需要进行交互式的即席查询,并随时动态改变和组合他们的查询条件,因此要求查询引擎具有很高的查询性能和较短的响应时间。
Hadoop 生态圈中的主要 SQL 查询引擎有基于 MapReduce 的 Hive 、基于 RDD 的 SparkSQL 和 Cloudera 公司的 Impala 。
Hive可以在四种主流计算框架的三种,分别是 Tez 、MapReduce 和 Spark (还有一种是 Storm )上执行类 SQL 查询。
SparkSQL 是 Hadoop 中另一个著名的 SQL引擎,它实际上是一个Scala程序语言的子集。正如SparkSQL这个名字所暗示的,它以Spark 作为底层计算框架。
Impala 是 Cloudera 公司的查询系统,它提供 SQL 语义,最大特点是速度快,主要用于 OLAP 。
7 .用户界面
数据分析的结果最终要以业务语言和形象化的方式展现给用户,只有这样才能取得用户对数据仓库的认可和信任。因此具有良好体验的用户界面是必不可少的。数据仓库的最终用户界面通常是一个 BI 仪表盘或类似的一个数据可视化工具提供的浏览器页面。
Hadoop 生态圈中比较知名的数据可视化工具是 Hue 和 Zeppelin 。 Hue 是一个开源的 Hadoop UI 系统,最早是由 Cloudera Desktop 演化而来,它是基于 Python Web 框架 Django 实现的。通过使用 Hue 我们可以在浏览器端的 Web 控制台上与 Hadoop 集群进行交互来分析处理数据,还可以用图形化的方式定义工作流。 Hue 默认支持的数据源有 Hive 和Impala 。 Zeppelin 提供了 Web 版的 notebook ,用于做数据分析和可视化。Zeppelin默认只支持SparkSQL。可以看到,普通数据仓库的8个组成部分都有相对应的Hadoop组件作为支撑。Hadoop生态圈中众多工具提供的功能,完全可以满足创建传统数据仓库的需要。使用Hadoop 建立数据仓库不仅是必要的,而且是充分的。
3.6 小结
- 现在普遍认可的大数据是具有 4V ,即 Volume 、 Velocity 、 Variety 、 Veracity 特征的数据集合,用中文简单描述就是大、快、多、真。
- Hadoop 是一个分布式系统基础架构,它包括四个基本模块:
- Hadoop 基础功能库,支持其他 Hadoop 模块的通用程序包。
- HDFS,一个分布式文件系统,能够以高吞吐量访问应用的数据。
- YARN ,一个作业调度和资源管理框架。
- MapReduce ,一个基于 YARN 的大数据并行处理程序。
- Spark 是另一个流行的分布式计算框架,其基本数据结构是RDD,它提供一种分布式共享内存的受限形式。可以利用RDD方便地实现迭代算法,相对于MapReduce的实现,Spark应用的延迟可以降低几个数量级。 Spark RDD API 支持的语言包括 Java 、 Python 、 Scala 和 R 。
- CAP 理论指的是任何一个分布式计算系统都不能同时保证数据一致性、可用性和分区容错性。这也是传统关系型数据库难以扩展的根本原因。
- Hadoop 生态圈中众多工具提供的功能,完全可以满足创建传统数据仓库的需要。使用 Hadoop 建立数据仓库不仅是必要的,而且是充分的。
网友评论