ETL

03 Hadoop 生态圈与数据仓库

2019-12-18  本文已影响0人  Youngmon

随着云计算、大数据等名词的流行,涌现出一大批相关的技术,其中Hadoop 是较早出现的一种分布式架构,得到了大量的应用。

3.1 大数据定义

所谓大数据是这样一个数据集合,它的数据量和复杂度是传统的数据处理应用无法应对的。大数据带来的挑战包括数据分析、数据捕获、数据治理、搜索、共享、存储、传输、可视化、查询、更新和信息安全等。 “ 大数据 ” 这个术语很少指一个特定大小的数据集,它通常指的是对很大的数据应用预测分析、用户行为分析或其他的数据分析方法,从数据中提炼出有用的信息,使数据产生价值,因此大数据更像是一套处理数据的方法和解决方案。如果非要给出一个定量的标准,大数据的数据量至少是TB级别的,在当前这个信息爆炸的时代,PB别的数据量已经较为常见了。用于分析的数据量越大,分析得到的结果就越精确,基于分析结果做出的决策也就越有说服力,而更好的决策能够降低成本、规避风险、提高业务运营的效率。
大数据所包含的数据集合的大小通常超越了普通软件工具的处理能力,换句话说,普通软件没办法在一个可以容忍的时间范围内完成大数据的捕获和处理。大数据的数据量一直在飞速增长,2012年的时候,一般要处理的数据集合还只有几十TB,到现在PB甚至更大量级的数据已不新鲜。要管理如此之大的数据,需要一系列新的技术和方法,它们必须具有新的数据整合形式,从各种各样大量的复杂数据中洞察有价值的信息。
现在普遍认可的大数据是具有 4V ,即 Volume 、 Velocity 、 Variety 、 Veracity 特征的数据集合。用中文简单描述就是大、快、多、真。

  1. Volume—— 生成和存储的数据量大
    随着技术的发展,人们收集信息的能力越来越强,随之获取的数据量也呈爆炸式增长。例如百度每日处理的数据量达上百 PB ,总的数据量规模已经到达 EP 级。

  2. Velocity—— 数据产生和处理速度快
    指的是销售、交易、计量等人们关心的事件发生的频率。例如, 2015 年双十一当天,支付宝的峰值交易数为每秒 8.59 万笔。

  3. Variety—— 数据源和数据种类多样
    现在要处理的数据源包括各种各样的关系数据库、 NoSQL 、平面文件、 XML 文件、机器日志、图片、音视频流等,而且每天都会产生新的数据格式和数据源。

  4. Veracity—— 数据的真实性和高质量
    诸如软硬件异常、应用系统bug人为错误等都会使数据不正确。大数据处理中应该分析并过滤掉这些有偏差的、伪造的、异常的部分,防止脏数据损害到数据分析结果的准确性。

3.2 Hadoop 简介

Hadoop是较早用来处理大数据集合的分布式存储计算基础架构,最早由Apache软件基金会开发。利用Hadoop,用户可以在不了解分布式底层细节的情况下,开发分布
式程序,充分利用集群的威力,执行高速运算和存储。简单地说, Hadoop 是一个平台,在它之上可以更容易地开发和运行处理大规模数据的软件。
Hadoop 软件库是一个计算框架,在这个框架下,可以使用一种简单的编程模式,通过多台计算机构成的集群,分布式处理大数据集。 Hadoop 被设计成可扩展的,它可以方便地从单一服务器扩展到数千台机器,每台机器进行本地计算和存储。除了依赖于硬件交付的高可用性,软件库本身也提供数据保护,并可以在应用层做失败处理,从而在计算机集群的顶层提供高可用服务。

3.2.1 Hadoop 的构成

Hadoop 包括以下四个基本模块:

除了基本模块, Hadoop 相关的其他项目还包括:
Ambari :一个基于 Web 的工具,用于配置、管理和监控 Hadoop 集群。支持 HDFS 、 MapReduce 、 Hive 、 HCatalog 、 HBase 、 ZooKeeper 、 Oozie 、 Pig 和 Sqoop 。Ambari,如热点图等。 Ambari 以图形化的方式查看 MapReduce 、 Pig 和 Hive 应用程序的运行情况,因此可以通过对用户友好的方式诊断应用的性能问题。

3.2.2 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 基本组件

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的文件系统上。框架调度并监控任务的执行,当任务失败时框架会重新启动任务。

  1. 处理步骤
    MapReduce 数据处理分为 Split 、 Map 、 Shuffle 和 Reduce 4 个步骤。应用程序实现 Map 和 Reduce 步骤的逻辑, Split 和 Shuffle 步骤由框架自动完成。
  1. 逻辑表示
    MapReduce 计算模型一般包括两个重要的阶段: Map 是映射,负责数据的过滤分发; Reduce 是规约,负责数据的计算归并。 Map 函数和 Reduce 函数都是通过键/值对来操作数据的。 Map 函数将输入数据按数据的类型和一定的规则进行分解,并返回一个中间键/值对的列表。

  2. 应用程序定义

  1. MapReduce 示例

3.3.3 YARN

YARN 是一种集群管理技术,全称是 Yet Another Resource Negotiator 。可以看到,YARN是第二代Hadoop的一个关键特性。Apache开始对YARN的描述是,为MapReduce重新设计的一个资源管理器,经过不断地发展和改进,现在的YARN更像是一个支持大数据应用的分布式操作系统.

  1. 第一代 Hadoop 的问题
  1. YARN 架构


3.4 Hadoop 生态圈的其他组件

3.5 Hadoop 与数据仓库

3.5.1 关系数据库的可扩展性瓶颈

关系数据库的可扩展性一直是数据库厂商和用户最关注的问题。从较高的层次看,可扩展性就是能够通过增加资源来提升容量,并保持系统性能的能力。可扩展性可分为向上扩展( Scale up )和向外扩展( Scale out )。
向上扩展有时也称为垂直扩展,它意味着采用性能更强劲的硬件设备,比如通过增加 CPU 、内存、磁盘等方式提高处理能力,或者购买小型机或高端存储来保证数据库系统的性能和可用性。无论怎样,向上扩展还是一种集中式的架构。也就是说,数据库系统运行在一台硬件设备上,要做的就是不断提高这台设备的配置以加强性能。

3.5.2 CAP 理论

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 小结

上一篇下一篇

猜你喜欢

热点阅读