Spark是一种基于内存的快速、通用、可扩展的大数据分析计算引擎
Spark的主要功能是用于数据计算,所以Spark一直被认为是 Hadoop 框架的升级版
Spark在传统 MapReduce 计算框架的基础上,利用其计算过程的优化,大大加快了数据分析、挖掘的运行和读写速度,并将计算单元缩小到更适合并行计算和重复使用的RDD计算模型
Spark和Hadoop的根本差异是多个作业之间的数据通信问题:Spark多个作业之间的数据通信是基于内存,而Hadoop是基于磁盘
在绝大多数计算场景中,Spark比MapRudecu更有优势,但Spark是基于内存的,所以在实际生产环境的部署中对内存资源的要求更高
实现思路
实现代码
// 建立和Spark框架的连接
val sparConf = new SparkConf().setMaster("local").setAppName("WordCount")
val sc = new SparkContext(sparConf)
// 1. 读取文件,逐行读取数据
val lines: RDD[String] = sc.textFile("1.txt")
// 2. 将每行数据拆分为一个个单词
val words: RDD[String] = lines.flatMap( .split(" "))
// 3. 单词进行转换 (hello,1)
val wordToOne = words.map{
word => (word, 1)
}
// 4.对相同的key的value作聚合,极简原则
val wordToCount = wordToOne.reduceByKey(_+_)
// 5. 转换结果采集到控制台打印
val array: Array[(String, Int)] = wordToCount.collect()
array.foreach(print)
// 关闭Spark连接
sc.stop()

Spark采用了master-slave结构
Driver为master,负责管理整个集群中的作业调度:
Executor为slave,负责实际执行任务:
Master:负责资源的调度和分配,并进行集群的监控
Worker:由Master分配资源对数据进行处理和计算
ApplicationMaster:Driver通过ApplicationMaster向Master申请资源,实现计算和资源的解耦