Spark概述
Spark定义
spark是一种基于内存的快速、通用、可扩展S的大数据分析计算引擎
Spark Core 中提供了Spark最基础核心的功能 Spark SQL是Spark用来操作结构化数据的组件 Spark Streaming是Spark平台上针对实时数据进行流式计算的组件,提供了丰富的处理数据流的ApI
Spark和Hadoop
Spark和Hadoop 的根本差异是多个作业之间的数据通信问题 : Spark 多个作业之间数据通信是基于内存,而 Hadoop 是基于磁盘。
Hadoop mapreduce在并行运行的苏剧可复用场景存在很多计算效率问题,Spark在Hadoop的MapReduce计算框架基础上而诞生,大大加快了数据分析,数据挖掘和读写速度,将计算单元缩小到更适合并行计算和重复使用的RDD计算模型
Spark是一个分布式数据快速分析项目,核心技术就是弹性分布式数据集RDD,提供了比MR丰富的模型,可以快速在内存中对数据集进行多次迭代,来支持复杂的数据挖掘算法和图像计算算法
Spark只有在shuffle的时候会将数据写入磁盘当中,而Hadoop的MR作业需要依赖磁盘交互,Spark的缓存机制比HDFS的更高效
Spark核心模块
Spark Core
Spark Core 中提供了 Spark 最基础与最核心的功能,Spark 其他的功能如:Spark SQL,
Spark Streaming,GraphX, MLlib 都是在 Spark Core 的基础上进行扩展的
➢ Spark SQL
Spark SQL 是 Spark 用来操作结构化数据的组件。通过 Spark SQL,用户可以使用 SQL
或者 Apache Hive 版本的 SQL 方言(HQL)来查询数据。
➢ Spark Streaming
Spark Streaming 是 Spark 平台上针对实时数据进行流式计算的组件,提供了丰富的处理
数据流的 API。
➢ Spark MLlib
MLlib 是 Spark 提供的一个机器学习算法库。MLlib 不仅提供了模型评估、数据导入等
额外的功能,还提供了一些更底层的机器学习原语。
➢ Spark GraphX
GraphX 是 Spark 面向图计算提供的框架与算法库。
Spark运行环境
本地模式
将Hadoop2.7.6的压缩包解压到指定目录文件夹,在bin文件下添加winutils.exe
在idea添加依赖,Scala相应的插件也要下载,下载后重启idea就好了
<dependencies>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>2.11.12</version>
</dependency>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-compiler</artifactId>
<version>2.11.12</version>
</dependency>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-reflect</artifactId>
<version>2.11.12</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.40</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-core -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.4.5</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- Java Compiler -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<!-- Scala Compiler -->
<plugin>
<groupId>org.scala-tools</groupId>
<artifactId>maven-scala-plugin</artifactId>
<version>2.15.2</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
简单的测试一下本地运行是否成功
package sparkcore
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object Demo01WordCount {
def main(args: Array[String]): Unit = {
/**
* 1、创建是spark的环境
*/
//spark配置文件对象
val conf = new SparkConf()
//任务名
conf.setAppName("wc")
//指定运行方法local:本地运行
conf.setMaster("local")
//创建spark上下文对象,spark入口
val sc = new SparkContext(conf)
/**
* RDD:弹性的分布式数据集
* 可以理解为一个集合
*/
//1、读取数据
val linesRDD: RDD[String] = sc.textFile("data/words.txt")
//2、将单词切分出来
val wordsRDD: RDD[String] = linesRDD.flatMap(line => line.split(","))
//3、按照单词进行分组
val groupRDD: RDD[(String, Iterable[String])] = wordsRDD.groupBy(word => word)
//4、统计单词的数量
val countRDD: RDD[(String, Int)] = groupRDD.map {
case (word: String, ws: Iterable[String]) =>
//计算单词的数量
val count: Int = ws.size
(word, count)
}
//5、整理数据
val resultRDD: RDD[String] =countRDD.map {
case (word: String, count: Int) =>
word + "\t" + count
}
//5、保存数据
resultRDD.saveAsTextFile("data/wc")
}
}
在说RDD之前先复习一遍mapreduce