微信号:grzlwx

介绍:光荣之路官方资讯

手把手教你Spark&Mongodb『附源码下载』(上)

2018-02-02 22:00 Hurry Han

新书

速递


吴老的java版《selenium webdriver 实战宝典》和python版《selenium Webdriver 3.0 自动化测试框架实战指南》出版了,代码拿来就能用。

  文 | Hurry Han

spark已经成为最流行的大数据处理引擎之一,本文以统计用户日活数据做引导式实践,使读者即刻上手spark和mongodb进行数据统计。附干货源码下载!

Spark

Spark官方对其的定义为一个快速和大规模数据处理的通用引擎。在内存中执行比Hadoop MapReduce快100倍,硬盘中快10-倍。Spark有一个先进的DAG执行引擎,支持循环数据流和内存计算。


1. Spark的介绍与优势

Spark提供了一个集群的分布式内存抽象,以支持需要工作集的应用。

这个抽象就是RDD(Resilient Distributed Dataset),RDD就是一个不可变的带分区的记录集合,RDD也是Spark中的编程模型。Spark提供了RDD上的两类操作,Transform和Action。

Transform用来对一个RDD通过某种变换得到一个新的RDD,延迟执行,直到遇到Action操作。Action对RDD执行计算操作,返回计算结果。

Transform常用APIs

Action 常用APIs


在Spark中,所有RDD的Transform都是惰性求值的。RDD的Transform操作会生成新的RDD,新的RDD的数据依赖与原有的RDD的数据,每个RDD又包含多个分区。那么一段程序实际上就构造了一个由相互依赖的多个RDD组成的有向无环图(DAG)。并通过在RDD上执行Action将这个有向无环图作为一个Job提交给Spark执行。

Spark对于有向无环图Job进行调度,确定阶段(Stage),分区(Partition),流水线(Pipeline),任务(Task)和缓存(Cache),进行优化,并在Spark集群上运行Job。RDD之间的依赖分为宽依赖(依赖多个分区)和窄依赖(只依赖一个分区),在确定阶段时,需要根据宽依赖划分阶段,根据分区划分任务。


Spark支持故障恢复的方式也不同,提供两种方式,Linage,通过数据的血缘关系,再执行一遍前面的处理,Checkpoint,将数据集存储到持久存储中。

Spark为迭代式数据处理提供更好的支持。每次迭代的数据可以保存在内存中,而不是写入文件。

Spark的优势不仅体现在性能提升上,Spark框架为批处理(SparkCore),交互式(Spark SQL),流式(Spark Streaming),机器学习(MLIB),图计算(GraphX)提供一个统一的数据处理平台,这相对于使用Hadoop有很大优势。



--------------------打赏⬇小编------------------

-------------------打赏⬆小编------------------

2. Spark与Hadoop对比

Hadoop解决了大数据(大到一台计算机无法进行存储,一台计算机无法在要求的时间内进行处理)的可靠存储和处理

HDFS,在由普通PC组成的集群上提供高可靠的文件存储,通过将块保存多个副本的办法解决服务器和硬盘坏掉的问题。

MapReduce,通过简单的Mapper和Reducer的抽象提供一个编程模型,可以在一个由几十台上百台的PC组成的不可靠集群上并发地,分布式地处理大量的数据集,而把并发、分布式(如机器间通信)和故障恢复等计算细节隐藏起来。而Mapper和Reducer的抽象,又是各种各样的复杂数据处理都可以分解为的基本元素。这样,复杂的数据处理可以分解为由多个Job(包含一个Mapper和一个Reducer)组成的有向无环图(DAG),然后每个Mapper和Reducer放到Hadoop集群上执行,就可以得出结果。下图为Hadoop MapReduce的工作流程图:


Hadoop的局限和不足

  • 抽象层次低,需要手工编写代码来完成,难以上手

  • 只提供两个操作,Map和Reduce,表达力欠缺

  • 一个Job只有Map和Reduce两个阶段,复杂的计算需要大量的Job完成,Job之间的依赖关系是由开发者自己管理的

  • 处理逻辑隐藏在代码细节中,没有整体逻辑

  • 中间结果也放在HDFS中

  • ReduceTask需要等待所有MapTask都完成后才能开始

  • 延时高,只适用Batch数据处理,对于交互式数据处理,实时数据处理的支持不够

  • 对于迭代式的数据处理性能比较差

比如说,用MapReduce实现两个表的Join都是一个很有技巧性的过程,如下图:

(未完待续)


源码下载:

https://yunpan.cn/cRgp8LNGX6BWC 

提取码:ffc9

喜马拉雅app搜索并收听“光荣之路”电台

光荣之路
招聘|征稿|合作 |QQ群
735821166@qq.com
python群:457561756
性能群:415987441
招聘群:203715128
 
光荣之路 更多文章 招聘速递·新氧科技·北京·测试工程师 AutoMonkey框架原理与应用(六) AutoMonkey框架原理与应用(五) AutoMonkey框架原理与应用(四) AutoMonkey框架原理与应用(三)
猜您喜欢 京东再出发,用技术与雀巢创造智慧供应链新型合作 java基础:java的类常识(二) LeSS和SAFe的大规模之战 2016SANS网络威胁情报峰会议题(含PPT) 印象杭州