大数据实战之理论篇(一)

一、前言

大数据技术在企业项目开发中主要涉及数据采集、数据存储数据计算三个方面:数据采集是利用采集技术将各种数据源、不同格式的数据快速采集到大数据平台。数据存储是将采集过来的数据,按照不同应用场景,使用不同技术进行存储,为数据计算做准备。数据计算可以根据数据的时效性,对存储的数据进行离线计算和实时计算,最终的计算结果可以为企业决策提供数据支撑。数据采集、数据存储和数据计算这三个方面是大数据工程师的必备技能。
本博文的主要特色是以一个完整的大数据项目为主线,涵盖Hadoop、Spark、Flink等主流大数据技术,按照大数据工程师的项目开发流程,理论与实践结合,逐步推进,使读者在学习大数据核心技术的同时,也能掌握开发大数据项目的完整流程,从而获得大数据项目开发经验。

二、大数据平台架构

file

1、数据获取

在大数据时代,数据是第一生产力,因为大数据技术的核心就是从数据中挖掘价值,那么最重要的是要有所需要的数据,而第一步需要做的就是弄清楚有什么样的数据、如何获取数据。
数据从总体上可以分为结构化数据和非结构化数据。数据的来源不同、格式不同,获取数据所使用的技术也不同。一般使用Flume、Logstash、Filebeat 等工具采集日志文件数据,适用Sqoop、Canal 等工具采集数据库中的数据。

2、数据存储

传统:将1TB数据分散存储在100个硬盘,并行读取数据,但是会出现硬件故障问题;
现在:Hadoop分布式文件系统HDFS。

3、数据处理

有了数据采集和数据存储系统,可以对数据进行处理。对于大数据处理按照执行时间的跨度可以分为:离线处理和实时处理。

  • 离线处理即批处理,用于处理复杂的批量数据,通常数据处理的时间跨度在几分钟到数小时之间。数据的批处理发展的最早,应用也最为广泛,最主要的应用场景是对数据做ETL(Extract-Transform-Load),如广电领域的收视率计算。用户收看节目的数据经过机顶盒采集上来之后,按照一定的规则将数据转换成以分钟为单位的原始数据,然后根据业务需求,按每小时、每天、每周、每月等粒度计算收视率。早期离线计算主要使用 MapReduce离线计算框架,但 MapReduce模型单一、计算速度慢、编程复杂。后来出现了 Spark内存计算框架以及Flink 实时计算框架,简化了编码,同时提升了执行效率,逐步取代了MapReduce。当然Spark和 Flink 既支持离线处理也支持实时处理,Spark Core和 Flink DataSet支持离线处理,SparkStreaming 和 Flink DataStream支持实时处理。
  • 实时处理即流处理用于处理实时数据流,通常数据处理的时间跨度在数百毫秒到数秒之间。流处理是一种重要的大数据处理手段,主要特点是其处理的数据是源源不断且实时到来的。分布式流处理是一种面向动态数据的细粒度处理模式,基于分布式内存,对不断产生的动态数据进行处理。其对数据的处理具有快速、高效、低延迟等特性,在当前企业和用户对实时性要求越来越高的情况下,流处理应用越来越广泛。前面提到的Spark Streaming和 Flink DataStream是当前比较流行的流处理模型,后续章节会详细讲解。

3、交互式分析

在实际应用中,经常需要对离线或实时处理后的历史数据,根据不同的条件进行多维分析查询并及时返回结果,这时就需要交互式分析。交互式分析是基于历史数据的交互式查询,通常的时间跨度在数十秒到数分钟之间。在大数据领域,交互式查询通常用于实时报表分析、实时大屏、在线话单查询等。
因为是查询应用,所以交互式查询通常具有以下特点。

  • 低延时。
  • 查询条件复杂。
  • 查询范围大。
  • 返回结果数据量小。
  • 并发数要求高。
  • 需要支持SQL等接口。
    传统的方式常常使用数据库做交互式查询,比如 MySQL、Oracle。随着数据量的增大,传统数据库无法支撑海量数据的处理,交互式查询采用分布式技术成为最佳的选择。大数据领域中的交互式查询,主要是基于SQL on Hadoop。SQL on Hadoop是一个泛化的概念,是指Hadoop生态圈中一系列支撑SQI接口的组件和技术。本书后续会讲解几个常见的SQL on Hadoop技术,比如Hive SQL、Spark SQL。

二、大数据平台规划

1、离线计算数据流程

file

2、实时计算数据流程

file

为者常成,行者常至