一、Spark 概述
   
    Spark是一种
    
     基于内存的
    
    快速、通用、可扩展的大数据分析计算引擎
   
    
    
    1. Spark与Hadoop
   
    Spark的主要功能是用于
    
     数据计算
    
    ,所以Spark一直被认为是 Hadoop 框架的升级版
   
    Spark在传统 MapReduce 计算框架的基础上,利用其计算过程的优化,大大加快了数据分析、挖掘的运行和读写速度,并将计算单元缩小到更适合并行计算和重复使用的
    
     RDD计算模型
    
   
    Spark和Hadoop的根本差异是多个作业之间的数据通信问题:
    
     Spark多个作业之间的数据通信是基于内存,而Hadoop是基于磁盘
    
   
    在绝大多数计算场景中,Spark比MapRudecu更有优势,但Spark是基于内存的,所以在实际生产环境的部署中
    
     对内存资源的要求更高
    
   
    
    
    2. Spark核心模块
   
- 
     
 Spark Core
 
 :提供Spark最核心最基础的功能
- 
     
 Spark SQL
 
 :用来操作结构化数据
- 
     
 Spark Streaming
 
 :针对实时数据进行流失计算
- 
     
 Spark MLlib
 
 :机器学习算法库
- 
     
 Spark GraphX
 
 :面向图计算的库
    
    
    二、 WordCount
   
    实现思路
     
   
实现代码
// 建立和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核心组件
   
     
   
    
    
    1. 计算组件
   
Spark采用了master-slave结构
    
     Driver
    
    为master,
    
     负责管理整个集群中的作业调度
    
    :
   
- 将用户程序转换为job
- 在Executor之间调度任务task
- 跟踪Executor的执行情况
    
     Executor
    
    为slave,
    
     负责实际执行任务
    
    :
   
- Executors是运行在工作节点(Worker)中的一个JVM进程,是集群中专门用于计算的节点。
- 
     在提交应用中,可以通过参数指定计算节点的个数和使用的资源(
 
 内存大小和CPU核数
 
 )
- 可以通过自身的块管理器为RDD提供缓存,使任务在运行时充分利用缓存数据加速运算
    
    
    2. 资源组件
   
    
     Master
    
    :
    
     负责资源的调度和分
    
    配,并进行集群的监控
    
    
     Worker
    
    :由Master分配资源对数据进行处理和计算
   
    
     ApplicationMaster
    
    :Driver通过ApplicationMaster向Master申请资源,实现
    
     计算和资源的解耦
    
   
 
