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

一、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申请资源,实现计算和资源的解耦

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值