生活随笔
收集整理的这篇文章主要介绍了
spark 笔记
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
分布式计算,数据尽量在本地计算,减少网络I/O如果操作之间相互关系不大,则尽量采用分布式计算。
spark采用分布式计算中的master-slave模型,master对应含有master进程的节点,slave对应含有worker进程的节点。Client 负责提交应用,driver负责控制应用的执行。
基本组件
- Cluster manager是master节点,控制整个集群
- Worker: 计算节点
- Driver: 运行application 的main函数 并创建 spark context
- Executor: 用于启动线程池执行任务,每一个application拥有一组独立的 Executor
- Spark context: 整个应用的上下文,控制应用的生命周期
- RDD DAG: 一组RDD构成的有向无环图。当RDD遇到一个action算子时候,将之前所有的算子形成一个rdd graph. 并把这个rdd graph转化为job提交到cluster中执行
- Job. 一个Rdd Graph触发的作业。往往由Spark Context通过 runJob方法向spark 提交job
- DAG scheduler. 每个job会根据RDD DAG构建 Stage DAG, 并把stage交给 Task Scheduler。
- Task Scheduler: 将task 分发给 task scheduler
- SparkEnv: 线程级别的上下文
Spark Env包括以下几部分
MapOutPutTracker: 负责 Shuffle元信息的存储BroadcastManager: 负责广播变量的控制和元信息的存储BlockManger: 负责存储管理,创建和查询块MetricsSystem: 监控运行时性能指标信息SparkConf: 负责存储配置信息
spark主要流程
Client 提交应用给 mastermaster启动一个worker来执行 driverdriver生成 RDD Graph, 再由 DAG scheduler转化为 Stage DAGDag scheduler提交 stage dag给task schedulerTask scheduler提交 task给excutor
RDD两种创建方式
从已有的rdd 转换生成从hdfs中读取
RDD 相关
逻辑上的RDD的每个分区叫一个partition一个变换将一个RDD变换成另外一个RDD,这些RDD之间通过Lineage产生依赖关系分区只是一个逻辑概念,变换前和变换后的分区可能是同一块内存存储有些RDD是计算的中间结果,不一定有物理的存储空间与之对应,如果需要迭代使用数据,可以调用cache()函数来缓存数据在物理上,RDD对象实质上是一个元数据结构,存储着Block, Node等的映射关系,以及其他的元数据信息。一个RDD就是一组分区,每个分区就是一个block。 block可以存储在内存中,如果内存不够时可以存储在磁盘上 Note: 如果是从HDFS等外部存储结构中读取数据,数据则按照HDFS中的数据分布策略进行数据分区,HDFS中的一个block对应spark的一个分区
spark支持重分区,数据通过spark默认或者用户自定义的分区器进行分区,决定数据块分布在哪些节点上。
Transformation 算子
输入输出分区一对一型
Map. 将原有的Rdd中的数据项通过用户自定的function map成新的元素。得到一个类型为MappedRDD的新RDDFlatmap. 将原有RDD中的元素通过函数f转换为新的元素,并将生成的RDD合并为一个集合。 得到一个类型为FlatMappedRDD的心RDDMap patitions. 获取每个分区的迭代器,在函数中通过这个分区整体的迭代器对整个分区进行操作。得到一个新的类型为MapPartitionsRDD 的新RDDGlom. glom函数将每个分区形成一个数组。得到一个新的GlommedRDD 输入和输出分区多对一
Union.保证两个RDD中的数据类型是相同的。合并后类型和原有类型相同不进行去重操作,如果想去重可以使用distinct++ 相当于union操作Cartesian. 对两个集合的素有元素做笛卡儿积 输入输出多对多
Groupby. 将元素按照function生成key,数据转化为key-value格式,之后将key相同的元素分为一组。 输出是输入分区的子集。
Filter. 对元素应用function过滤。 生成一个新的filtered RDDDistinct。 将元素去重。Subtract. 将元素进行集合的差操作。Sample. 将RDD集合内的元素进行采样,获取子集。 用户可以指定采样方式。Takesample. 和sample类似,但是不指定采样的比例而是指定采样个数。 cache型算子
Cache. 将RDD元素缓存到内存。相当于persist(MEMORY_ONLY).Persist. 对RDD进行缓存操作。数据缓存在什么地方,由storage level枚举类型决定。
Action 算子
无输出Foreach.SaveAsTextFile. 将数据输出,存储在指定的HDFS目录。 RDD Dependencies
1. Narrow Dependencies. each partition of the parent RDD is used by at most one partition of the child RDD.
- allow for pipelined execution on one cluster node.
- easy fault recovery
- Transformation: map、flatMap、filter、sample
2. Wide Dependencies. multiple child partitions may depend on a parent partition.
- require data from all parent partitions to be available and to be shuffled across the nodes
- a single failed node might cause a complete reexecution
- Transformation: sortByKey、reduceByKey、groupByKey、cogroupByKey、join、cartensian
转载于:https://www.cnblogs.com/shexinwei/p/4614697.html
总结
以上是生活随笔为你收集整理的spark 笔记的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。