spark基本组件与概念
数据结构
核心之数据集RDD
俗称为弹性分布式数据集。Resilient Distributed Datasets,意为容错的、并行的数据结构,可以让用户显式地将数据存储到磁盘和内存中,并能控制数据的分区。同时,RDD还提供了一组丰富的操作来操作这些数据。
RDD的特点
- 它是在集群节点上的不可变的、已分区的集合对象。
- 通过并行转换的方式来创建如(map, filter, join, etc)。
- 失败自动重建。
- 可以控制存储级别(内存、磁盘等)来进行重用。
- 必须是可序列化的。
- 是静态类型的。
优点:
1编译时类型安全
2面向对象的编程风格 ,直接通过类名点的方式来操作数据
缺点:
1序列化和反序列化的性能开销
因为RDD只有数据,没有数据结构,无论是集群间的通信, 还是IO操作都需要对对象的结构和数据进行序列化和反序列化.
2GC的性能开销
频繁的创建和销毁对象, 势必会增加GC
RDD曾是spark处理数据最核心的基本单元,而spark在1.6推出了新的数据处理对象DataFarme和DataSet。
DataFarme
它在RDD的基础上增加了数据的类型。DataFrame是一种以RDD为基础的分布式数据集,类似于传统数据库中的二维表格。
它针对RDD的弱点做了如下优化
序列化与反序列化的性能开销
这个不用说,因为有了数据结构,所以节省了这一块。具体上,DataFrame引入了schema : RDD每一行的数据, 结构都是一样的. 这个结构就存储在schema中. spark通过schame就能够读懂数据, 因此在通信和IO时就只需要序列化和反序列化数据, 而结构的部分就可以省略了.
GC的性能开销
DataFrame引入了off-heap : 意味着JVM堆以外的内存, 这些内存直接受操作系统管理(而不是JVM)。Spark能够以二进制的形式序列化数据(不包括结构)到off-heap中, 当要操作数据时, 就直接操作off-heap内存. 由于Spark理解schema, 所以知道该如何操作.
但是,DataFrame针对RDD的弱点做了优化,但是它却没有了RDD类型安全和面向对象的优点。可谓是有得必有失。人生不过是取舍。
Dataset
结合了RDD和DataFrame的优点。它同时具备了RDD的类型安全和面向对象优点,同时也具备了DataFrame的schema和off-heap。同时,它引入了新的概念Encoder。能够按需访问,而无需访问整个对象。
总结
1:RDD类型安全,面向对象。
2:RDD仅有数据没有数据结构,序列化开销大。DataFrame引入schema使其具备了数据结构。同时其生命周期脱离了JVM和频繁的GC回收。因此其不再是字节码,而是二进制,又因为schema,所以操作系统和spark能够快速识别。但DataFrame失去了RDD类型安全面向对象的优点。
3:DataSet具体RDD和DataFrame的共同优点。同时能够按字段访问,无需操作整 个对象。
4:就优点和性能来说 RDD<DataFrame<DataSet
组件
Spark SQL 通常用于交互式查询,但这一领域同类产品太多,更多作为MapReduce的替代者,用于批量作业。
Spark Streaming 流式batch处理。主要同类产品为storm。除了storm延迟低以外,想不出不使用spark streaming的理由。(spark streaming 2.2以后延迟将降低到1ms以内;除了spark不稳定和不兼容的理由以外)
MLlib机器学习, 不了解。
GraphX图计算,不了解。
Spark core spark的核心框架,以上四大组件都依赖于core。
核心概念
client 客户端进程,负责提交作业到Master。
master Standalone模式中主控节点,负责接收Client提交的作业,管理Worker,并命令Worker启动分配Driver的资源和启动Executor的资源。
worker Standalone模式中slave节点上的守护进程,负责管理本节点的资源,定期向Master汇报心跳,接收Master的命令,启动Driver和Executor。
Driver 一个Spark作业运行时包括一个Driver进程,也是作业的主进程,负责作业的解析、生成Stage并调度Task到Executor上。包括DAGScheduler,TaskScheduler。
Executor 即真正执行作业的地方,一个集群一般包含多个Executor,每个Executor接收Driver的命令Launch Task,一个Executor可以执行一到多个Task。
图片来自:https://github.com/lw-lin/CoolplaySpark/blob/master/Spark%20Streaming%20%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90%E7%B3%BB%E5%88%97/1.1%20DStream%2C%20DStreamGraph%20%E8%AF%A6%E8%A7%A3.md
常见概念
未完待续
比较优势
网上曾有人号称,spark要取代hadoop。目前看来,spark并无这样的打算。事实上,hadoop已经成为大数据领域的标准,怎么取代呢。spark官方也从未说过这样的话。比如分布式数据存储,spark官方并未有hdfs的替代方案。资源管理调度,spark有自己的想法,但远远达不到生产阶段。除了standnode,还是得深度依赖mesos和yarn。实际上,spark只是hadoop的一个有益补充,如果真的要说替代的话,也只能说是替代mapreduce和storm。
spark的优势体现在:
1:内存计算。这是最广为人知的一点。但是spark在宽依赖的时候也得进行suffle,面且所说,hadoop3.0也引入了内存计算。内存计算绝不是spark引以为傲的优势。据说,在资源紧张spark根本没有多少内存进行计算的情况下,同样的配置和数据条件下,spark依然比mapreduce效率高。(据官网,内存计算,spark效率是mapreduce10-100倍,磁盘计算,spark效率是mapreduce10倍,非内存计算没有测试过)
2:弱化了批处理和实时计算。在spark诞生之前,大数据分成了泾渭分明的两大阵营。批处理和实时,分别以hadoop(mapreduce)和storm为代表。spark以spark sql和spark streaming将两者整合了起来。当然,这里的弱化绝不仅仅是简单的将实时和批处理技术整合成一家。spark创造性的将数据整合为RDD,可大可小,时间可以自行设置。在spark里,数据将是流动的,各种RDD可以自由组合计算。
3:DAG。当然DAG是一种编程思想,并非spark独有。DAG加RDD为spark带来了高容错的特性。如果处理失败,只需恢复失败的RDD即可。
4:得益于scala语言的简洁强大,spark提供了许多强大的算子。hadoop只提供了map及reduce(shuffle阶段除外),storm trident提供了更多的算子,但是效率是个问题。比如,wordcount的例子,分别用mapreduce,storm和spark开发,开发效率上spark会有很大的优势。
5:storm进行批处理(minibath)的trident效率低,容错低。它是将数据缓存到本地,而streaming提供了更多的选择,比如streaming提供了lazy的kafka driect api。效率更高,容错更高,占用资源更少。
参考:
http://www.36dsj.com/archives/61155
http://blog.csdn.net/wo334499/article/details/51689549
spark基本组件与概念的更多相关文章
- Spark各个组件的概念,Driver进程
spark应用涉及的一些基本概念: 1.mater:主要是控制.管理和监督整个spark集群 2.client:客户端,将用应用程序提交,记录着要业务运行逻辑和master通讯. 3.sparkCon ...
- Spark集群基础概念 与 spark架构原理
一.Spark集群基础概念 将DAG划分为多个stage阶段,遵循以下原则: 1.将尽可能多的窄依赖关系的RDD划为同一个stage阶段. 2.当遇到shuffle操作,就意味着上一个stage阶段结 ...
- 大话Spark(1)-Spark概述与核心概念
说到Spark就不得不提MapReduce/Hadoop, 当前越来越多的公司已经把大数据计算引擎从MapReduce升级到了Spark. 至于原因当然是MapReduce的一些局限性了, 我们一起先 ...
- Kubernetes笔记(二):了解k8s的基本组件与概念
前文 Kubernetes笔记(一):十分钟部署一套K8s环境 介绍了如何快速搭建一个k8s系统.为了继续使用k8s来部署我们的应用,需要先对k8s中的一些基本组件与概念有个了解. Kubernete ...
- Spark 生态系统组件
摘要: 随着大数据技术的发展,实时流计算.机器学习.图计算等领域成为较热的研究方向,而Spark作为大数据处理的“利器”有着较为成熟的生态圈,能够一站式解决类似场景的问题.那你知道Spark生态系统有 ...
- Spark中的一些概念
最近工作用到Spark,这里记一些自己接触到的Spark基本概念和知识. 本文链接:https://www.cnblogs.com/hhelibeb/p/10288915.html 名词 RDD:在高 ...
- 【Spark 深入学习 -09】Spark生态组件及Master节点HA
----本节内容------- 1.Spark背景介绍 2.Spark是什么 3.Spark有什么 4.Spark部署 4.1.Spark部署的2方面 4.2.Spark编译 4.3.Spark St ...
- [Spark RDD_1] RDD 基本概念
0. 说明 RDD 概述 && 创建 RDD 的方式 && RDD 编程 API(Transformation 和 Action Operations) &&a ...
- spark的一些基本概念和模型
Application application和Hadoop MapReduce类似,都是指用户编写的spark应用程序,其中包含了一个driver功能的代码和分布在集群中多个节点运行的executo ...
随机推荐
- 《算法》第六章部分程序 part 5
▶ 书中第六章部分程序,包括在加上自己补充的代码,网络最大流 Ford - Fulkerson 算法,以及用到的流量边类和剩余流量网络类 ● 网络最大流 Ford - Fulkerson 算法 pac ...
- laravel 的 intervention-image 图像处理笔记
安装: https://blog.csdn.net/beyond__devil/article/details/62230610 需求: PHP >= 5.4 Fileinfo 扩展 GD库 & ...
- Android将Log写入文件
为什么要将Log写入文件 运行应用程序的时候,大多数是不会连接着IDE的: 而当应用程序崩溃时,我们需要收集复现步骤,在设备上复现,并进行Debug: 而由于Android手机的多样性,有些问题是某个 ...
- Python中续行符的注意事项
转载自:https://blog.csdn.net/g_66_hero/article/details/78745608
- Gson 解决时间解析问题
异常: at org.eclipse.jdt.) at org.eclipse.jdt.) Caused by: java.text.ParseException: Failed to parse d ...
- sql server 语法 MSDN
https://docs.microsoft.com/en-us/sql/t-sql/statements/create-view-transact-sql
- JEECG 3.7.3 新春版本发布,企业级JAVA快速开发平台
JEECG 3.7.3新春版本发布 - 微云快速开发平台 导读 ⊙精美Echart报表 ⊙二维码生成功能 ⊙Online接口改造采用JWT机制 ⊙智能菜单搜索 ⊙代码生成器模板优 ...
- Dictionary转为Model实例
Dictionary<string, object> dic = new Dictionary<string, object>(); dic.Add(); dic.Add(&q ...
- JS中,如何判断一个被转换的数是否是NaN
var x="abc"; //isNaN()函数判断是否是NaN if (isNaN(parseInt(x))) { alert("非数字"); } else{ ...
- Unity 菜单拓展
添加自定义菜单项 [MenuItem("test/item1 %g")] public static void haha() { Debug.Log("this is a ...