How Big Data Works
一、本文目的
让不了解大数据后台开发的数据产品人员迅速建立起大数据方面的基本认识,了解各个常用组件的关键特性和使用场景。
二、大数据的定义
在 2001 年左右,高德纳(Gartner)就大数据提出了如下定义(目前仍是关于大数据的权威解释)大数据指高速 (Velocity)涌现的大量 (Volume)的多样化 (Variety) 数据。在过去几年里,大数据的定义又新增加了两个"五”:价值 (Value)和真实性(准确性)。这就是大数据的 5V 特性
三、大数据的特点
1、大量(Volume)
规模庞大,采集、存储和计算的量都非常大。
2、多样化(Variety)
种类和来源多样化,包括结构化和非结构化数据,对数据的处理能力提出了更高的要求
3、高速(Velocity)
数据增长速度快,时效性要求高,比如搜索引擎要求几分钟前的新闻能够被用户查询到,性化推荐要求实时完成推荐。
4、价值(Value)
数据价值密度相对较低,浪里淘沙却又弥足珍贵,需要使用适当的方法挖掘其价值。
5、真实性(Veracity)
数据的准确性和可信赖度,只有真实、可靠的数据才有意义。
四、以 Hadoop 为代表的生态系统
1、Hadoop
Hadoop 生态系统起源于 Google 在 2004 年前后发表的三篇论文,也就是我们经常说到的"三驾马车”:
i.分布式文件系统 GFS
ii.大数据分布式计算框架 MapReduce
iii.NoSQL 数据库系统 BigTable
Google 的思路是部署一个大规模的服务器集群,通过分布式的方式将海量数据存储在这个集群上,然后利用集群上的所有机器进行数据计算。
两年后的 2006 年,Lucene 开源项目的创始人 Doug Cutting 根据“三驾马车”初步实现了 Hadoop,主要包括 Hadoop 分布式文件系统 HDFS 和大数据计算引擎 MapReduce.Hadoop 能将大规模的数据和计算集群连接到一起,轻松处理 TB 甚至 PB 级别的()结构化数据,解决了单机数据库无法解决的问题。但 Hadoop 相比数据库来说使用门槛高,需要实现 MapReduce 函数,大部分开发人员最熟悉的还是传统的关系型数据库。
2、Pig/Hive
为了让熟悉数据库的数据分析师和工程师无门槛使用 Hadoop,先后出现了 Pig 和 Hive.2006 年雅虎开发了 Pig,它是一种类 SQL 的脚本语言,Pig 经过编译后会生成 MapReduce 程序在 Hadoop 上运行。Pig 的缺点是语法与 SQL 并不一样,有学习成本,近年未见使用.
2007 年 Facebook 提出了 Hive,它可以将结构化的数据文件映射为一张数据库表,提供简单的 SQL 查询功能,并将 SQL 语句转换为 MapReduce 任务进行运行,十分适合数据的统计分析。但是 Hive 效率低,不能用于非结构化的数据,自动生成的 MapReduce 作业不够智能化,调优困难。
Tez 是一个构建于 YARN 之上的支持复杂的 DAG 任务的数据处理框架。它由 Hontonworks 开源,它把 mapreduce 的过程拆分成若干个子过程,同时可以把多个 mapreduce 任务组合成一个较大的 DAG 任务,减少了 mapreduce 之间的文件存储,同时合理组合其子过程从而大幅提升 MapReduce 作业的性能,Hive on Tez 是 Hive 的一种优化手段,然而由于竟品较多,该引警并不流
3、Yarn
在 Hadoop 早期,MapReduce 既是一个执行引擎,又是一个资源调度框架,服务器集群的资源调度管理由 MapReduce 自己完成。但是这样不利于资源复用,也使得 MapReduce 非常臃肿。于是一个新项目启动了,将 MapReduce 执行引擎和资源调度分离开来,这就是 Yarn。2012 年,Yarn 成为一个独立的项目开始运营,随后被各类大数据产品支持,成为大数据平台上主流的资源调度系统之一。
4、Spark
Hadoop 会将中间结果写入磁盘,并且每执行一次 Map 和 Reduce 都需要重新启动作业,对于多次迭代计算,性能会非常差,再加上内存成本逐渐降低,2012 年 UC 伯克利 AMP 实验室开发的 Spark 开始崭露头角。Spark 是一种基于内存的快速、通用、可扩展的大数据分析引擎,支持流式计算和图计算。Spark 的优点如下
i.运算的中间数据存放在内存,迭代计算效率高
ii,容错性高,可以通过计算流程来重建部分计算
iii.更加通用,支持流式计算、图计算和机器学习框架等
5、Shark/Spark SQL
起初,为了降低使用门槛,Spark 推出了 Shark。shark 是构建在 Spark 和 Hive 基础之上的查询工具,它能够将 SQL 转换为 Spark 任务进行分布式计算,性能比 Hive 高很多,但 shark 对 Hive 的依赖太多,制约了 Spark 各个组件的相互集成。所以 Spark 提出了 SparksOL.
Spark SQL 摆脱了对 Hive 的依赖,支持 Hive 等多种数据源,具有很好的组件扩展性,支持多种性能优化技术,是 Spark 查询利器.
6、Hadoop 生态体系逐渐形成
随后,众多 Hadoop 周边产品开始出现,大数据生态体系逐渐形成,其中包括: 专门将关系数据库中的数据导入导出到 Hadoop 平台的 Soop; 针对大规模日志进行分布式收集、聚合和传输的 Flume: MapReduce 工作流调度引警 Oozie 等。
7、Amazon S3
S3 是 Simple Storage Service 的缩写,即简单存储服务,届于对象存储系统(ObjectStorage System),对外表现为一个个的桶(bucket),通俗一点就是网盘,OBS 可以认为是华头版的 S3。
8、HDFS
HDFS (Hadoop Distributed File System) 是一个开源的分布式文件系统,对外接口表现为一棵文件目录树,开发语言是 JAVA.数据默认 3 备份,是一个高度容错性的系统。适合部署在大量廉价 PC 上,能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS 为 Hadoop 其他组件提供存储支持。
五、大数据消息中间件与流处理系统
1、无界和有界数据
任何类型的数据都可以形成一种事件流。信用卡交易、传感器测量、机器日志、网站或移动应用程序上的用户交互记录,所有这些数据都形成一种流。数据可以被作为无界或者有界流来处理。
a.无界流 有定义流的开始,但没有定义流的结束。它们会无休止地产生数据。无界流的数据必须持续处理,即数据被摄取后需要立刻处理。我们不能等到所有数据都到达再处理,因为输入是无限的,在任何时候输入都不会完成。处理无界数据通常要求以特定顺序摄取事件,例如事件发生的顺序,以便能够推断结果的完整性
b.有界流 有定义流的开始,也有定义流的结束。有界流可以在摄取所有数据后再进行计算。有界流所有数据可以被排序,所以并不需要有序摄取。有界流处理通常被称为批处理。
Hadoop 只能处理有界数据,属于离线计算框架。而对应无界数据,则属于实时计算框架与下文中的流式/实时处理,流式/实时计算含义相同。
2、Kafka 消息中间件
由于大数据来源多样,不同来源的数据可能需要汇总到一起分析,传统的文件系统无法满足需要,Kafka 作为一种分布式的、高可靠、高吞吐、可伸缩、基于发布/订的消息系统,是个完备的分布式消息引擎解决方案,是大数据时代数据管道技术的首选
![](https://static001.geekbang.org/infoq/13/138795fbdee87a81cff76dedf1c648f1.png)
3、Storm
Storm 是 Twitter 开源的分布式实时大数据处理框架,它的出现令持续不断的无界数据计算变得容易,弥补了 Hadoop 批处理所不能满足的实时要求。支持毫秒级的实时处理。
4、Spark Streaming
Spark Streaming 是 Spark 核心 API 的一个扩展,可以对多种数据源(如 Kafka 和 TCP 套接字) 进行类似 Map、Reduce 和 Join 等复杂操作,根据一定的时间间隔将数据拆分成一批批的数据,实现高吞吐量的、具备容错机制的实时流数据的处理,将结果保存到外部文件系统、数据库或应用到实时仪表盘。
5、Flink
Spark Streaming 受限于微批次处理模型,很难实现真正意义上的实时计算,Flink 是个面向数据流处理和批量数据处理的开源的可分布式的有状态的计算框架,能够支持流处理和批处理两种应用类型,是一款真正的批流一体的计算引擎
六、大数据数据库系统
1、经典 MPP 数据库架构
MPP 架构是将任务并行的分散到多个服务器和节点上,在每个节点上计算完成后将各自部分的结果汇总在一起得到最终的结果。采用 MPP 架构的数据库称为 MPP 数据库。
![](https://static001.geekbang.org/infoq/0a/0a21288107697fca9fa195308c3185bc.png)
MPP 架构下,先由"Leader"将 SOL 进行解析,对查询计划进行切片,然后将分片提本到集群的数据结点中进行执行,整个执行计划以 pipeline 的方式执行,最后由"Leader"汇总结果并输出
2、常见 MPP 架构数据库/数据引擎
2.1、ClickHouse
ClickHouse 是一款 2016 年开源的列式数据库,由 C++开发,它的社区非常活跃,支持 SQL 查询,支持对表定义主键并排序,可以添加索引,主要用于快速地对大量数据进行分组统计类查询。可以秒级处理上百亿行的数据,支持处理包含大量字段的表,ClickHouse 已经在国内外大量部署,是当前非常热门的主流数据库之一
像 Mysql、Oracle 等行式数据库,是把同一行的数据放到相邻同一数据块种,而列式存储是把同一列的数据放到一起压缩,这样在进行计算类查询时,可以大大减少 IO,返回结果更快。
2.2 lmpala
一款 MPP 架构的查询引擎,由 C++开发,可以运行于 Hadoop 集群之上.性能一般,因此除少量专门优化过的基于 lmpala 的二次开发系统外,使用越来越少。
2.3 Presto
一款 MPP 架构的查询引擎,支持 HDFS,S3,SQL 数据库等多种数据源,使用 JAVA 开发,对于普通查询,Presto 与 Spark Sgl 查询性能接近,没有数量级的差异。
3、OLTP 型数据系统
3.1 BigTable
Bigtable 是一个分布式的 Key-Value 数据库,由 Google 开发,不开源,只有论文描述. 它的出现主要是因为传统的关系型数据库在面对大量数据(PB 级别)时不具有扩展性,具有高可靠、高性能、可伸缩等特性,能可靠地处理 PB 级的海量数据。自身不存储数据,数据存储于 GFS 上。
一个 Bigtable 是一个稀疏的、分布式的、持久化的、多维度的有序 Map。这个 Map 通过行键 (row key) ,列键 (column key) 和时间戳来进行素引 Bigtable 提供了单行事务的支持,包括单行的 read-update-write 及单行多列的事务性。
3.2 HBase
HBase 是一套开源分布式 Key-Value 系统,使用 Java 开发是 BigTable 的开源实现,HBase 的事务模型也与 BigTable 一脉相承,仅支持行级别的事务。是 Hadoop 项目的一部分,运行于 HDFS 文件系统上,为 Hadoop 提供类似于 BigTable 规模的服务。目前国内使用较多。
3.3 Cassandra
Cassandra 是一套开源分布式数据库系统,它使用了 BigTable 的数据模型和 Dynamo 的分布式架构,将数据直接存于本地,不依赖第三方存储,写入速度大于读取速度,支持轻量级的事务。
七、大数据的常见工作流程
上文介绍了可满足数据处理的各种工具,不仅能够收集并存储更大的数据集,还能对其进行分析,以发掘有价值的信息。在大多数情况下,大数据处理包含一种常见的数据流 - 从收集原始数据到使用可付诸行动的信息。
1、数据采集和传输
数据采集是大数据生命周期的第一个环节。大数据采集的数据类型包括文本、声音、图片视频,等多种结构化或非结构化原始数据。以互联网行业为例,常用采集方法有: App 及 Web 埋点、关系数据库抓取、服务端日志上传、传感器采集、爬虫,采集的内容有: 业务数据、内容数据、行为数据、行业专有数据。大数据采集的主要挑战有并发高、脏数据多。
a.常见的非关系型数据采集了具: Flume、 Fluentd、Logstach
b.常见的关系型数据采集工具: Datax、Sqoop、Canal
c.常见的爬虫工具: Nutch、Scrapy
2、数据存储
大数据存情面向海量、异构、结构化、半结构化、非结构化等数据,提供高性能、高可靠的存储和访问能力。针对大部分数据价值密度低的特点,大量采用开源、硬件成本低的技术。数据存情的挑战有扩展性、访问的并发性、数据的一致性等。
常见的大数据存储框架和产品: HDFS、S3、MongoDb、Druid、Clickhouse、Hbase.Kudu,Cassandra。
3.数据计算和处理
利用分布式编程模型和计算框架,结合机器学习和数据挖掘算法,实现对海量数据的处理和分析。主要处理模式可以分为批处理和流处理。批处理特点是先存储后处理,技术成熟、稳定成本低。流处理是数据驱动的直接处理,对系统容错要求高,成本相对较高。交互式分析计算和批处理的处理对象类似,它强调查询结果的实时或准实时响应,针对计算速度做了专门优化,方便商业分析师探索式分析数据
a.业界常见的流计算框架: Storm、Spark Streaming、Flink
![](https://static001.geekbang.org/infoq/2f/2f5ec49c20fae9b14b575e300f5169ea.png)
b.业界常见的批计算框架: MapReduce、Tez、Hive、Spark、Beam
c.常见的交互式分析工具: Dremel、Impala、Presto、 Druid、Clickhouse
![](https://static001.geekbang.org/infoq/ab/ab5fd4a93ad7cafe2a90efea39867f4f.png)
![](https://static001.geekbang.org/infoq/db/dbf509989e7c38d376f5144dddae4e7d.png)
5、数据应用和可视化
大数据应用是整个大数据生命周期中最重要的一个环节之一,从海量数据中发掘出的有价值的数据结论,最终需要以 AP、数据库、图表、数据平台等多种方式,对外输出,实现数据驱动
常用的可视化工具技术: Hue、Serperset、Grafana。
常见的服务化方法有: Restful API 接口、分布式 KV、Kafka。
常见的应用型的数据产品有: 自助式多维分析平台、行为分析平台、用户画像、AB 测试平台。
评论