本文来自网易云社区

作者:王佳楠

一、概述

现如今在大规模数据处理分析的技术领域中,Hadoop及其生态内的各功能组件占据了绝对的统治地位。Hadoop原生的MapReduce计算框架由于任务抽象简单、计算流程固定、计算的中间结果写入磁盘引起大量读写开销等短板,正逐步的被基于内存的分布式计算框架Spark代替,应用于各类大规模数据处理分析的场景中,其优势主要体现在以下5个方面:
 1、更快的计算速度。采用计算中间结果的内存缓存机制和基于DAG的数据处理过程优化策略,进一步提升数据处理速率。
 2、简单易用的分布式计算。将大规模数据处理任务,抽象为RDD的处理变换操作,将并行实现的分布式计算任务拆分为各自独立的串行计算过程。
 3、适合丰富的应用场景。Spark内部集成了SQL、机器学习、流计算、图运算等多种类型计算模型,满足多种大规模数据分析的场景需求。
 4、兼容多样的存储系统。满足对包括HDFS、HBase、Hive、S3等多种大规模数据存储系统的高效读写需求,轻松处理TB级以上规模以上的数据。
 5、资源管理与高可靠性。结合Yarn、Mesos等多种类型的资源管理器,监控协调各计算子任务的运行状态,失败重启机制确保分布式作业的可靠性。

二、RDD计算模型原理

Spark将数据处理过程抽象为对内存中RDD(弹性分布式数据集)的操作,RDD的可以通过从数据源直接读取和集合数据类型封装两种方式创建。针对RDD的操作,根据其结果主要分为如map、flatMap、mapPartition、filter等生成新的RDD的transformation(转换)操作和collect、reduce、foreach等生成集合数据类型或结果写入的action(行为)操作两大类。

上图中描述了一个典型的Spark作业基于RDD实现数据的处理过程。其中,Spark对RDD的处理过程是惰性的,只有调用对RDD的action操作才能启动对RDD的计算过程,连续的调用多个transformation操作是无法使数据处理过程真正的执行。在触发RDD计算过程后,根据Spark内置的DAG(有向无环图)引擎将多个对RDD的操作执行策略进行优化。
 为满足对大规模数据的处理需要,Spark将RDD划分为多个partition(分区),以partition为单位将数据分散到集群上的各个节点中。针对RDD的action操作和transformation操作间的本质区别就是生成的结果是否为RDD。

三、基于Yarn实现资源管理

由于Hadoop的HDFS与Spark的RDD抽象读写具有较为完备的兼容性,各版本Spark均提供对应当前Hadoop版本的安装包。同样,Spark也可以使用Hadoop中的Yarn作为自身的资源管理器,用以完成对Spark集群中是作业管理和任务计算资源调度分配等工作。

在Spark作业的执行过程中,Yarn将在集群中的物理节点上的Executor的JVM进程封装为独立的Container,并提供独立的临时文件目录以及内存和CPU资源。同时,Spark还提供了共享文件依赖的机制将Spark作业执行过程中,各Executor所需的如jar包、.so动态库、py文件及其他格式类型的文件依赖资源与Spark作业自身的执行文件分发到各Container中,使得Spark作业能够具备更为灵活的拓展性。

四、技术栈

现如今,Spark作业支持Java、Scala、Python以及R四种语言编写,Spark自身提供了SQL、机器学习、流计算以及图运算四种类型的计算功能组件,开发人员可根据实际的应用需求和相应组件的功能特性完成Spark作业的开发。但是,其中如GraphX等部分功能组件仅支持Java及Scala语言的调用。

SQL:基于对内存中RDD操作和DAG引擎优化,Spark能够实现比基于原生MapReduce的Hive SQL更高效的计算过程。同时,采用DataFrame封装Spark作业能够以函数调用的方式完成SQL操作。
 机器学习:Spark基于内存实现RDD操作,能够满足使用大规模数据集完成机器学习建模时进行迭代运算的需要。其自身提供的MLlib组件包中提供了大量常用的机器学习算法模型,同时,Intel基于Spark开发的BigDL使Spark能够完成深度学习的建模计算过程。
 流计算:Spark Streaming将数据源抽象为DStream,将各时间窗内持续产生的实时数据切分为不同的RDD,以RDD为单位完成对时间窗内实时数据的处理,但其计算模式仍存在批处理的特性。
 图运算:Spark中自带的图运算引擎GraphX采用由并行超步与全局同步组成的Bulk Synchronous Parallell(整体同步并行)模式,将图运算过程抽象为各步的迭代直至符合收敛停止条件。

五、应用场景

在网易大数据开发计算平台Mammut中,作业流任务中已支持Spark类型的计算节点。在原有SQL类型节点的基础上,通过上传Spark作业对应的jar包并完成相对应类型参数的配置,即可完成更多更为灵活的ETL过程,弥补Hive原生udf函数和SQL语句无法完成某些特殊要求计算的短板。

为实现更加通用性更广的服务,基于组件化的方式将常用的非SQL的批处理计算过程实现为通用的功能组件包,通过传入特定的参数实现功能的调用,从而为后续的开发过程节约成本。

网易云免费体验馆,0成本体验20+款云产品!

更多网易研发、产品、运营经验分享请访问网易云社区

相关文章:
【推荐】 互联网金融中的数据挖掘技术应用
【推荐】 AndroidTV开发(1)

Spark——为数据分析处理提供更为灵活的赋能的更多相关文章

  1. Spark 实践——用 Scala 和 Spark 进行数据分析

    本文基于<Spark 高级数据分析>第2章 用Scala和Spark进行数据分析. 完整代码见 https://github.com/libaoquan95/aasPractice/tre ...

  2. 大数据学习:Spark是什么,如何用Spark进行数据分析

    给大家分享一下Spark是什么?如何用Spark进行数据分析,对大数据感兴趣的小伙伴就随着小编一起来了解一下吧.     大数据在线学习 什么是Apache Spark? Apache Spark是一 ...

  3. 使用Index()+Match()函数实现更为灵活的VLookUp()

    上一篇 http://www.cnblogs.com/-SANG/p/8407017.html 文章中已经介绍了vlookup的用法. 今天要使用index+match实现更为灵活的vlookup 先 ...

  4. Python3实战Spark大数据分析及调度 (网盘分享)

    Python3实战Spark大数据分析及调度 搜索QQ号直接加群获取其它学习资料:715301384 部分课程截图: 链接:https://pan.baidu.com/s/12VDmdhN4hr7yp ...

  5. Python3实战spark大数据分析及调度 ☝☝☝

    Python3实战spark大数据分析及调度  ☝☝☝ 一.实例分析 1.1 数据 student.txt 1.2 代码 二.代码解析 2.1函数解析 2.1.1 collect() RDD的特性 在 ...

  6. Python3实战spark大数据分析及调度✍✍✍

    Python3实战spark大数据分析及调度  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大 ...

  7. Spark高级数据分析——纽约出租车轨迹的空间和时间数据分析

    Spark高级数据分析--纽约出租车轨迹的空间和时间数据分析 一.地理空间分析: 二.pom.xml 原文地址:https://www.jianshu.com/p/eb6f3e0c09b5 作者:II ...

  8. 详细解读Spark的数据分析引擎:Spark SQL

    一.spark SQL:类似于Hive,是一种数据分析引擎 什么是spark SQL? spark SQL只能处理结构化数据 底层依赖RDD,把sql语句转换成一个个RDD,运行在不同的worker上 ...

  9. Apache Spark大数据分析入门(一)

    摘要:Apache Spark的出现让普通人也具备了大数据及实时数据分析能力.鉴于此,本文通过动手实战操作演示带领大家快速地入门学习Spark.本文是Apache Spark入门系列教程(共四部分)的 ...

随机推荐

  1. 安卓 使用LruCache 加载图片 遇到的问题

    本来 使用listview的时候 加载大图片的时候 会遇到内存溢出而导致崩溃. 但是使用LruCache的时候 原本以为可以 解决这个问题.  但是发现还是出现了内存溢出的情况.   困扰很久 另外, ...

  2. WPF 控件树

    WPF控件树按照基类进行分类,记录下来便于编写自定义控件时查阅 RangeBase范围控件 Thumb拖到控件 TextBoxBase文本控件 ItemControl组控件 ContrentContr ...

  3. 编写可执行程序,其它程序调用,并返回数据,C#

    有时候在创建临时文件或文件夹,使用完成后,释放失败,删除提示占用,又不能结束主程序,就可以通过别的方法来解决 比如,另外创建一个程序,单独执行任务,完成后结束程序,并返回执行结果,上述问题就能解决. ...

  4. React 实践记录 03 React router

    Introduction 本文主要参考了react router 的官方文档. React Router是一套完整的配合React的路由解决方案,可能你已经知道前端路由,或者知道后端有路由的概念,如下 ...

  5. 五、UML类图和六大原则-----《大话设计模式》

    一.单一职责原则     就一个类而言,应该仅有一个引起它变化的原因.     如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力.这种耦合 ...

  6. CF1072C Cram Time

    思路: 首先二分找到使x * (x + 1) / 2 <= a + b最大的x,然后令p = min(a, b), q = max(a, b),按照x,x - 1, ..., 1的顺序选取数字把 ...

  7. shell中使用ssh

    ssh服务是不能用非交互的方式传递密码,想不输入密码,直接ssh连接到服务器有两种方法,sshpass和expect sshpass # wget http://downloads.sourcefor ...

  8. IOS之constraints

    anyway, you can do this with auto layout. You can do it entirely in IB as of Xcode 5.1. Let's start ...

  9. Openjudge 1.13-23:区间内的真素数

    总时间限制:  1000ms 内存限制:  65536kB 描述 找出正整数 M 和 N 之间(N 不小于 M)的所有真素数. 真素数的定义:如果一个正整数 P 为素数,且其反序也为素数,那么 P 就 ...

  10. for循环输出i为同一值的问题

    使用闭包将变量i的值保护起来. //sava1:加一层闭包,i以函数参数形式传递给内层函数 for( var i=0; i<ps.length; i++ ) { (function(arg){ ...