什么是Spark
Spark是一种基于内存
的快速的,通用的,可扩展的大数据分析引擎
Spark内存模块
![](https://img.haomeiwen.com/i13369429/3dd21924903bc8de.png)
Spark特点
快
:与Hadoop和MapReduce响度,Spark基于内存运算要快100倍以上,基于硬盘的运算要快10倍以上,Spark实现了高效的DAG执行引擎,可以通过基于内存来高效处理数据流,计算的中间结果是存在内存
中的
易用
: Spark支持Java,Python和Scala的API,还支持超过80中的高级算法,使用户可以快速构建不同的应用,而且Spark支持交互式的Python和Scala的Shell,可以非常方便的再这些Shell中使用Spark集群来验证解决问题。
通用
: Spark提供了同意的解决方案,Spark可以用于处理,交互式查询,实时处理,机器学习,图计算,这些不同类型的处理都可以在同一个应用中无缝使用,减少开发和维护的人力成本。
兼容
: Spark可以非常方便的与其他开元产品进行融合,比如,Spark可以使用Hadoop的yarn和Apache Mesos作为它的资源管理器和调度器,并且可以处理所有的Hadoop支持数据。包括HDFS,Hbase等。
Spark的安装地址
1.官网地址
2.文档查看地址
https://spark.apache.org/docs/2.1.1/
3.下载地址
https://spark.apache.org/downloads.html
角色
Driver(驱动器)
Spark的驱动器是执行开发程序中的main方法的进程。它负责开发人员编写的用来创建SparkContext、创建RDD,以及进行RDD的转化操作和行动操作代码的执行。如果你是用spark shell,那么当你启动Spark shell的时候,系统后台自启了一个Spark驱动器程序,就是在Spark shell中预加载的一个叫作 sc的SparkContext对象。如果驱动器程序终止,那么Spark应用也就结束了。主要负责:
1)把用户程序转为作业(JOB)
2)跟踪Executor的运行状况
3)为执行器节点调度任务
4)UI展示应用运行状况
Executor(执行器)
Spark Executor是一个工作进程,负责在 Spark 作业中运行任务,任务间相互独立。Spark 应用启动时,Executor节点被同时启动,并且始终伴随着整个 Spark 应用的生命周期而存在。如果有Executor节点发生了故障或崩溃,Spark 应用也可以继续执行,会将出错节点上的任务调度到其他Executor节点上继续运行。主要负责:
1)负责运行组成 Spark 应用的任务,并将结果返回给驱动器进程;
2)通过自身的块管理器(Block Manager)为用户程序中要求缓存的RDD提供内存式存储。RDD是直接缓存在Executor进程内的,因此任务可以在运行时充分利用缓存数据加速运算。
![](https://img.haomeiwen.com/i13369429/25fa5a73402e9682.png)
Yarn模式
Spark客户端直接连接Yarn,不需要额外构建Spark集群。有yarn-client和yarn-cluster两种模式,主要区别在于:Driver程序的运行节点。
yarn-client
:Driver程序运行在客户端,适用于交互、调试,希望立即看到app的输出
yarn-cluster
:Driver程序运行在由RM(ResourceManager)启动的AP(APPMaster)适用于生产环境。
![](https://img.haomeiwen.com/i13369429/48f5bec8abfdbb54.png)
几种模式的对比
模式 | Spark机器安装数 | 需要启动的进程 | 所属者 |
---|---|---|---|
local | 1 | 无 | Spark |
Standlone | 3 | Master及Worker | Spark |
Yarn | 1 | Yarn及Hdfs | Hadoop |
Java编写一个本地的Spark应用
创建一个Maven项目WordCount并导入依赖
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.1.1</version>
</dependency>
</dependencies>
<build>
<finalName>WordCount</finalName>
<plugins>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>3.2.2</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
用wordCount例子来举证
package com.leon.bigdata.spark
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object WordCount {
def main(args: Array[String]): Unit = {
val sparkConfig = new SparkConf().setMaster("local[*]").setAppName("WordCount")
val sc = new SparkContext(sparkConfig)
val lines: RDD[String] = sc.textFile("./SparkDemo/data")
val words = lines.flatMap(_.split(" "))
val wordsMap = words.map((_,1))
val wordsSum = wordsMap.reduceByKey((_+_))
val result: Array[(String, Int)] = wordsSum.collect()
result.foreach(println)
}
}
网友评论