本文来自网易云社区

作者:王佳楠

一、概述

现如今在大规模数据处理分析的技术领域中,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. Java微信公众平台开发(九)--微信自定义菜单的创建实现

    自定义菜单这个功能在我们普通的编辑模式下是可以直接在后台编辑的,但是一旦我们进入开发模式之后我们的自定义菜单就需要自己用代码实现,所以对于刚开始接触的人来说可能存在一定的疑惑,这里我说下平时我们在开发 ...

  2. hdu3487Play with Chain(splay)

    链接 简单的两种操作,一种删除某段区间,加在第I个点的后面,另一个是翻转区间.都是splay的简单操作. 悲剧一:pushdown时候忘记让lz=0 悲剧二:删除区间,加在某点之后的时候忘记修改其父亲 ...

  3. CentOS7.2 安装iptables

    1  先检查是否安装了iptables: service iptables status iptables  -L ls /etc/sysconfig/ 综上:命令报错,且 iptables不存在,那 ...

  4. dataTable 中数据的居中显示

    遇到了一个小问题,就是在向dataTable中添加数据时,数据总是向左对齐,而dataTable又没有设置数据对齐的方法,这里写一个在网上看到的一个方法,分享出来看一下,简单实用. html代码如图1 ...

  5. Spring相关BUG

    今天从云开发平台上生成的代码报Spring相关的错误. 我找到第一处错误,整理如下: org.springframework.beans.factory.BeanCreationException: ...

  6. [问题解决]Deepin环境变量设置无效解决

    将环境变量的设置放在这里:  gedit ~/.bashrc 详见参考: linux下如何设置环境变量PATH : http://blog.csdn.net/witsmakemen/article/d ...

  7. 装饰者模式--Java篇

    装饰者模式(Decorator):动态地给一个对象添加一些额外的职责,就增加功能来说,装饰者模式比生成子类更为灵活. 1.定义接口,可以动态的给对象添加职责. package com.lujie; p ...

  8. 【extjs6学习笔记】0.2 准备:类库结构

  9. Git常用命令的使用方法

    推荐一个比较好的GIT的教学地址,廖雪峰老师的git教程! 这里简述Git常用命令的使用方法: 一.初始化git 右键进入 Git Bash 1.建立身份信息 git config --global ...

  10. 洛谷 P1732 活蹦乱跳的香穗子

    题目描述 香穗子在田野上调蘑菇!她跳啊跳,发现自己很无聊,于是她想了一个有趣的事情,每个格子最多只能经过1次,且每个格子都有其价值 跳的规则是这样的,香穗子可以向上下左右四个方向跳到相邻的格子,并且她 ...