最近老大让用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及其应用场景初探的更多相关文章

  1. Spark job server原理初探

    Spark job server是一个基于Spark的服务系统,提供了管理SparkJob,context,jar的RestFul接口. 专注标注原文链接 http://www.cnblogs.com ...

  2. 使用spark 计算netflow数据初探

    spark是一个高性能的并发的计算平台,而netflow是一种一般来说数量级很大的数据.本文记录初步使用spark 计算netflow数据的大致过程. 本文包括以下过程: 1. spark环境的搭建 ...

  3. Spark应用场景以及与hadoop的比较

    一.大数据的四大特征: a.海量的数据规模(volume) b.快速的数据流转和动态的数据体系(velocity) c.多样的数据类型(variety) d.巨大的数据价值(value) 二.Spar ...

  4. 【转载】Spark性能优化指南——高级篇

    前言 数据倾斜调优 调优概述 数据倾斜发生时的现象 数据倾斜发生的原理 如何定位导致数据倾斜的代码 查看导致数据倾斜的key的数据分布情况 数据倾斜的解决方案 解决方案一:使用Hive ETL预处理数 ...

  5. Spark入门实战系列--1.Spark及其生态圈简介

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .简介 1.1 Spark简介 年6月进入Apache成为孵化项目,8个月后成为Apache ...

  6. Spark:一个高效的分布式计算系统

    概述 什么是Spark ◆ Spark是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架,Spark基于map reduce算法实现的分布式计算,拥 ...

  7. 大数据计算平台Spark内核解读

    1.Spark介绍 Spark是起源于美国加州大学伯克利分校AMPLab的大数据计算平台,在2010年开源,目前是Apache软件基金会的顶级项目.随着 Spark在大数据计算领域的暂露头角,越来越多 ...

  8. 【转】【技术博客】Spark性能优化指南——高级篇

    http://mp.weixin.qq.com/s?__biz=MjM5NjQ5MTI5OA==&mid=2651745207&idx=1&sn=3d70d59cede236e ...

  9. Hadoop和Spark的异同

    谈到大数据,相信大家对Hadoop和Apache Spark这两个名字并不陌生.但我们往往对它们的理解只是提留在字面上,并没有对它们进行深入的思考,下面不妨跟我一块看下它们究竟有什么异同. 解决问题的 ...

随机推荐

  1. js动态判断密码强度&&实用的 jQuery 代码片段

    // 网上拷贝的代码,效果不太好需要自己调整<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &q ...

  2. ccnu-线段树联系-单点更新2-B

    B - 单点更新2 Time Limit:3000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Des ...

  3. HeadFirst jsp 02 (体系结构)

    当请求到来时, 必须有人实例化 servlet, 或者至少建立一个新的线程来处理这个请求. 必须有人调用 servlet 的 doPost()或 doGet()方法. 另外还的有人管理 servlet ...

  4. SQL注入实验,PHP连接数据库,Mysql查看binlog,PreparedStatement,mysqli, PDO

    看到有人说了判断能否sql注入的方法: 简单的在参数后边加一个单引号,就可以快速判断是否可以进行SQL注入,这个百试百灵,如果有漏洞的话,一般会报错. 下面内容参考了这两篇文章 http://blog ...

  5. R语言AMORE包实现BP神经网络——German数据集

    library(AMORE)data<-read.table('G:\\dataguru\\ML\\ML09\\基于BP网络的个人信贷信用评估\\基于BP网络的个人信贷信用评估\\german. ...

  6. CSS之剪切横幅

    简述 clip-path属性指定一个应用到元素上的剪切路径.应用在SVG中<clipPath>元素上的属性值可以完全运用在clip-path属性上.还可以使用CSS Shapes模块中的基 ...

  7. BZOJ 1984 月下“毛景树”

    我觉得我要把BZOJ上的链剖写完了吧.... #include<iostream> #include<cstdio> #include<cstring> #incl ...

  8. java多线程模拟停车系统

    import java.util.Random; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent ...

  9. spring的声明式事务内部图

  10. Android 自定义RadioButton的样式

    Android 自定义RadioButton的样式 我们知道Android控件里的button,listview可以用xml的样式自定义成自己希望的漂亮样式. 最近用到RadioButton,利用xm ...