《Spark Streaming实时流式大数据处理实战》 ——1 初识Spark
第1篇
Spark基础
( 第1章 初识Spark
( 第2章 Spark运行与开发环境
( 第3章 Spark编程模型
第1章 初识Spark
笔者目前正在使用微软的Word进行书籍的撰写。而Word中一个很好用的功能便是拼写检查,当发生拼写错误时,会提供一 个列表让我们选择。而背后的原理就是Word使用了一份庞大的词典来进行匹配,类似于专家的人工匹配行为。
而另一种思路是借用群体智慧,我们在使用谷歌浏览器的时候,会遇到一个“你是不是找”的功能模块,当输入比较“冷门”的搜索条件时,谷歌浏览器会给出一个更加准确的搜索条件,如图1.1所示。
图1.1 谷歌搜索拼写纠正
谷歌就是利用了大数据,当我们输错一个词的时候,在每日海量的搜索数据中,一定有跟我们搜索相同内容的用户,他们会重新输入,那么这个重新输入的词也许就是我们想要的词;而另一方面,如果用户单击了该词,说明匹配正确,这样反馈学习的机制能够更好地提高拼写纠正的准确性。
类似的场景已经融入了人们生活中的方方面面,例如淘宝购物,平台会根据用户的购买行为记录推荐用户可能感兴趣的商品;看新闻,App根据用户个人行为记录及群体的观看记录,向用户推荐热点新闻和用户感兴趣的新闻;社交平台,根据用户大量的记录构建用户画像,进行更加精准的广告投放。
互联网时代,社交网络、电子商务与移动通信将我们的社会推向了一个以PB(1024TB)为单位的结构与非结构数据的新大数据时代。而面对海量的数据我们需要以更加高效的方式进行挖掘与应用,这就提出了大数据处理的需求。前几年随着Hadoop的兴起,大数据处理一时风起云涌,如图1.2展示了一个大数据平台的全景。
Data一词源于拉丁语,其本意是要对未来进行预测。这也正反映了大数据处理的核心任务——预测。大数据平台给我们提供了面对海量数据进行挖掘的能力,将其转化为生产力并产生价值。
图1.2 大数据平台全景
也许有读者不禁会问:既然Hadoop平台中Map/Reduce框架的提出在很大程度上解决了大数据的处理问题,那么为什么还会诞生Spark呢?本节就来介绍Spark的由来。
1.1 Spark由来
Spark最早源于一篇论文Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing。该论文是由加州大学柏克莱分校的Matei Zaharia等人发表的。论文中提出了一种弹性分布式数据集(即RDD)的概念,原文开头对其的解释是:
A distributed memory abstraction that lets programmers perform in-memory computations on large clusters in a fault-tolerant manner.
翻译过来就是:RDD是一种分布式内存抽象,其使得程序员能够在大规模集群中做内存运算,并且有一定的容错方式。而这也是整个Spark的核心数据结构,Spark整个平台都围绕着RDD进行。之后加州大学柏克莱分校AMPLab将其开发出来。
Apache Spark是一种针对大规模数据处理的快速通用开源引擎,主要有以下特点。
* 速度快:由于Apache Spark支持内存计算,并且通过DAG(有向无环图)执行引擎支持无环数据流,所以官方宣称其在内存中的运算速度要比Hadoop的MapReduce快100倍,在硬盘中要快10倍,如图1.3所示。
图1.3 逻辑回归在Hadoop和Spark中运算速度对比
* 易于使用:截至笔者完稿时,Spark的版本已经更新到Spark 2.3.1,支持了包括Java、Scala、Python和R语言在内的多种语言。
* 通用性强:在Spark的基础上,Spark还提供了包括Spark SQL、Spark Streaming、MLib及GraphX在内的多个工具库,我们可以在一个应用中无缝地使用这些工具库。其中,Spark SQL提供了结构化的数据处理方式,Spark Streaming主要针对流式处理任务(也是本书的重点),MLib提供了很多有用的机器学习算法库,GraphX提供图形和图形并行化计算,如图1.4所示。
图1.4 Spark及其工具库
* 运行方式:Spark支持多种运行方式,包括在Hadoop和Mesos上,也支持Standalone的独立运行模式,同时也可以运行在云上。另外对于数据源而言,Spark支持从HDFS、HBase、Cassandra及Kafka等多种途径获取数据。
Spark内部引入了一种称为弹性分布式数据集的结构(RDD),在数据结构之间利用有向无环图(DAG)进行数据结构间变化的记录,这样可以方便地将公共的数据共享,并且当数据发生丢失时,可以依靠这种继承结构(血统Lineage)进行数据重建,具有很强的容错性。
- 点赞
- 收藏
- 关注作者
评论(0)