Spark

spark

  • spark
  • 大数据处理类型
  • spark生态圈
  • spark 基础概念
  • spark运行流程
  • RDD
    • RDD依赖关系
    • stage划分
    • RDD运行过程
  • spark部署
  • Spark API 实践

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
Spark_第1张图片

大数据处理类型

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

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

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

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

spark生态圈

Spark_第3张图片

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组成
Spark_第4张图片

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

SparkContext:由Driver创建,包括RDD对象,DAGScheduler解析,TaskScheduler
Spark_第5张图片

特点:

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

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

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

RDD

RDD参考

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

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

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

RDD可以高效表达其他编程模型
Spark_第6张图片

RDD依赖关系

Spark_第7张图片

窄依赖:表现为一个或多个父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_第8张图片

spark部署

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

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

启动spark-shell(yarn)
Spark_第15张图片
脚本编写
Spark_第16张图片
结果
Spark_第17张图片
Spark_第18张图片

Spark API 实践

Spark 编程模型
Spark_第19张图片

创建RDD
Spark_第20张图片
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):笛卡尔积
Spark_第21张图片
Spark_第22张图片
Spark_第23张图片
Spark_第24张图片
在这里插入图片描述
在这里插入图片描述
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,返回数组
Spark_第25张图片
Spark_第26张图片

你可能感兴趣的:(大数据)