数据结构

核心之数据集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基本组件与概念的更多相关文章

  1. Spark各个组件的概念,Driver进程

    spark应用涉及的一些基本概念: 1.mater:主要是控制.管理和监督整个spark集群 2.client:客户端,将用应用程序提交,记录着要业务运行逻辑和master通讯. 3.sparkCon ...

  2. Spark集群基础概念 与 spark架构原理

    一.Spark集群基础概念 将DAG划分为多个stage阶段,遵循以下原则: 1.将尽可能多的窄依赖关系的RDD划为同一个stage阶段. 2.当遇到shuffle操作,就意味着上一个stage阶段结 ...

  3. 大话Spark(1)-Spark概述与核心概念

    说到Spark就不得不提MapReduce/Hadoop, 当前越来越多的公司已经把大数据计算引擎从MapReduce升级到了Spark. 至于原因当然是MapReduce的一些局限性了, 我们一起先 ...

  4. Kubernetes笔记(二):了解k8s的基本组件与概念

    前文 Kubernetes笔记(一):十分钟部署一套K8s环境 介绍了如何快速搭建一个k8s系统.为了继续使用k8s来部署我们的应用,需要先对k8s中的一些基本组件与概念有个了解. Kubernete ...

  5. Spark 生态系统组件

    摘要: 随着大数据技术的发展,实时流计算.机器学习.图计算等领域成为较热的研究方向,而Spark作为大数据处理的“利器”有着较为成熟的生态圈,能够一站式解决类似场景的问题.那你知道Spark生态系统有 ...

  6. Spark中的一些概念

    最近工作用到Spark,这里记一些自己接触到的Spark基本概念和知识. 本文链接:https://www.cnblogs.com/hhelibeb/p/10288915.html 名词 RDD:在高 ...

  7. 【Spark 深入学习 -09】Spark生态组件及Master节点HA

    ----本节内容------- 1.Spark背景介绍 2.Spark是什么 3.Spark有什么 4.Spark部署 4.1.Spark部署的2方面 4.2.Spark编译 4.3.Spark St ...

  8. [Spark RDD_1] RDD 基本概念

    0. 说明 RDD 概述 && 创建 RDD 的方式 && RDD 编程 API(Transformation 和 Action Operations) &&a ...

  9. spark的一些基本概念和模型

    Application application和Hadoop MapReduce类似,都是指用户编写的spark应用程序,其中包含了一个driver功能的代码和分布在集群中多个节点运行的executo ...

随机推荐

  1. 《算法》第六章部分程序 part 5

    ▶ 书中第六章部分程序,包括在加上自己补充的代码,网络最大流 Ford - Fulkerson 算法,以及用到的流量边类和剩余流量网络类 ● 网络最大流 Ford - Fulkerson 算法 pac ...

  2. laravel 的 intervention-image 图像处理笔记

    安装: https://blog.csdn.net/beyond__devil/article/details/62230610 需求: PHP >= 5.4 Fileinfo 扩展 GD库 & ...

  3. Android将Log写入文件

    为什么要将Log写入文件 运行应用程序的时候,大多数是不会连接着IDE的: 而当应用程序崩溃时,我们需要收集复现步骤,在设备上复现,并进行Debug: 而由于Android手机的多样性,有些问题是某个 ...

  4. Python中续行符的注意事项

    转载自:https://blog.csdn.net/g_66_hero/article/details/78745608

  5. Gson 解决时间解析问题

    异常: at org.eclipse.jdt.) at org.eclipse.jdt.) Caused by: java.text.ParseException: Failed to parse d ...

  6. sql server 语法 MSDN

    https://docs.microsoft.com/en-us/sql/t-sql/statements/create-view-transact-sql

  7. JEECG 3.7.3 新春版本发布,企业级JAVA快速开发平台

    JEECG 3.7.3新春版本发布 -  微云快速开发平台 导读           ⊙精美Echart报表 ⊙二维码生成功能 ⊙Online接口改造采用JWT机制 ⊙智能菜单搜索 ⊙代码生成器模板优 ...

  8. Dictionary转为Model实例

    Dictionary<string, object> dic = new Dictionary<string, object>(); dic.Add(); dic.Add(&q ...

  9. JS中,如何判断一个被转换的数是否是NaN

    var x="abc"; //isNaN()函数判断是否是NaN if (isNaN(parseInt(x))) { alert("非数字"); } else{ ...

  10. Unity 菜单拓展

    添加自定义菜单项 [MenuItem("test/item1 %g")] public static void haha() { Debug.Log("this is a ...