1.spark和MapReduce比较:
1)MR是批量计算框架,Spark-Core也是批量计算框架
2)Spark相比MR速度快,MR作为一个job,在中间环节中结果是落地的(会经过磁盘交换),Spark计算过程中数据流转都是在内存的(减少了对HDFS的依赖)
3)MR:多进程模型(缺点:每个任务启动时间长,所以不适合于低延迟的任务
优点:资源隔离,稳定性高,开发过程中不涉及内存锁(互斥锁、读写锁)的开发)
Spark:多线程模型(缺点:稳定性差
优点:速度快,适合低延迟的任务,适合于内存密集型任务)
一个机器节点,所有的任务都会运载jvm进程(executor进程),
每一个进程包含一个executor对象,在对象内部会维持一个线程池,提高效率,每一个线程执行一个task
2、Spark的运行模式:
(1)单机模式:方便人工调试
(2)Standalone模式:自己独立一套集群(master/client/slave),缺点:资源不利于充分利用
(3)Yarn模式:
1)Yarn-Client模式:Driver运行在本地
适合交互调试
2)Yarn-Cluster模式:Driver运行在集群(AM)
正式提交任务的模式(remote)
3.spark 算子整体分成两类:transformations 和 action
4.窄依赖,宽依赖
RDD的关键特征:
– RDD使用户能够显式将计算结果保存在内存中,控制数据的划分,并使用更丰富的操作集合来处理
– 使用更丰富的操作来处理,只读(由一个RDD变换得到另一个RDD,但是不能对本身的RDD修改)
– 记录数据的变换而不是数据本身保证容错(lineage)
• 通常在不同机器上备份数据或者记录数据更新的方式完成容错,但这种对任务密集型任务代价很高
• RDD采用数据应用变换(map,filter,join),若部分数据丢失, RDD拥有足够的信息得知这部分数据是如何计算得到的,可通过重新计算来得到丢失
的数据
• 这种恢复数据方法很快,无需大量数据复制操作,可以认为Spark是基于RDD模型的系统
– 懒操作,延迟计算, action的时候才操作
– 瞬时性,用时才产生,用完就释放
5.executor:
1)每一个进程包含一个executor对象,一个executor包含一个线程池,每个线程执行一个tasks
线程池好处:省去了进程频繁启停开销
Task并发度概念:
每一个节点可以启动一个或者是多个executor进程
每一个executor进程有多个core组成,每一个core一次只能执行一个task
2)内存划分:
(1)【20%】:exectution:执行内存
join、groupby这类算子涉及内存,shuffle数据都会缓存在这个内存区,如果内存满,把数据写到磁盘(spill)
(2)【60%】:Storage:存储cache、presist、broadcast数据
(3)【20%】:留给程序自己
和spark版本有关:
1.6.0之前的版本,每个类的内存是相互隔离,导致了executor的内存利用率不高,只能使用者自己调整参数来优化内存
1.6.0以上的版本,execution和storage内存是可以相互借用的,减少了OOM(out of memory)的情况发生
为了提高内存利用率,尽可能复用rdd