Spark——为数据分析处理提供更为灵活的赋能
本文来自网易云社区
作者:王佳楠
一、概述
现如今在大规模数据处理分析的技术领域中,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——为数据分析处理提供更为灵活的赋能的更多相关文章
- Spark 实践——用 Scala 和 Spark 进行数据分析
本文基于<Spark 高级数据分析>第2章 用Scala和Spark进行数据分析. 完整代码见 https://github.com/libaoquan95/aasPractice/tre ...
- 大数据学习:Spark是什么,如何用Spark进行数据分析
给大家分享一下Spark是什么?如何用Spark进行数据分析,对大数据感兴趣的小伙伴就随着小编一起来了解一下吧. 大数据在线学习 什么是Apache Spark? Apache Spark是一 ...
- 使用Index()+Match()函数实现更为灵活的VLookUp()
上一篇 http://www.cnblogs.com/-SANG/p/8407017.html 文章中已经介绍了vlookup的用法. 今天要使用index+match实现更为灵活的vlookup 先 ...
- Python3实战Spark大数据分析及调度 (网盘分享)
Python3实战Spark大数据分析及调度 搜索QQ号直接加群获取其它学习资料:715301384 部分课程截图: 链接:https://pan.baidu.com/s/12VDmdhN4hr7yp ...
- Python3实战spark大数据分析及调度 ☝☝☝
Python3实战spark大数据分析及调度 ☝☝☝ 一.实例分析 1.1 数据 student.txt 1.2 代码 二.代码解析 2.1函数解析 2.1.1 collect() RDD的特性 在 ...
- Python3实战spark大数据分析及调度✍✍✍
Python3实战spark大数据分析及调度 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大 ...
- Spark高级数据分析——纽约出租车轨迹的空间和时间数据分析
Spark高级数据分析--纽约出租车轨迹的空间和时间数据分析 一.地理空间分析: 二.pom.xml 原文地址:https://www.jianshu.com/p/eb6f3e0c09b5 作者:II ...
- 详细解读Spark的数据分析引擎:Spark SQL
一.spark SQL:类似于Hive,是一种数据分析引擎 什么是spark SQL? spark SQL只能处理结构化数据 底层依赖RDD,把sql语句转换成一个个RDD,运行在不同的worker上 ...
- Apache Spark大数据分析入门(一)
摘要:Apache Spark的出现让普通人也具备了大数据及实时数据分析能力.鉴于此,本文通过动手实战操作演示带领大家快速地入门学习Spark.本文是Apache Spark入门系列教程(共四部分)的 ...
随机推荐
- 移动端 mui框架中input输入框或任何输入框聚焦后页面自动上移
一.mui框架中点击input后,安卓手机弹出自带的输入键盘时,页面自动上移 实现方法: (1)只要把input标签放在mui-content这个类里面就可以了 <div class=" ...
- hdu4419Colourful Rectangle
链接 分别求出7种颜色覆盖的面积. 做法:每种颜色设定一个标号,以二进制表示R:100 G:010 B:001 .这样很明显可以知道RG:110 GB:011 以此类推. 求解时,需要开一个二维标记数 ...
- Minikube-Kubernetes本地环境进行开发
Minikube-Kubernetes本地环境进行开发 使用Minikube 启动Minikube # 启动 minkube start # 检查状态 minikube status host: Ru ...
- python第一模块基础语法
一·python和各大高级语言的优缺点比较 1.c语言开发效率低 2.c++开发效率高于c语言,低于java,python. 3.java代码臃肿,设计复杂,库繁杂量多. 4.PHP应用领域单一,且运 ...
- ES-windos环境搭建(3)-kibana
简介 Kibana是一个为ElasticSearch 提供的数据分析的 Web 接口.可使用它对日志进行高效的搜索.可视化.分析等各种操作. 下载 打开elasticseach官网,单击downloa ...
- jsp中<c:forEach varStatus="status">的属性值问题
c:forEach varStatus属性 current当前这次迭代的(集合中的)项 index当前这次迭代从 0 开始的迭代索引 count当前这次迭代从 1 开始的迭代计数 first用来表明当 ...
- 后台安装 SQL Server 无人值守 安装
(开头闲淡)项目需要必须安装SQL的,查了很久,断断续续用了各种方法,今天终于用了正确的姿(xia)势(mo)弄成了. 最开始用的方法是调用Win的API模拟鼠标操作安装的,嗯,虽然勉强可以,就是有些 ...
- codevs 2618 核电站问题
时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题目描述 Description 一个核电站有N个放核物质的坑,坑排列在一条直线上.如果连续M个坑中放入核物质,则会 ...
- initWithNibName/awakeFromNib/initWithCoder
转自: http://leeyin.iteye.com/blog/1040362 每个ios开发者对loadView和viewDidLoad肯定都很熟悉,虽然这两个函数使用上真的是非常简单,但是和类似 ...
- VS打包软件部署------ClickOnce应用安装 (各版本.net引导文件安装,再发布文档离线安装下载地址)
一.1.其他引导程序包:地址 https://msdn.microsoft.com/zh-cn/vstudio/bb898654.aspx 2.离线安装各版本.net下载版(各种语言):https: ...