大数据离线计算的架构与组件

时间:2024-02-23 07:58:07

            大数据离线计算的架构与组件

                                     作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

 

一.什么是大数据离线计算

1>.大数据离线计算概述

  (1)所谓大数据离线计算,就是利用大数据的技术栈(主要是Hadoop),在计算开始前准备好所有输入数据,该输入数据不会产生变化,且在解决一个问题后就要立即得到计算结果的计算模式。

  (2)离线(offline)计算也可以理解为批处理(batch)计算,与其相对应的是在线(online)计算或实时(realtime)计算

2>.离线计算的特点

  (1)数据量巨大,保存时间长

  (2)在大量数据上进行复杂的批量运算

  (3)数据在计算之前已经完全到位,不会发生变化

  (4)能够方便地查询计算结果 

3>.大数据离线计算应用场景

(1)大数据离线计算主要用于数据分析、数据挖掘等领域。我们说这部分的技术栈主要是Hadoop,但在以Hadoop为代表的大数据技术出现之前,数据分析、数据挖掘已经经历了长足的发展。尤其以BI系统为主的数据分析领域,已经有了比较成熟稳定的技术方案和生态系统。

(2)BI(全称为Business Intelligence,即商业智能)系统能够辅助业务经营决策。其需要综合利用数据仓库(基于关系型数据库)、联机分析处理(OLAP)工具(如各种SQL)和数据挖掘等技术。

(3)如Oracle、IBM、Microsoft等数据库厂商都有自己的BI产品,MicroStrategy、SAP等独立BI厂商也有自己的软件产品。

4>.传统BI暴漏的问题

然而传统BI随着时间的推移暴露出一些问题:
    (1)BI系统以分析业务系统产生的结构化数据为主,对非结构化和半结构化数据处理困难,如文本、图片、音视频等。
    (2)由于数据仓库为结构化存储,在数据从其它系统进入数据仓库前需要一个ETL过程,ETL通常和业务强绑定,需要专门的人员去做这个工作。
    (3)当数据量增大的时候,性能会成为瓶颈,传统关系型数据库在TB级别时已经表现得吃力,在PB级别时基本无能为力。
    (4)数据库的设计一般会遵循某种范式,其着力于解决数据冗余和一致性问题。但数据仓库设计时为了性能和方便的考虑,通常会使用一些反范式的设计。如何在范式和反范式间权衡没有确定的标准,需要小心设计。
    (5)对于包含机器学习应用的BI系统,由于ETL的存在,其获取到的数据为已经按某种假设清洗后的数据,会造成机器学习的效果不理想或完全没有效果。

5>.大数据离线计算的优势

针对这一系列问题,以Hadoop为代表的大数据解决方案表现出其优越性,Hadoop技术栈中的各种组件不断丰富,已经完全能实现传统BI的功能,并解决了其容量和性能的瓶颈。

但大数据技术也带来了一些新问题:   从传统数据仓库升级到大数据的数据仓库,不可能平滑演进,基本等于重新开发。这和软硬件架构的不一致、SQL方言的差异都有关系。   大数据解决方案在功能和性能上有很多取舍,如HDFS不支持修改文件,Hive要支持update和delete的话有非常苛刻的限制且效率也远低于关系型数据库。类似这些都是大数据解决方案的局限性。
大数据离线计算侧重于从以下几个维度解决传统BI面临的瓶颈:   分布式存储:
    将大文件按照一定大小拆分成多份,分别存储到独立的机器上,并且每一份可以设置一定的副本数,防止机器故障导致数据丢失,这种存储方式比传统关系型数据库
/数据仓库使用的集中式存储,无论是容量、价格、吞吐率、鲁棒性等各方面都有明显优势。   分布式计算:
    核心思想是让多个机器并行计算,并通过对数据本地性的利用,尽量处理本机器上的那一部分数据,减少跨网络的数据传输。很多传统的数据库
/数据仓库也支持利用多核CPU、集群技术来进行分布式计算,但Hadoop的分布式计算架构更为彻底。   检索和存储的结合:
    在早期的大数据组件中,存储和计算相对比较单一,但目前的方向是对存储进一步优化,ᨀ升查询和计算的效率,其方法是除了存储数据的内容外,还存储很多元数据信息,如数据的schema、索引等。类似parquet、kudu等技术都是利用了这种思想。

   

二.大数据离线计算的架构

 

 

三.大数据离线计算涉及组件

1>.HDFS

HDFS
  是Hadoop上的分布式文件系统。

HDFS采用主从模式,其架构主要包含NameNode,DataNode,Client三个部分:   NameNode:     用于存储、生成文件系统的元数据。运行一个实例,因此需要解决单点故障问题。
  DataNode:
    用于存储实际的数据,并将自己管理的数据块信息上报给NameNode,运行多个实例。一个数据默认存储3副本,分布在3个不同的DataNode上以保证可用性。
  Client:
    支持使用者读写HDFS,从NameNode、DataNode获取元数据或实际数据返回给使用者。可以有多个实例,和业务一起运行。

2>.MapReduce on 

 

MapReduce是Googleᨀ出的一种并行计算框架:
  Map:
    映射,对一些独立元素组成的列表的每一个元素进行指定的操作。每个元素都是被独立操作的,而原始列表没有被更改。Map操作是可以高度并行的,这对高性能应用以及并行计算领域的需求非常有用。   Reduce:
    化简,对一个列表的元素进行适当的合并,虽然它不如Map那么并行,但是因为化简总是有一个简单的答案,大规模的运算相对独立,所以化简函数在高度并行环境下也很有用。   适合:
    大规模数据集的离线批处理计算;任务分而治之,子任务相对独立。   不适合:
    实时的交互式计算,要求快速响应和低延迟,比如BI;流式计算、实时分析,比如广告点击计算;子任务之间相互依赖的迭代计算。

3>.YARN

Yarn是Hadoop2.0后的资源管理系统,它是一个通用的资源管理模块,可为各类应用程序进行资源管理和调度
  
Yarn是轻量级弹性计算平台,除了MapReduce框架,还可以支持其他框架,比如Spark、Storm等
多种框架统一管理,共享集群资源:   资源利用率高   运维成本低   数据共享方便

4>.Hive

 

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并ᨀ供类SQL的查询功能。其基本原理是将HQL语句转换成MapReduce任务。

Impala是一个MPP架构的大数据分析引擎,提供交互式、即时SQL查询能力。其大多数语法和Hive相同或类似,元数据也使用Hive的,因此可以直接操作Hive表。

5>.Hue

 

Hue(Hadoop User Experience)是一个开源的Apache Hadoop UI系统,由Cloudera Desktop演化而来,它是基于Python Web框架Django实现的。

通过Hue可以:   SQL编辑,支持Hive、Impala、SparkSQL和各种关系型数据库   管理Hadoop和Spark任务   HBase数据的查询和修改
  Sqoop任务的开发和调试
  管理Oozie的工作流
  其他功能,例如浏览HDFS,浏览zookeeper……

6>.Sqoop

 

  Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以在关系型数据库(Mysql,Oracle,Postgre等)和Hadoop(Hive,HBase)等间双向互导
  通过MapReduce实现,因此是批量的、非实时的。如果需要实时,可以考虑Flume、StreamSets等解决方案
  易用性较差
  一些ETL工具也能实现Sqoop的功能,例如Kettle

7>.Oozie

 

Oozie是一个基于工作流引擎的服务器,可以在上面运行Hadoop的MapReduce、Pig等任务。它运行于web容器中(如tomcat)
  Oozie使用关系型数据库存储:工作流定义;当前运行的工作流实例,包括实例的状态和变量
  Oozie工作流是放置在控制依赖DAG中的一组动作,其中指定了动作执行的顺序。使用hPDL(一种XML流程定义语言)来᧿述这个图。

8>.其他组件

Flume、StreamSets:这两个组件都是用作数据采集的,在离线计算中当然可以用,例如将数据从外部数据源采集到HDFS。但它们更多的应用场景是在实时计算中,用于数据流的一部分.
  Kafka:
    是一种消息队列,同样地也可以用于离线计算和实时计算中,也是数据流的一部
。   HBase:
    是一种面向列的数据存储,可以ᨀ供类似OLTP数据库的即席查询能力,也能依靠另一个组件Phoenix来提供SQL形式的查询能力。其在离线计算中也可以作为数据存储使用,但鉴于其设计理念并非用于批量的数据分析场景,我们将其放入实时计算运维
/开发的课程中。   Spark:
    本质上其既可以用于离线的批量计算,又可以用于在线的实时计算(通过SparkStreamingᨀ供的微批能力),因为其非常重要,涉及的知识点又较多。