文章目录
- 1.Spark介绍
- 1.1 Spark核心模块
- 1.2 使用Spark写一个WordCount
- 1.2 Spark运行环境
- 1.2.1 Local模式
- 1.2.2 Standalone 模式
- 1.2.3 高可用模式(HA)模式
- 1.2.4 Yarn模式
1.Spark介绍
Hadoop中的MapReduce框架在设计之初并不是为了满足循环迭代式数据流处理,因此在多并行运行的数据可复用场景(如:机器学习,图像挖掘算法、交互式数据挖掘算法)中存在诸多效率问题。所以Spark就是在传统的MR计算框架的基础上,利用其计算过程的优化,从而大大加快了数据分析、挖掘的运行和读写速度,并且将计算单元缩小到更适合并行计算和重复使用的RDD模型。
Spark和Hadoop的根本差异就在于多个作业(job)之间的数据通信问题:Spark多个作业之间数据通信是基于内存的,而Hadoop框架是基于磁盘的。
1.1 Spark核心模块
Spark Core
Spark Core中提供了Spark最基本和核心的功能,Spark其他的功能都是在Spark Core的基础上进行扩展的。
Spark SQL
Spark SQL是Spark用来操作结构化数据的组件,通过Spark SQL,用户可以使用SQL或者HQL来查询数据
Spark Streaming
Spark Streaming是Spark平台上针对实时数据进行流式计算的组件,提供了丰富的处理数据流的API
Spark MLlib
Spark MLlib是Spark提供的一个机器学习的算法库,MLlib不仅提供了模型评估,数据导入等额外的功能,还提供了一些机器学习的原语
Spark GraphX
GraphX是Spark面向图计算提供的框架和算法库
1.2 使用Spark写一个WordCount
package com.atguigu.bigdata.spark.core
import org.apache.spark.{SparkConf, SparkContext}
class Spark_demo_WordCount {
}
object Spark_demo_WordCount{
def main(args: Array[String]): Unit = {
System.setProperty("hadoop.home.dir", "E:\\BigDataLearn\\hadoop-3.2.3")
//1.建立和Spark框架的连接
val sparkConf=new SparkConf().setMaster("local").setAppName("WordCount")
val sc = new SparkContext(sparkConf)
//2.执行业务操作
// //读取数据,一行一行的获取数据
// val lines = sc.textFile("datas")
//
// //将一行一行的数据拆分(扁平化操作)
// val words = lines.flatMap((lines: String) =>
// lines.split(" ")
// )
//
// //将数据根据单词进行分组,便于统计
// val wordGroup = words.groupBy((word: String) => word)
//
// //对分组后的数据进行转化
// val value = wordGroup.map((tuple) => {
// (tuple._1, tuple._2.size)
// })
//
//
// //将转换结果采集到控制台打印
// for( e<-value)
// {
// println(e)
// }
//wordcount不同的实现
val lines = sc.textFile("datas")
val words = lines.flatMap((line: String) => line.split(" "))
val wordTuple = words.map((w:String)=>{
(w,1)
})
val wordGroup = wordTuple.groupBy((tuple) => {
tuple._1
})
for(e<-wordGroup)
{
println(e)
}
val value = wordGroup.map {
case (key:String, list:Iterable[(String,Int)]) => {
list.reduce((t1, t2) => {
(t1._1, t1._2 + t2._2)
})
}
}
val tuples = value.collect()
for(e<-tuples)
{
println(e)
}
//3.spark关闭连接
sc.stop()
}
}
1.2 Spark运行环境
Spark作为一个数据处理框架和计算引擎,被设计在所有的集群环境中运行,在国内工作中主流的环境为yarn,不过逐渐容器式的环境也慢慢流行起来。
1.2.1 Local模式
所谓的Local模式,就是不需要其他任何节点资源就可以在本地执行Spark代码的环境,一般用于教学,调试和演示等。
1.2.2 Standalone 模式
local 本地模式毕竟只是用来进行练习演示的,真实工作中还是要将应用提交到对应的
集群中去执行,这里我们来看看只使用 Spark 自身节点运行的集群模式,也就是我们所谓的
独立部署(Standalone)模式。Spark 的 Standalone 模式体现了经典的 master-slave 模式。
1.2.3 高可用模式(HA)模式
所谓的高可用是因为当前集群中的 Master 节点只有一个,所以会存在单点故障问题。所以为了解决单点故障问题,需要在集群中配置多个 Master 节点,一旦处于活动状态的 Master发生故障时,由备用 Master 提供服务,保证作业可以继续执行。这里的高可用一般采用Zookeeper 设置
1.2.4 Yarn模式
独立部署(Standalone)模式由 Spark 自身提供计算资源,无需其他框架提供资源。这
种方式降低了和其他第三方资源框架的耦合性,独立性非常强。但是你也要记住,Spark 主
要是计算框架,而不是资源调度框架,所以本身提供的资源调度并不是它的强项,所以还是
和其他专业的资源调度框架集成会更靠谱一些。所以接下来我们来学习在强大的 Yarn 环境
下 Spark 是如何工作的(其实是因为在国内工作中,Yarn 使用的非常多)。