spark 谈资 伯克利开源的 scala编写的 API Scala Python Java 运行模式 本地模式local 本地测试用 Standalone 任务提交方式 client提交方式 用于调试 1. client模式提交任务后,会在客户端启动Driver进程。 2. Driver会向Master申请启动Application启动的资源。 3. 资源申请成功,Driver端将task发送到worker端执行。 4. worker将task执行结果返回到Driver端。 cluster提交方式 1. cluster模式提交应用程序后,会向Master请求启动Driver. 2. Master接受请求,随机在集群一台节点启动Driver进程。 3. Driver启动后为当前的应用程序申请资源。 4. Driver端发送task到worker节点上执行。 5. worker将执行情况和执行结果返回给Driver端 yarn 任务提交方式 client 1. 客户端提交一个Application,在客户端启动一个Driver进程。 2. 应用程序启动后会向RS(ResourceManager)发送请求,启动 AM(ApplicationMaster)的资源。 3. RS收到请求,随机选择一台NM(NodeManager)启动AM。这 里的 NM 相当于 Standalone 中的 Worker 节点。 4. AM启动后,会向RS请求一批container资源,用于启动Executor. 5. RS会找到一批NM返回给AM,用于启动Executor。 6. AM会向NM发送命令启动Executor。 7. Executor启动后,会反向注册给Driver,Driver发送task到 Executor,执行情况和结果返回给 Driver 端。 cluster Mesos spark core DAG 有向无环图 RDD 弹性分布式数据集 5个特点 1. RDD是由一系列的partition组成的。 2. 函数是作用在每一个partition(split)上的。 3. RDD之间有一系列的依赖关系。 4. 分区器是作用在K,V格式的RDD上。 5. RDD提供一系列最佳的计算位置。 血统Lineage 代码流程 创建SparkConf对象 可以设置 Application name。 可以设置运行模式及资源需求。 创建SparkContext对象 基于Spark的上下文创建一个RDD,对RDD进行处理。 transformation转换 RDD > RDD 缓存RDD,避免多次读取 应用程序中要有Action类算子来触发Transformation类算子执行。 action执行 RDD > 结果 关闭Spark上下文对象SparkContext。 算子 输入算子 输出算子 转换算子Transformations map filter flapmap sample 判断是否数据倾斜 reduce reducebykey sortByKey/sortBy groupbykey join leftOuterjoin rightOuterJoin fullOuterJoin union intersection 取两个集合的交集 subtract 差集 mapPartition 执行次数与分区数相同 mapPartittionWithIndex distinct map+reducebykey+map cogroup repartition 增加或较少partition coalesce 减少分区 groupByKey zip 纵向合并两个rdd,没个数据一一对应 zipWithIndex 单个rdd 动作算子Action count collect first foreach take foreachPartition countByKey countByValue reduce 控制算子 cache 提高性能 persist checkpoint 解决容错 执行原理 当RDD的job执行完毕后,会从finalRDD从后往前回溯 当回溯到某一个RDD调用了checkpoint方法,会对当前的 RDD 做一个标记 Spark框架会自动启动一个新的job,重新计算这个RDD的数 据,将数据持久化到 HDFS 上 wide宽依赖 会有shuffle narrow窄依赖 stage stage 是由一组并行的 task 组成 pipeline 越多并行读越高 管道计算模式 广播变量 简介 优点 不用广播变量 累加器 全局计算 Shuffle HashShuffle 普通机制 每一个maptask将不同结果写到不同的buffer中,每个buffer 的大小为 32K。buffer 起到数据缓存的作用。 每个buffer文件最后对应一个磁盘小文件。 reduce task 来拉取对应的磁盘小文件。 产生的磁盘小文件的个数:M * R 合并机制 磁盘文件数: C* R SortShuffle 普通机制 磁盘文件数:2M bypass机制 磁盘文件数:2M 文件寻址 调优 BlockManager 内存管理 静态内存管理 统一内存管理 资源管理任务调度 spark粗粒度 MR细粒度 优点 :集群资源能够充分利用 缺点:task自己申请资源导致启动变慢 术语 master standalone管理资源的主节点 cluster manager 在集群上获取外部资源的服务 worker node standalone 运行于从节点,管理从节点资源 application 基于spark的程序,包含了driver和executor worker executor 默认分配内存1G dirver Driver 负责应用程序资源的申请 任务的分发。 连接worker executor worker节点为application启动的一个进程 负责执行任务, 每个application都有独立的executor task 被送到executor上的工作单元 job task 的并行计算,相当于action stage job被拆分后的单元 pipline 优化 取top(N) 用手写排序,可以提高效率 webUi Master HA