Spark学习笔记

Spark简介

Spark的历史

Spark在2012开源,距今长达6年时间,hadoop已经有12年的历史了。Spark使用Scala语言进行实现,它是一种面向对象、函数式编程语言,能够像操作本地集合对象一样轻松地操作分布式数据集,在Spark官网上介绍,它具有运行速度快、易用性好、通用性强和随处运行等特点。

spark特点

  • 运行速度快

spark在内存中对数据进行迭代计算如果数据由内存读取是hadoop MapReduce的100倍。Spark是基于内存的迭代计算框架,适用于需要多次操作特定数据集的应用场合。需要反复操作的次数越多,所需读取的数据量越大,受益越大,数据量小但是计算密集度较大的场合,受益就相对较小.

  • 易用性好

支持Scala编程java编程 Python等语言(Scala是一种高效可扩展语言,使用简洁)

  • 一次编译,随意执行

spark运行在Hadoop,cloud上,能够读取HDFS,HBase Cassandra等数据源

  • 通用性强

spark生态圈(BDAS)包括spark Core、spark SQL Spark Streaming等组件,这些组件提供spark Core处理内存计算框架

spark开发者

加州大学伯克利分校的AMP实验室开发的。

spark比MR快的原因

Spark是基于内存的迭代计算框架,适用于需要多次操作特定数据集的应用场合。需要反复操作的次数越多,所需读取的数据量越大,受益越大,数据量小但是计算密集度较大的场合,受益就相对较小。

总结来说就是:spark是基于内存迭代的,而MR是基于磁盘迭代的。

Spark的四种运行模式

  • local
  • standalone
  • yarn
  • mesos

开发Spark的语言

  • Java
  • Scala
  • Python
  • R

1,首先Spark计算框架是由Scala来写,所以Scala作为Spark的开发语言,兼容性和效率上都是毫无疑问的。
2,Java和Scala都是基于JVM的编程语言,所以Java和Scala在开发Spark上兼容性和效率都是一样的。
3,Python是解释性语言,他要在解释中运行,那么他要开发Spark应用程序,就要运行在JVM上,也就是解释器要和JVM之间要进行通信,所以它的效率要比Java和Scala差。
4,R语言,它的应用并不是很多,这里不做详细介绍。

RDD(弹性分布式数据集)

RDD简介

RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合。RDD具有数据流模型的特点:自动容错、位置感知性调度和可伸缩性。RDD允许用户在执行多个查询时显式地将工作集缓存在内存中,后续的查询能够重用工作集,这极大地提升了查询速度。

RDD五大特性

在这里插入图片描述

RDD的三种算子

  • Transformation类算子
  • Action类算子
  • 控制类算子

Transformation类算子

  • map:一对一
  • flatMap:一对多
  • filter:一对N(0,1)
  • join:inner(内连接)
  • leftouter join
  • rightouter join
  • fullouter join
  • sortByKey
  • groupByKey
  • reduceByKey
  • sortBy
  • sample

Action类算子

1、count
2、collect:将task的计算结果拉回到Driver端
3、foreach:不会回收所有task的计算结果,原理:将用户传入的函数传递到 各个节点上去执行,只能去各个节点找计算结果。

查看结果的方式:
① web UI
② 去各个节点的Worker工作目录查看 SPARK_WORKER_DIR去各个节点的Worker工作目录查看 SPARK_WORKER_DIR

4、saveAsTextFile(path) path:本地、HDFS路径
5、reduce

控制类算子

  1. cache
  2. persist
    MEMORY_ONLY
    DISK_ONLY
    MEMORY_AND_DISK

注意点:
① 控制类算子后不能立即紧跟action类算子
② 缓存单元是Partition
③懒执行,需要action类算子触发执行
如果你的Application中只要一个job,没有必要使用控制类算子

Spark在集群中的大体运行流程

  1. Driver分发task到节点运行(计算找数据)。
  2. task执行结果拉回到Driver(有可能发生OOM)。
    Driver的作用:
    1)、分发任务到计算节点运行。
    2)、监控task(thread)的运行情况。
    3)、如果task失败,会重新发送(有限制)。
    4)、可以拉回结果到Driver进程。
    结论:Driver进程会和集群频繁通信。

提交Application的两种方式

  1. Client
    提交方式:spark-submit --deploy-mode client --class jarPath args
    特点:Driver进程在客户端节点启动
    适用场景:测试环境
    大概运行流程:
    1)、在Client本地启动Driver进程。
    2)、Driver会向Master为当前Application申请资源。
    3)、Master接收到请求后,会在资源充足的节点上启动Executor进程。
    4)、Driver分发task到Executor执行。

  2. Cluster
    提交方式:spark-submit --deploy-mode cluster --class jarPath args
    特点:每次启动application,Driver进程在随机一台节点启动
    适用场景:生产环境
    大概运行流程:
    1)、客户端执行spark-submit --deploy-mode cluster --class jarPath args命令,启动一个sparksubmit进程。
    2)、为Driver向Master申请资源。Driver进程默认需要1G内存,1core。
    3)、master会随机找一台Worker节点启动Driver进程。
    4)、Driver进程启动成功后,spark-submit进程关闭,然后Driver会向Master为当前Application申请资源。
    5)、Master接收到请求后,会在资源充足的节点上启动Executor进程。
    6)、Driver分发task到Executor执行。

WordCount案例

在这里插入图片描述

如图即是wordCount小案例的大体流程,相比较于MR应用程序简单了许多,并且执行效率上也更快。

Spark集群搭建

请参考下一篇博客Spark集群的搭建。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值