【博学谷学习记录】超强总结,用心分享 | spark知识点总结1

【博学谷IT技术支持】

Spark基础

spark的特点

  • 运行速度快
提供了一个全新的数据结构哦RDD(弹性的分布式数据集)
整个Spark是基于线程来运行的,线程的启动和销毁优于进程
  • 易用性
spark 提供了多种操作语言的API,python SQL Scala Java R
Spark提供非常多的高阶API, 而且这些API在不同的语言中操作基本都是类似的, 大大降低了程序员学习成本
  • 通用性
Spark 是由多个组件组成的,主要有Spark Core, Spark SQL, Spark Streaming, Spark MLib, Spark Craphx

  • 随处运行
编写好的Spark程序,可以被提交到多个不同的资源平台上运行:Local Spark集群(standlone), Yarn平台,以及其他支持Spark运行的平台

Spark 框架可以和多种软件进行集成,集成后,可以非常方便的对接不同软件进行数据处理

Spark的底层通信框架是基于netty(RPC远程调用框架),早期是基于akka(2.0以前)

spark的构成

  • Spark Core: 实现了Spark的基本功能,包含RDD、任务调度、内存管理、错误恢复、与存储系统交互等模块
  • Spark SQL: Spark用来操作结构化数据的程序包。通过Spark SQL,我们可以使用SQL操作数据。
  • Spark Streaming: Spark提供的对实时数据进行流式计算的组件。提供了用来操作数据流的API。
  • Spark MLlib: 提供常见的机器学习(ML)功能的程序库。包括分类、回归、聚类、协同过滤等,还提供了模型评估、数据导入等额外的支持功能。
  • Graphx: Spark 中用于图计算的API,性能良好,拥有丰富的功能和运算符,能在海量数据上自如地运行复杂的图算法。
  • 集群管理器:Spark设计为可以高效地在一个计算节点到数千个计算节点直接伸缩计算。
  • Structured Streaming: 处理结构化流,统一了离线和实时的API。

Spark运行模式

  • local本地模式
  • standalone 独立集群模式
  • standalone-HA 高可用模式(重点)
  • on yarn 集群模式(重点)
  • on mesos 集群模式
  • on cloud 集群模式

Spark Core

RDD

什么是RDD

RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,代表一个不可变、可分区、里面的元素可并行计算的集合。
Resilient: 它是弹性的,RDD里面的中的数据可以保存在内存中或者磁盘里面
Distributed: 它里面的元素是分布式存储的,可以用于分布式计算
Dataset: 它是一个集合,可以存放很多元素

RDD的算子分类

RDD的算子分为两类:

  • Transformation转换操作:返回一个新的RDD
  • Action动作操作:返回值不是 RDD(无返回或返回其他的)
    • 注意:
    1.RDD不实际存储真正要计算的数据,而是记录了数据的位置在哪里,数据的转换关系(调用了射门方法,传入了什么函数)
    2.RDD中的所有转换都是惰性求值/延迟执行的,也就是说不会直接计算。只有当发生一个要求返回结果给Driver的Action动作时,这些转换才会真正运行。
    3.之所以使用惰性求值/延迟执行,是因为这样可以在Action时对RDD操作形成DAG有向无环图进行Stage的划分和并行优化,这样设计让Spark更加有效。
    

Transformation转换算子

  • map: 返回一个新的RDD,该RDD由每一个输入元素经过func函数转后组成
  • filter: 返回一个新的RDD,该RDD由经过func函数计算后返回值为true的输入元素组成
  • flatMap: 类似于map,但是每一次输入元素可以被映射为0或者多个输出元素
  • mapPartitions: 类似于map,但独立地在RDD的每一个分片上运行,因此在类型为T的RDD上运行时,func的函数类型必须是Iterator[T] => Iterator[U]
  • mapPartitionsWithIndex: 类似于mapPartitions,在func带有一个整数参数表示分片的索引值,因此在类型为T的RDD上运行时,func的函数类型必须是(Int, Interator[T] => Interator[U]
  • sample(withRepacement, fraction, seed): 根据fraction指定的比例对数据进行采样,可以选择是否使用随机数进行替换,seed用于执行随机数生成器种子
  • union: 对源RDD和参数RDD求并集返回一个新的RDD
  • intersection: 对源RDD和参数RDD求交集返回一个新的RDD
  • distinct: 对源RDD进行去重后返回一个新的RDD
  • groupByKey: 在一个(K,V)的RDD上调用,返回一个(K, Iterator[V])的RDD
  • reduceByKey: 在一个(K,V)的 RDD 上调用,返回一个(K,V)的 RDD,使用指定的 reduce 函数,将相同 key 的值聚合到一起,与 groupByKey 类似,reduce 任务的个数可以通过第二个可选的参数来设置
  • aggregateByKey(zeroValue)(seqOp, combOp, [numTasks]): 对 PairRDD 中相同的 Key 值进行聚合操作,在聚合过程中同样使用了一个中立的初始值。和 aggregate 函数类似,aggregateByKey 返回值的类型不需要和 RDD 中 value 的类型一致
  • sortByKey([ascending], [numTasks]):在一个(K,V)的 RDD 上调用,K 必须实现 Ordered 接口,返回一个按照 key 进行排序的(K,V)的 RDD
  • sortBy(func, [ascending], [numTasks]): 与sortByKey类型,但是更灵活
  • join(oterDataset,[numTasks]): 在类型为(K,V)和(K,W)的 RDD 上调用,返回一个相同 key 对应的所有元素对在一起的(K,(V,W))的 RDD
  • cogroup(otherDataset,[numtasks]): 在类型为(K,V)和(K,W)的RDD上调用,返回一个(K,(Iterable,Iterable))类型的RDD
  • catesian(otherDataset): 笛卡尔积
  • pipe(command,[envVars]): 对rdd进行管道操作
  • cocalesce(numPartitions): 减少RDD的分区数到指定值。
  • repartition(numPartitions): 重新给RDD分区
posted @ 2023-05-23 10:39  牛牛牛牛牛牛牛牛  阅读(30)  评论(0编辑  收藏  举报