Spark环境的安装
一、 Spark简介
1.1 Spark是什么
是一种基于内存的快速、通用、可拓展的大数据分析计算引擎。
1.2 Hadoop 和 Spark关联
- hadoop :2013年10月发布2.X (Yarn)版本;
- spark : 2013年6月,Spark成为了Apache基金会下的项目。
- Spark可以理解为hadoop MR的升级版。
1.2.1 hadoop发展历史
-- 1.X 版本 --2011年发布
从架构的角度存在很多的问题
1. Namenode 是单点操作,所以容易出现单点故障,制约了HDFS的发展
2. Namenode的内存限制也影响了HDFS的发展
3. MapReduce是一种基于数据集的工作模式,面向数据,这种工作模式一般是从存储上加载数据集,然后操作数据集,最后将结果写入物理存储设备。数据更多面临的是一次性计算,所以初衷是单一数据计算,不支持迭代计算
4. 资源调度和任务调度耦合在一起,无法扩展,所以Hadoop1.X版本只支持MR计算框架
-- 2.X 版本(Yarn) --2013.10月发布
1. 2.X版本支持Namenode高可用
2. 2.X版本使用新的资源调度框架Yarn,只做资源调度,不进行任务调度。
3. MR框架只做任务调度,可插拔,所以扩展性非常的强
1.2.2 Spark 技术
Spark其实核心思想就是基于MR的,优化了MR数据处理的中间过程,提升了数据处理的性能
MR:多任务之间的数据会进行落盘
Spark:多任务之间的数据会在内存中。
因为内存大小也有上限的,当内存不足时,就会出现job运行失败,所以Spark并不是完全替代MR。
- MR和Spark区别
- Spark的特点
1. spark计算模型更加丰富,MR只有mapper和reducer, spark的计算模型模糊了mapper和reduce的界限,更容易使用;
2. spark使用scala语言开发,支持函数式编程,所以就更利用迭代式计算.
3. spark也有自己的任务调度器和资源调度器。
1.2.3 Spark On Yarn
在实际开发中,hadoop和Spark合二为一。
调度器:Hadoop的Yarn
任务执行:Spark的任务调度,Driver和Executor
1.3 Spark的核心框架
- Apache Spark Core : 最基础和最核心的功能
- Spark SQL :用于处理关系型数据库
- Spark Streaming:针对实时数据的处理流式计算的框架,Flink框架更有优势
- Spark MLlib: 机器学习
- Spark Graphx:面向图形计算
我们重点学习Spark前面三个框架。
二、Spark快速上手
创建Maven工程
2.1 增加Scala插件
--当前使用的Spark版本为2.4.5,默认采用的Scala版本为2.12
2.2 增加依赖关系
--修改Maven项目中的POM文件,增加Spark框架的依赖关系。当前文件是基于Spark2.4.5版本,使用时请注意对应版本
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.12</artifactId>
<version>2.4.5</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 该插件用于将Scala代码编译成class文件 -->
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>3.2.2</version>
<executions>
<execution>
<!-- 声明绑定到maven的compile阶段 -->
<goals>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins