Spark简介
Spark是什么
Spark是一个快读且通用的集群计算平台
Spark的特点
Spark应用程序可以使用R语言、Java、Scala和Python进行编写,极少使用R语言编写Spark程序,Java和Scala语言编写的Spark程序的执行效率是相同的,但Java语言写的代码量多,Scala简洁优雅,但可读性不如Java,Python语言编写的Spark程序的执行效率不如Java和Scala。
Spark是快速的
- Spark扩充了流行的MapReduce计算模型
- Spark是基于内存的计算
Spark是通用的
- Spark的设计容纳了其他分布式系统拥有的功能
- 批处理,迭代式计算,交互查询和流处理等
- 优点:降低了维护成本
Spark是高度开放的
- Spark提供了Python,Java,Scala,Sql的API和丰富的内置库。
- Spark和其他的大数据工具整合的很好,包括hadoop,kafka等
Spark有4中运行模式
- local模式,适用于测试
- standalone,并非是单节点,而是使用spark自带的资源调度框架
- yarn,最流行的方式,使用yarn集群调度资源
- mesos,国外使用的多
Spark生态
Spark历史
Spark是美国加州大学伯克利分校的AMP实验室(主要创始人lester和Matei)开发的通用的大数据处理框架。
Spark的组件
Spark包括多个紧密集成的组件:
Spark Core:
包含Spark的基本功能,包含任务调度,内存管理,容错机制等。
内部定义了RDDs(弹性分布式数据集)。
提供了很多APIs来创建和操作这些RDDs。
应用场景:为其他组件提供底层的服务。
Spark SQL:
是Spark处理结构化数据的库,就像Hive SQL,MySQL一样。
应用场景:企业中用来做报表统计
Spark Streaming:
是实时数据流处理组件,类似Storm。
Spark Streaming提供了API来操作实时流数据。
应用场景:企业中用来从kafka接受数据做实时统计。
Milb:
一个包含通用机器学习功能的包,Machine learning lib
包含分类,聚类,回归等,还包括模型评估,和数据导入
MLlib提供的上面的这些方法,都支持集群上的横向扩展
平常我们做机器学习用Python较多,Python最大的缺点是在单机上的,它处理的数据是有限的,而Milb是基于集群的
应用场景,机器学习
Graphx:
是处理图的库(例如,社交网络图),并进行图的并行计算。
像Spark Streaming,Spark SQL一样,它也继承了RDD API。
它提供了各种图的操作,和常用的图算法,例如PageRank算法。
应用场景,图计算。
Cluster Managers:
就是集群管理,Spark自带一个集群管理是单独调度器。
常见集群管理包括Hadoop YARN,Apache Mesos
紧密继承的优点:
- Spark底层优化了,基于Spark底层的组件,也得到了相应的优化。
- 紧密集成,节省了各个组件结合使用时的部署,测试等时间。
- 向Spark增加新的组件时,其他组件,可立即享用新组建的功能
Spark与Hadoop的比较
Hadoop的应用场景
离线处理
Hadoop在处理数据的时候它的中间数据会落到硬盘上,因此导致Hadoop处理大量数据时时效性不是很高。
Hadoop任务的执行时间是几分钟到几小时不等
对时效性要求不高
Spark应用场景
时效性要求高的场景
因为Spark是基于内存的,它的中间数据尽量不落在磁盘上,尽量落在内存中,这样就大大加快了Spark的运算速度
Spark的计算时间一般是几秒钟到几分钟
机器学习等领域
- 这是一整个生态系统,每个组件都有其作用,各善其职即可
- Spark不具有HDFS的存储能力,要借助HDFS等持久化数据
- 大数据将会孕育出更多的新技术
RDDs介绍
Driver program:
包含程序的main()方法,RDDs的定义和操作。 它管理很多节点,我们称作executors
SparkContext:
Driver programs通过SparkContext对象访问Spark。
SparkContext对象代表和一个集群的连接。
在Shell中SparkContext自动创建好了,就是sc。
RDDs:
Resilient distributed datasets(弹性分布式数据集,简写RDDs)
这些RDDs,并行的分布在整个集群中
RDDs是Spark分发数据和计算的基础抽象类。
一个RDD是一个不可改变的分布式集合对象
Spark中,所有的计算都是通过RDDs的创建,转换,操作完成的。
一个RDD内部由许多partitions(分片)组成。
分片:
每个分片包括一部分数据,partitions可在集群不同节点上计算
分片是Spark并行处理的单元,Spark顺序的,并行的处理分片
RDDs的创建方法:
把一个存在的集合传给SparkContext的parallelize()方法,测试用
val rdd = sc.parallelize(Array(1,2,2,4),4)
第一个参数:待并行化处理的集合,第二个参数:分区个数
加载外部数据集。
val rddText = sc.textFile("helloSpark.txt")
Scala的基础知识
Scala的变量声明:
在Scala中创建变量的时候,必须使用val或者var
val,变量值不可修改,一旦分配不能重新指向别的值
var,分配后,可以指向类型相同的值
Scala的匿名函数和类型推断:
lines.filter(line=>line.contains("world"))
定义一个匿名函数,接受一个参数line,
使用line这个String类型变量上的contains方法,并且返回结果。
line的类型不需指定,能够推断出来。
RDD基本操作之Transformation
Transformation介绍:
Transformations(转换)
从之前的RDD构建一个新的RDD,像map()和filter().
map():
map()接受函数,把函数应用到RDD的每一个元素,返回新RDD。
filter():
filter()接受函数,返回只包含满足filter()函数的元素的新RDD。
flatMap():
对每个输入元素,输出多个输出元素。
flat压扁的意思,将RDD中元素压扁后返回一个新的RDD.
RDD基本操作之Action
Action介绍:
在RDD上计算出来一个结果。
把结果返回给driver program或保存在文件系统,count(),save
常用函数举例:
reduce()
接收一个函数,作用在RDD两个类型相同的元素上,返回新元素。 可以实现,RDD中元素的累加,计数,和其他类型的聚集操作。
Collect():
遍历整个RDD,向driver program返回RDD的内容
需要单机内存能够容纳下(因为数据要拷贝给driver,测试使用)
大数据的时候,使用savaAsTextFile() action等。
take(n):
返回RDD的n个元素(同时尝试访问最少的partitions)
返回结果是无序的,测试使用
top():
排序(根据RDD中数据的比较器)
foreach():
计算RDD中的每个元素,但不返回到本地。
可以配合println()友好的打印出数据。
RDDs的特性
RDDs的血统关系图:
Spark维护者RDDs之间的依赖关系和创建关系,叫做血统关系图
Spark使用血统关系图来计算每个RDD的需求和恢复丢失的数据
延迟计算(Lazy Evaluation):
Spark对RDDs的计算是,他们第一次使用action操作的时候
这种方式在处理大数据的时候特别有用,可以减少数据的传输
Spark内部记录metadata表名transformations操作已经被响应了
加载数据也是延迟计算,数据只有在必要的时候,才会被加载进去
RDD.persist():
默认每次在RDDs上面进行action操作时,Spark都重新计算RDDs
如果想重复利用一个RDD,可以使用RDD.persist()
unpersist()方法从缓存中移除
例子-peisist()
分享到:
相关推荐
初识Spark入门 Spark是一种基于内存的通用并行计算框架,目标是让数据分析更加快速。Spark包含了大数据领域常见的各种计算框架,包括spark core(离线计算)、spark sql(交互式查询)、spark streaming(实时计算...
压缩包内的文件名称表明,资料详细介绍了从初识Spark集群搭建,到逐步构建分布式Spark集群的过程,可能涵盖的内容包括: - **Spark实战高手之路(1):如何搭建Spark集群.pdf**:这部分可能会详细讲解从零开始搭建...
1、初识 Spark 1)背景 Spark 是大数据处理领域中的一个重要工具,它诞生于加州大学伯克利分校AMPLab,旨在解决 Hadoop MapReduce 在处理实时数据流和交互式查询时的性能瓶颈。MapReduce 的计算模式在处理大规模...
总的来说,这些资料构成了一个完整的Spark学习路径,从理论知识到实践操作,从初识到精通,对于想要进入Spark领域的学习者来说是一套宝贵的资源。通过深入学习和实践,你将能够掌握Spark的强大功能,解决实际的大...
第1章 课程介绍 第2章 初识实时流处理 第3章 分布式日志收集框架Flume 第4章 分布式发布订阅消息系统Kafka 第5章 实战环境搭建 第6章 Spark Streaming入门 第7章 Spark Streaming核心概念与编程 第8章 Spark ...
首先,我们从"0501 Spark 初识入门"开始。这部分内容通常会介绍Spark的基本概念和架构。Spark的核心设计原则是快速数据处理,它通过内存计算大幅提高了数据处理速度,比传统的MapReduce模型快上许多倍。Spark主要由...
第2章 初识实时流处理 第3章 分布式日志收集框架Flume 第4章 分布式发布订阅消息系统Kafka 第5章 实战环境搭建工欲善其事必先利其器 第6章 Spark Streaming入门 第7章 Spark Streaming核心概念与编程 第8章 Spark ...
Apache Spark 是一款强大的分布式计算系统,专为大规模数据处理设计,旨在提高数据处理的速度和效率。Spark 的核心优势在于其内存计算的能力,这使其相比传统的MapReduce模型在性能上有显著提升。本篇文章将对Spark...
Spark的初识特性包括其速度比传统Hadoop MapReduce快100倍,易于使用,并且可以使用Java、Scala、Python、R和SQL等多种语言编程。Spark的通用性体现在它能够结合SQL、实时流处理和复杂分析,支持多种数据源和计算...
(1)一组分片(Partition),即数据集的基本组成单位 (2)一个计算每个分区的函数 (3)RDD之间的依赖关系 (4)一个Partitioner,即RD
### RDD初识 1. **创建RDD**:通过`sc.makeRDD`或`sc.parallelize`创建RDD。例如: ```scala val rdd = sc.makeRDD(Array(1, 2, 3)) val rddParallelized = sc.parallelize(Array(1, 2, 3)) ``` 2. **查看RDD...
1.初识Hadoop 2.第一个MapReduce程序 3.Hive 4.把别处的数据搞到Hadoop上 5.把Hadoop上的数据搞到别处去 6.SparkSQL 7.Kafka 8.Oozie 9.Storm,Spark Streaming 10.对外提供数据 11.机器学习 12.Spark SQL On Hadoop...
【初识HBase】 HBase,全称Hadoop Database,是一种构建在Hadoop文件系统(HDFS)之上的分布式列式存储系统。它源于Google的Bigtable论文,旨在解决大数据量场景下的数据存储和检索问题。HBase不同于传统的关系型...
标题中的“Initiation à Spark avec Java 8 et Scala”表明这是一个关于使用Java 8和Scala初识Apache Spark的实践教程,源自2015年的Devoxx France技术大会。Apache Spark是一个分布式计算框架,用于大数据处理,...
Spark版本升级 第2章 初识实时流处理 一、业务现状分析 二、离线与实时对比 三、框架对比 四、架构与技术选型 五、应用 第3章 分布式日志收集框架Flume 一、业务现状分析 二、Flume架构及核心组件 三、Flume&JDK环境...
### 初识Hadoop知识点详解 #### 一、大数据概览 **1. 大数据定义** - **概念解析**:大数据的概念并非特指某个具体的数据量级,而是指那些无法用传统的数据处理工具进行有效捕捉、管理和处理的数据集合。这种...
Spark SQL是Spark用来处理结构化数据的一个模块,它提供了一个编程抽象叫做DataFrame并且作为分布式SQL查询引擎的作用。 与HiveSql的区别:Hive SQL是通过转换成MapReduce任务,然后提交到集群上执行,简化了编写...
离线计算则针对海量数据,常使用MapReduce或Spark等框架进行批处理,特点是处理的数据量巨大且涉及多维度的分析。 数据分析阶段,通常采用SQL语言对已处理的数据进行交互式分析,以提取有价值的洞察。同时,数据...
初识 Druid ##### 1.1 Druid 是什么? - **背景与起源**:Druid 由美国广告技术公司 MetaMarkets 创建于 2011 年,并于 2012 年末开源。其设计初衷是为了满足实时数据分析的需求,特别是在数据规模和实时处理能力...