Spark

spark

基于内存计算的大数据并行计算框架,可用于构建大型的,低延迟的数据分析应用

特点:

1,运行速度快

2,容易使用:支持Scala,java,Python和R语言,可以使用spark shell 进行交互式编程

3,通用性:包括迭代计算,sql查询,流失计算,图计算,机器学习

4,运行模式多样:可运行于独立集群模式,也可运行于Mesos,yarn等集群资源管理器上

优点:

1,提供如Filter、FlatMap、ReduceByKey、Join、Sort等操作;

2,基于RDD,将中间结果放入内存中、基于DAG实现更小粒度的任务调度执行机制,对于迭代运算效率更高、执行机制更合理;

3,基于RDD的血缘以及CheckPoint机制,可以减少由于数据集丢失而造成RDD重建所需的计算工作,实现了高容错性

spark 与 hadoop
在这里插入图片描述

大数据处理类型

1,复杂的批量数据处理(MapReduce): 通常时间跨度在数十分钟到数小时之间;

2,基于历史数据的交互式查询(Impala): 通常的时间跨度在数十秒到数分钟之间;

3,基于实时数据流的数据处理(Storm): 通常的时间跨度在数百毫秒到数秒之间;

:Spark所提供的生态系统足以应对上述的三种场景,即同时支持批处理、交互式查询和流数据处理
在这里插入图片描述

spark生态圈

在这里插入图片描述

spark 基础概念

RDD: 弹性分布式数据集 (Resillient Distributed Dataset),分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型;

DAG: 有向无环图。反映RDD之间的依赖关系;

Executor: 运行在工作节点(Worker)的一进程,负责执行Task;

Application: 用户编写的Spark应用程序,一个Driver + 若干Job;

Job: 一个Job包含多个RDD及作用于相应RDD上的各种操作;

Task: 运行在Executor上的工作单元;

Stage:为Job的基本调度单位,一个Job会分为多组Task,每组Task被称为Stage(亦被称为Task Set),代表一组关联的、相互之间没有Shuffle依赖关系(亦即窄依赖)的任务组成的任务集。

spark运行流程

一个Application由一个Driver和若干Job构成

一个Job由多个Stage构成

一个Stage由多个未Shuffle的Task组成
在这里插入图片描述

运行流程:执行Application,Driver向资源管理器申请资源,启动Executor,在Executor上执行Task,将结果返回Driver,或写入HDFS

SparkContext:由Driver创建,包括RDD对象,DAGScheduler解析,TaskScheduler
在这里插入图片描述

特点:

1,每个Application都有自己的Executor进程

2,Executor进程以多线程方式运行Task

3,spark运行,与资源管理器无关,只要获得Executor进程保持通信就行

RDD

RDD参考

分布式对象集合,一个只读的分区记录集合

高度受限的共享内存模型,RDD是只读的记录分区的集合,不能直接修改

提供了一组丰富的操作API,可分为“行动” (Action) 和“转换”(Transformation) 两种类型,还可以包括创建操作和控制操作

RDD可以高效表达其他编程模型
在这里插入图片描述

RDD依赖关系

在这里插入图片描述

窄依赖:表现为一个或多个父RDD的分区对应于一个子RDD的分区

宽依赖:则表现为存在一个父RDD的一个分区对应一个子RDD的多个分区

stage划分

1,在DAG中进行反向解析,遇到宽依赖就断开;

2,遇到窄依赖就把当前的RDD加入到Stage中;

3,将窄依赖尽量划分在同一个Stage中,可以实现流水线计算

RDD运行过程

1,创建RDD

2,SparkContext计算RDD依赖关系,构建DAG

3,DAGScheduler将DAG分解成Stage,每个Task被TaskScheduler分发给各个Worker节点上的Executor去执行
在这里插入图片描述

spark部署

1) Spark的安装与配置(伪分布模式);
Java 8 环境
在这里插入图片描述
ssh配置
在这里插入图片描述
在这里插入图片描述
Hadoop 2.7安装(伪分布式)
查看官方文档
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Scala环境:
在这里插入图片描述
Spark安装(http://mp:8080):
在这里插入图片描述
在这里插入图片描述
2) Spark-Shell的使用。尝试在Spark-Shell上以交互式编程的模式完成WordCount(输入可以是本地文件,如“file:///usr/local/spark/README.md”),要求按照字符串出现的次数倒序输出;
本地文件上传hdfs:
在这里插入图片描述

启动spark-shell(yarn)
在这里插入图片描述
脚本编写
在这里插入图片描述
结果
在这里插入图片描述
在这里插入图片描述

Spark API 实践

Spark 编程模型
在这里插入图片描述

创建RDD
在这里插入图片描述
Transformation

map(func):RDD中的每个数据通过函数func,构成一个新的RDD

filter(func): RDD中每个能使函数func返回true值的数据组成新的RDD

flatMap(func):类似于map转换,但func的返回值是一个Seq对象,Seq中的元素个数可以是0或者多个

mapPartitions(func):类似于map转换,但func的输入不是一个数据项,则是一个分区

mapPartitionsWithIndex(func):类似于mapPartitions转换,但func的数据还多了一个分区索引

union(otherDataset):两个RDD求并集

Intersection(otherDataset):两个RDD求交集

distinct([numTasks]):去重

reduceByKey(func, [numTasks]):让原RDD相同K的所有V依次经过函数func,得到的最终值作为K的V

sortByKey([ascending], [numTasks]):新RDD的数据根据ascending的指定顺序或者逆序排序

join(otherDataset, [numTasks]):原RDD数据的类型为(K, V),其他数据的类型为(K, W),对于相同的K,返回所有的(K, (V, W))

catesian(otherDataset):笛卡尔积
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Action

reduce(func):令原RDD中的每个值依次经过函数func,func的类型为(T, T) => T,返回并行整合结果

collect():将原RDD中的数据打包成数组并返回

count():返回原RDD中数据的个数

first():返回原RDD中的第一个数据项

take(n):返回原RDD中前n个数据项,返回结果为数组

takeSample(withReplacement, num, [seed]):对原RDD中的数据进行采样,返回num个数据项

saveAsTextFile(path):将原RDD中的数据写入到文本文件当中

saveAsSequenceFile(path)(Java and Scala):将原RDD中的数据写入到序列文件当中

savaAsObjectFile(path)(Java and Scala):将原RDD中的数据序列化并写入到文件当中

countByKey():原RDD数据的类型为(K, V),返回hashMap(K, Int),用于统计K出现的次数

foreach(func):对于原RDD中的每个数据执行函数func,返回数组
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.Ma.01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值