Spark及其应用场景初探
最近老大让用Spark做一个ETL项目,搭建了一套只有三个结点Standalone模式的Spark集群做测试,基础数据量大概8000W左右。看了官方文档,Spark确实在Map-Reduce上提升了很多,可是官方明确提出了在Interactive Data 方面性能提升最大。但是做ETL的数据之间是平行结构,没有任何交互,数据处理完直接就推送走了,也不用做任何缓存,因此完全体现不出来Spark的优势。具体可以用下面这个例子来说,
假设Hadoop集群中有一个文件,每行有一个随机数,我们现在需要计算这些数据的方差 (假设中间过程不会溢出)
方差公式
那么计算过程可以表示为
var file = sc.textFile("hdfs://dataset.txt")
file.persist()
var length = file.count()
var sum = file.reduce((a, b) => a+b)
var sqsum = file.map(line => line * line).reduce( (a,b) => a+b )
var variance = sqsum / length / - sum * sum / length / length
这个过程很简单,但是可以体现出这个交互的过程。file 是一个RDD,这个例子有且仅有一个RDD。Spark中对RDD的操作有两类Transformation和Action,Transformation是一个延时的过程,只有当具体的Action应用时,才会对具体的数据做运算。Spark的容错机制也正是根据了Transformation对RDD进行了Lineage的推算,即使在某个结点在某种状态下数据丢失,也可以根据记录的Transformations推算出当前请求的RDD数据集。 扯远了,还是看上面这个例子,
var file = sc.textFile("hdfs://dataset.txt")
这里不会立即去集群读取这个文件,而是会延迟到后面具体的Action例如count()时,才会遍历文件。获取所有数据的长度,需要读取一次dataset.txt这个文件,集群中遍历这个文件虽然很快,但是下一次在求和与平方和时,又需要遍历两次次这个文件,那么差别就来了
map - reduce 程序是需要三次IO,集群需要从HDFS上三次获取这个文件进行遍历
Spark 能够将 file 这个RDD缓存在集群的共享内存中,那么在处理时实际上只有一次IO,另外两次遍历直接从内存读取
这个例子很简单,那么我们在做数据挖掘或者迭代运算时,这样的交互行为会很多,需要缓存的中间数据集也会有很多,那么在map-reduce过程中,由于没有内存缓存的机制,只有将中间状态缓存到HDFS中,而Spark通过缓存避免了这些IO,效率就提升了。
参考文档
[1] programming-guide
[2] An Architecture for Fast and General Data Processing on Large Clusters
Spark及其应用场景初探的更多相关文章
- Spark job server原理初探
Spark job server是一个基于Spark的服务系统,提供了管理SparkJob,context,jar的RestFul接口. 专注标注原文链接 http://www.cnblogs.com ...
- 使用spark 计算netflow数据初探
spark是一个高性能的并发的计算平台,而netflow是一种一般来说数量级很大的数据.本文记录初步使用spark 计算netflow数据的大致过程. 本文包括以下过程: 1. spark环境的搭建 ...
- Spark应用场景以及与hadoop的比较
一.大数据的四大特征: a.海量的数据规模(volume) b.快速的数据流转和动态的数据体系(velocity) c.多样的数据类型(variety) d.巨大的数据价值(value) 二.Spar ...
- 【转载】Spark性能优化指南——高级篇
前言 数据倾斜调优 调优概述 数据倾斜发生时的现象 数据倾斜发生的原理 如何定位导致数据倾斜的代码 查看导致数据倾斜的key的数据分布情况 数据倾斜的解决方案 解决方案一:使用Hive ETL预处理数 ...
- Spark入门实战系列--1.Spark及其生态圈简介
[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .简介 1.1 Spark简介 年6月进入Apache成为孵化项目,8个月后成为Apache ...
- Spark:一个高效的分布式计算系统
概述 什么是Spark ◆ Spark是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架,Spark基于map reduce算法实现的分布式计算,拥 ...
- 大数据计算平台Spark内核解读
1.Spark介绍 Spark是起源于美国加州大学伯克利分校AMPLab的大数据计算平台,在2010年开源,目前是Apache软件基金会的顶级项目.随着 Spark在大数据计算领域的暂露头角,越来越多 ...
- 【转】【技术博客】Spark性能优化指南——高级篇
http://mp.weixin.qq.com/s?__biz=MjM5NjQ5MTI5OA==&mid=2651745207&idx=1&sn=3d70d59cede236e ...
- Hadoop和Spark的异同
谈到大数据,相信大家对Hadoop和Apache Spark这两个名字并不陌生.但我们往往对它们的理解只是提留在字面上,并没有对它们进行深入的思考,下面不妨跟我一块看下它们究竟有什么异同. 解决问题的 ...
随机推荐
- js和 jquery对象
核心提示:jquery选择器得到的jquery对象和标准的 javascript中的document.getElementById()取得的dom对象是两种不同的对象类型,一般情况下,如S(’#id’ ...
- Mac AppStore下载文件的获取
有时候希望把在mac AppStore下载的App共享给其他人,但是application里面的都是已经安装的应用,那么如何找到pkg安装文件呢? (后附:注意事项!) 方法一: 1.首先下载一个Ap ...
- 【Todo】Java Queue Stack Vector ArrayList
Java集合框架里存在Queue这个接口,之后有不同类型的队列的实现. 有Stack这个类实现堆栈,其实这个类是通过继承Vector的方式来实现的, Vector和ArrayList的实现方式差不多, ...
- 函数lock_rec_has_expl
判断是否预加锁的模式 要强壮于 已添加的lock锁模式 /*********************************************************************// ...
- Android Fragment 真正的完全解析(上) (转载)
原处: http://blog.csdn.net/lmj623565791/article/details/37970961 自从Fragment出现,曾经有段时间,感觉大家谈什么都能跟Fragmen ...
- IOS开发之不同版本适配问题2(#ifdef __IPHONE_7_0)(转载)
继续说说ios不同版本之间的适配 先说一个东西:在xcode当中有一个东西叫targets,苹果的官方文档是这样说的: A target specifies a product to build an ...
- POJ 3261 (后缀数组 二分) Milk Patterns
这道题和UVa 12206一样,求至少重复出现k次的最长字串. 首先还是二分最长字串的长度len,然后以len为边界对height数组分段,如果有一段包含超过k个后缀则符合要求. #include & ...
- 在 VC6 中使用 GdiPlus-使用
下面用 VC6 来写一个 GdiPlus 的 Demo 工程 Step1:新建一个名为 Demo_GdiPlus 的 MFC AppWizard(exe) 工程 操作步骤:(1)主菜单File-> ...
- 转载]IOS LBS功能详解[0](获取经纬度)[1](获取当前地理位置文本 )
原文地址:IOS LBS功能详解[0](获取经纬度)[1](获取当前地理位置文本作者:佐佐木小次郎 因为最近项目上要用有关LBS的功能.于是我便做一下预研. 一般说来LBS功能一般分为两块:一块是地理 ...
- Windows上安装Yeoman
之前直接安装完Node.js后,运行npm install -g yo命令,结果出现什么"要安装framework2.0 sdk,vcbuild"什么的错误,怎么也弄不好,结果是各 ...
