spark:(2.3.1)
spark是hadoop mapreduce的通用并行分布式计算框架,基于内存,Job中间输出的结果可保存在内存中,DAG有向无环图切分任务的执行先后顺序
spark运行模式:
local(测试)
standalone(spark自带资源调度框架,支持完全分布式)
yarn(spark实现了applicationMaster接口)
mesos
案例
val conf=new SparkConf().setAppNam("wc").setMaster("local")
val sc=new SparkContext(conf)
sc.textFile("./data/xx.txt")
.flatmap(l=>{l.split(",")})
.map((_,1))
.reduceBykey(_+_)
.sortBy(t=>{t._2},false)
.foreach(println)
sc.stop()
RDD
Resilient Distributed Dataset 弹性分布式数据集
RDD特性:
1RDD由一系列partition组成
2函数作用在每一个partition(split)上
3RDD之间有一系列依赖关系
4分区器作用在K,V格式RDD上
5RDD提供一系列最佳计算位置
RDD注意:
1textFile封装MR读取文件方法,先split,split大小是block大小
2RDD不存储数据,仅存储算法,类似迭代器
3K,V格式RDD,即RDD代表二元组对象
4如何容错:
4-1partition数量大小无限制,体现弹性
4-2RDD之间依赖关系,可基于之前RDD重新计算RDD
5RDD分布式体现在,RDD由partition组成,partition分布在不同节点
6RDD提供最佳计算位置,体现数据本地化
RDD创建方式:
JAVA
sc.textFile(x,minnumpartitions)
sc.parallelize(集合,num)
sc.parallelizePair(Tuple2<x,x>集合,num)
-----------------
SCALA
sc.textFile(x,minnumpartitions)
sc.parallelize(集合,num)
sc.makeRDD(集合,num)
Spark执行原理:
Spark算子:转换、行动、控制
transformations转换算子,延迟执行,懒加载执行
filter(过滤,t/f)
map(1对1)
flatmap(先map再flat,1对0或者多)
sample(抽样)
reduceByKey(将相同key根据相应逻辑处理)
sortByKey/sortBy(作用在kv RDD上,排序)
...
Action算子
count
take(n) (前n个元素的集合体)
first
foreach(循环遍历)
collect(将计算结果回收到Driver端)
控制算子(持久化,持久化单位是partition)
cache
(lazy,
RDD持久化到内存 =persist(StorageLevel.Memory_Only))
(cache、persiist为框架管理,会被清空)
persist
(lazy,
对RDD使用cache/persist后赋值给一个变量,对RDD持久化后若紧跟action算子,返回的就不是持久化RDD,而是其他结果)
checkpoint
(将RDD持久化到磁盘,
切断RDD之间的依赖关系,
application执行完后持久化目录仍存在
执行原理:
1RDD job执行完后,从finalRD往前回溯
2找到某RDD掉眼泪checkpoint,对此RDD标记
3Spark框架启动new job,重新计算RDD数据,持久化到HDFS
优化:先cache,再checkpoint
案例:
sc.setCheckpointDir("./checkpoint/xx")
JavaRDD<Integer> a=sc.parallelize.checkpoint()
a.checkpoint()
a.count()
算子及RDD创建案例
line.filter(line=>{!"hello spark".equals(line)})
sc.textFile("./data/xx.txt")/("hdfs://node2:8020/xx")
sc.makeRDD(Array[(String,Int)](
("a",10),
("n",99)
))
sc.parallelize(Array[String]("a","b","c","d"))
JAVA-------
sc.parallelize(Array.asList(
new Tuple2<String,Integer>("a",10),
new Tuple2<String,Integer>("b",99)
))
line2=sc.textFile("hdfs://...")
errors=lines.filter(_.startsWith("ERROR"))
Mysql_error=errors.filter(_.contain("MySQL")).count
http_errors=errors.filter(_.contain("Http")).count
spark 梳理
最新推荐文章于 2024-11-11 07:52:54 发布
本文深入介绍了Spark计算框架,包括其作为HadoopMapReduce的替代,支持内存计算和DAG任务调度。讨论了Spark的运行模式如local、standalone、YARN和Mesos,并通过案例展示了Spark的基本操作,如创建RDD、转换与行动算子的使用。同时,解释了RDD的特性和容错机制,以及Spark的执行原理。最后,提到了Spark算子的延迟执行和数据持久化策略。
摘要由CSDN通过智能技术生成