第1章 企业级大数据技术体系概述

大数据的基本概念:大数据是以容量大、类型多、存取速度快、应用价值高为主要特征的数据集集合,正快速发展为对数量巨大、来源分散、格式多样的数据进行采集、存储和关联分析,从中发现新知识、创造新价值、提升新能力的新一代信息技术和服务业态。

1.1 大数据系统产生的背景及应用场景

1.1.1 产生背景

大数据技术直接源于互联网行业。互联网行业的用户量和数据量庞大,这是大数据技术的基础。

1.1.2 常见大数据应用场景

1. 互联网领域

  • 搜索引擎
  • 推荐系统
  • 广告系统(精准投放)

    2. 电信领域

    3. 医疗领域

    4. 金融领域

  • 客户画像

  • 精准营销
  • 风险管控
  • 运营优化

    1.2 企业级大数据技术框架

    大数据尝试从海量数据中,通过一定的分布式技术手段,挖掘出有价值的信息,最终提供给用户,进而产生实用价值和商业价值。(这句话点出了大数据技术的核心:分布式。因为数据量的庞大,无法通过单机运算完成大数据的收集、存储和处理,因此需要依赖大量机器进行并行、协同处理,而这就是分布式技术。)
    从数据在信息系统中的生命周期看,大数据从数据源开始,经过分析、挖掘到最终获得价值一般需要经过6个主要环节:

  • 数据收集

  • 数据存储
  • 资源管理和服务协调
  • 计算引擎
  • 数据分析
  • 数据可视化

image.png

1.2.1 数据收集层

数据收集层由直接跟数据源对接的模块构成,负责将数据源中的数据近实时或实时收集到一起。数据源具有以下特点:

  • 分布式:数据源通常分布在不同的机器或设备上,通过网络连接在一起。
  • 异构性:数据源种类多种多样,任何能够产生数据的系统均可以称为数据源。
  • 多样化:数据的格式多种多种。
  • 流式产生:数据源如同水龙头一样,会源源不断产生数据。

由于数据源具有以上特点,将分散的数据源中的数据收集到一起是一件非常困难的事情。一个适用于大数据领域的收集系统,一般具有以下几个特点:

  • 扩展性:能够灵活适配不同的数据源
  • 可靠性:传输过程中数据不丢失
  • 安全性:对于一些敏感数据,应有机制保证收集过程中数据的安全性。
  • 低延迟

为了方便后续处理,通常建议将数据收集到一个中央化的存储系统中。

1.2.2 数据存储层

数据存储层主要负责海量的结构化与非结构数据的存储。大数据时代,要求数据存储层有以下特点:

  • 扩展性:随着数据量上升,存储系统也许扩容,需要支持线性扩展。
  • 容错性:确保机器出现故障时数据不丢失。
  • 存储模型多样:由于数据的多样性,数据存储层应支持多种数据模型。

    1.2.3 资源管理与服务协调层

    为了最大化利用资源,通常将所有应用部署到一个公共集群中,让它们共享集群资源,同时采用轻量级隔离方案对各个应用进行隔离。这就需要一个资源管理平台。

    1.2.4 计算引擎层

    在不同的应用场景下,我们对数据处理的要求是不同的。按照对时间性能的要求,可将计算引擎分为三类:

  • 批处理:该类计算引擎对时间要求最低,一般处理时间为分钟到小时级别,甚至天级别。它追求的是高吞吐率,即单位时间内处理的数据量尽可能大,典型的应用有搜索引擎构建索引、批量数据分析等。

  • 交互式处理:该类计算引擎对时间要求比较高,一般要求处理时间为秒级,这类系统需要跟人进行交互,因此会提供类SQL的语言便于用户使用,典型的应用有数据查询、参数化报表生成。
  • 实时处理:该类计算引擎对时间要求最高,一般处理延迟在秒级以内,典型的应用有广告系统、舆情监测等。

    1.2.5 数据分析层

    数据分析层直接跟用户应用程序对接,为其提供易用的数据处理工具。为了让用户分析数据更加容易,计算引擎会提供多样化的工具,包括应用程序API、类SQL查询语言、数据挖掘SDK等。

    1.2.6 数据可视化层

    1.3 企业级大数据技术实现方案

    1.3.1 Google大数据技术栈

    1.3.2 Hadoop与Spark开源大数据技术栈

    1. 数据收集层:

  • Sqoop和Canal:关系型数据收集和导入工具,是连接关系型数据库(比如MySQL)和Haddop(比如HDFS)的桥梁。Sqoop可将关系型数据库中的数据全量导入Hadoop,反之亦可。而Canal则可用于实现数据的增量导入。

  • Flume:非关系型数据收集工具。主要是流式日志数据,可近实时收集,经过滤、聚集后加载到HDFS等存储系统。
  • Kafka:分布式消息队列,一般作为数据总线使用,它允许多个数据消费者订阅并获取感兴趣的数据。相比于其他消息队列,它采用分布式高容错设计,更适合大数据应用场景。

    2. 数据存储层

  • HDFS:Hadoop分布式文件系统,是Google GFS的开源实现,具有良好的扩展性与容错性,非常适合构建在廉价机器上,大大降低了大数据存储成本。

  • HBase:构建在HDFS上的分布式数据库,Google BigTable的开源实现,允许用户存储结构化与半结构化的数据,支持行列无限扩展以及数据随机查找和删除。
  • kudu:分布式列式存储数据库,允许用户存储结构化数据,支持行无限扩展以及数据随机查找与更新。

    3. 资源管理与服务协调

  • YARN:统一资源管理与调度系统。它能够管理集群中的各种资源(比如CPU和内存等),并按照一定的策略分配给上层的各类应用。

  • Zookeeper:基于简化的Paxos协议实现的服务协调系统,它提供了类似文件系统的数据模型,允许用户通过简单的API实现leader选举、服务命名、分布式队列与分布式锁等复杂的分布式通用模块。

    4. 计算引擎层

  • MapReduce和Tez:MapReduce是一个经典的批处理计算引擎,它是Google Map Reduce的开源实现,具有良好的扩展性与容错性,允许用户通过简单的API编写分布式程序。Tez是基于MapReduce开发的DAG(Directed Acyclic Graph,有向无环图)计算引擎,能够更加高效地实现复杂的数据处理逻辑,目前应用在Hive、Pig等数据分析系统中。

  • Spark:通用的DAG计算引擎,它提供了基于RDD(Resilient Distributed Dataset)的数据抽象表示,允许用户充分利用内存进行快速的数据挖掘和分析。
  • Impala和Presto:
  • Storm和Spark Streaming:分布式流式实时计算引擎。

    5. 数据分析层

    为方便用户解决大数据问题而提供的各种数据分析工具。

  • Hive/Pig/SparkSQL:在计算引擎之上构建的支持SQL或脚本语言的分析系统,大大降低了用户进行大数据分析的门槛。其中,Hive是基于MapReduce/Tez实现的SQL引擎,Pig是基于MapReduce/Tez实现的工作流引擎,SparkSQL是基于Spark实现的SQL引擎。

  • Mahout/MLlib:在计算引擎至上构建的机器学习库,实现了常用的机器学习和数据挖掘算法。其中,Mahout最初是基于MapReduce实现的,目前正逐步迁移到Spark引擎上。MLLib是基于Spark实现的。
  • Apache Beam/Cascading:基于各类计算框架而封装的高级API,方便用户构建复杂的数据流水线。Apache Beam统一了批处理和流式处理两类计算框架啊,提供了更高级的API方便用户编写与具体计算引擎无关的逻辑代码。Cascading内置了查询优化器,能够自动优化用户实现的数据流。采用了面向tuple的数据模型,如果你的数据可表示成类似数据库行的格式,则使用Cascading处理将变得很容易。