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.窄依赖,宽依赖

spark 线程池 interrupt spark使用多线程_线程池

spark 线程池 interrupt spark使用多线程_spark_02

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