spark 梳理

本文深入介绍了Spark计算框架,包括其作为HadoopMapReduce的替代,支持内存计算和DAG任务调度。讨论了Spark的运行模式如local、standalone、YARN和Mesos,并通过案例展示了Spark的基本操作,如创建RDD、转换与行动算子的使用。同时,解释了RDD的特性和容错机制,以及Spark的执行原理。最后,提到了Spark算子的延迟执行和数据持久化策略。
摘要由CSDN通过智能技术生成
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

	


	



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值