【Spark学习笔记】(一)—— Spark 概述和 WordCount

  • Post author:
  • Post category:其他




一、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申请资源,实现

计算和资源的解耦



版权声明:本文为wanger61原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。