PySpark学习(二)概念

Apache Spark是一个在集群上运行的统一计算引擎以及一组并行数据处理软件库
Spark专注于计算引擎,从存储系统加载数据并对其执行计算,加载结束时不负责永久存储,可以将许多种类型的存储系统与Spark结合使用。
Hadoop包括一个存储系统(HDFS)和计算系统(MapReduce),它们紧密集成在一起,无法运行独立于HDFS的MapReduce系统。Spark可以在Hadoop存储上运行,也可以应用于其他存储系统。
分布式:一个业务拆分成不同的子业务模块,部署在不同的机器上。
集群:同一个业务部署在多台机器上,一个机器算是一个节点。
Spark应用程序由一个驱动器进程和一组执行器进程组成。
驱动器运行main()函数,位于集群中的一个节点,负责:维护Spark应用程序的相关信息;回应用户的程序或输入;分析人物并发奋给若干执行器。驱动器是Spark应用程序的核心。
执行器负责执行驱动器分配给它的实际计算工作,并将计算状态报告给运行驱动器的节点
集群管理器:Spark的独立集群管理器、YARN或Mesos。
除了集群模式,Spark具有本地运行模式。驱动器和执行器只是简单的进程,它们可以位于同一台机器或位于不同的机器上。
SparksSession
通过名为SparkSession的驱动器来控制Spark应用程序,需要创建一个SparkSession实例在集群中执行用户定义的操作,每个Spark应用程序需要一个SparkSession与之对应。
DataFrame
DataFrame是结构化API,包含行和列的数据表,由记录(record)组成,record是Row类型,一条record由多列组成,可以使用null来指定缺省值。Schema定义了DataFrame的列名和类型
Spark DataFrame可以跨越数台机器。DataFrame的分区定义了DataFrame以及Dataset在集群上的物理分布,而划分模式定义了partition(分区)的分配方式,你可以自定义分区的方式,也可以采取随机分配的方式。

使用Spark SQL,可以将DataFrame注册为数据表或视图(临时表),并使用纯SQL进行查询。不管使用什么语言,Spark以完全相同的方式执行转换操作,在实际运行代码之前,Spark会将该逻辑编译到底层执行计划,Spark会针对物理执行计划做一系列优化。SQL表达式和DataFrame代码的性能是一样的。
Schema
Schema数据模式定义了该分布式集合中存储的数据类型。
数据分区
为了让执行器并行工作,Spark将数据分解成多个数据块,每个数据块叫做一个分区,分区是位于集群中的一台物理机上的多行数据的集合。
转换操作
建立逻辑转换计划,不会真的实现,没有实际输出。
转换操作的explain()函数会观察到Spark正在创建一个执行计划,并且看到计划将会在怎样的集群上执行。
窄依赖关系的转换操作(窄转换):一个分区最多只会对一个输出分区有影响。Spark会自动执行流水线处理,在内存中执行。
宽依赖关系的转换操作(宽转换)(shuffle操作):每个输入分区决定了多个输出分区。Spark将结果写入磁盘。
动作操作
触发计算,指示Spark在一系列转换操作后计算一个结果。
Spark Web UI
占用驱动器节点的4040端口。如果在本地模式下运行,通过http://localhost:4040访问。显示Spark作业的运行状态、执行环境和集群状态等信息。
惰性评估:等到绝对需要时才执行计算。
Spark编程模型的核心——函数式编程
Spark是一个分布式编程模型,用户可以在其中指定转换操作,通过多个转换构成一个指令的有向无环图。指令图的执行过程作为一个作业由一个动作操作触发,在执行过程中,一个作业被分解为多个阶段和任务在集群上执行。

结构化API执行概述
1)编写DataFrame / Dataset / SQL代码
2)如果代码能有效执行,Spark将其转换为一个逻辑执行计划
   逻辑计划仅代表一组抽象转换,并不涉及执行器或驱动器。将用户代码转换为未解析的逻辑计划,Spark使用catalog(所有表和DataFrame信息的存储库)在分析器中解析列和表格。如果目录中不存在所需的表或列名称,分析器可能会拒绝该未解析的逻辑计划。如果分析器可以解析它,结果将通过Catalyst优化器,Catalyst优化器尝试通过下推谓词或选择操作来优化逻辑计划。用户也可以扩展Catalyst优化器来支持自己的特定领域优化策略。
3)Spark将此逻辑执行计划转化为一个物理执行计划(Physical Plan),检查可行的优化策略,并在此过程中检查优化。
  在成功创建优化的逻辑计划后,Spark开始执行物理计划流程。物理计划(通常称为Spark计划)通过生成不同的物理执行策略,并通过代价模型进行比较分析,从而指定如何在集群上执行逻辑计划。物理规划产生一系列的RDD和转换操作。
4)Spark在集群上执行该物理执行计划(RDD操作)。
  在选择一个物理计划时,Spark将所有代码运行在Spark的底层编程接口RDD上。Spark在运行时执行进一步优化,生成可以在执行期间优化任务或阶段的本地Java字节码,最终将结果返回给用户。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值