最近老大让用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的操作有两类TransformationActionTransformation是一个延时的过程,只有当具体的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 鼠标上移 图片放大

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. Eclipse 下如何引用另一个项目的资源文件

    为什么要这么做?可参考:Eclipse 下如何引用另一个项目的Java文件 下面直接说下步骤:(项目A 引用 项目B的资源文件) 1.右键 项目A,点击菜单 Properties 2.在弹出的框中,点 ...

  3. NDK(3)java.lang.UnsatisfiedLinkError: Native method not found解决方法

    调用native方法时报错如下 : “java.lang.UnsatisfiedLinkError: Native method not found....  ”: 原因分析: 链接器只看到了在so中 ...

  4. ACM - ICPC World Finals 2013 H Матрёшка

    原题下载:http://icpc.baylor.edu/download/worldfinals/problems/icpc2013.pdf 题目翻译: 问题描述 俄罗斯套娃是一些从外到里大小递减的传 ...

  5. core--主线程

    windows的线程是windows可以分配给cpu的最小单元,对window应用程序的管理,最小的管理单位就是线程.那什么是线程?线程其实什么都不是,只是一个概念,没有实体,又看不见.这个概念的定义 ...

  6. [ionic开源项目教程] - 第1讲 前言,技术储备,环境搭建,常用命令

    前言 这是一个系列文章,将持续更新到项目完结,从环境搭建开始讲解,包括实战开发中遇到的各种问题的解决方案,都将毫无保留的分享给大家. 技术储备 开始本项目之前,请确保自己对以下技术点都有所了解. ht ...

  7. noSession or session is close 错误

    <filter> <filter-name>OpenSessionInViewFilter</filter-name> <filter-class>or ...

  8. scala学习笔记(6):闭包

    到本章这里,所有函数文本的例子仅参考了传入的参数.例如,(x: Int) => x > 0里,函数体用到的唯一变量,x > 0,是x,被定义为函数参数.然而也可以参考定义在其它地方的 ...

  9. 【英语】Bingo口语笔记(32) - 口语中的弱读

  10. 查看事务锁:innodb_trx+innodb_locks+innodb_lock_waits

    当出现:ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction,要解决是一件麻烦的事情:特别是当一个SQL ...