大数据spark篇--spark基本概念

Spark VS MapReduce

Spark和MapReduce两款计算引擎,差异如下所示:

引擎MapReduceSpark
编程友好一般,支持Map/Reduce两种算子较好,支持的算子丰富(map/filter/reduce/aggregate等)
性能一般,中间态数据需要落盘,计算逻辑相对复杂时,MapReduce会涉及到多MapReduce任务执行(多次shuffle),每次shuffle也会涉及到大量的磁盘IO较好,基于内存计算,基于DAG可以构建RDD的血缘关系,在调度过程中可以避免大量无效的磁盘IO,另外rdd共享机制可以降低网络IO的开销
集团生态较好,odps提供MapReduce计算框架支持,可以通过LogView查看日志较好,odps提供Spark计算引擎支持,可以通过LogView查看日志,目前提供了stand-alone、集群及client三种模式的支持

比较形象的对比(并不是说spark不会落盘,在基于DAG图拆分stage时,也会涉及到shuffle,但整体的磁盘IO消耗比MapReduce要低)
在这里插入图片描述

编程模式优势

: RDD + DataFrame 的编程模式
如上面和MapReduce的比较中看到 Spark 在编程友好性上比MapReduce好一些,比较适合后端开发人员。

import org.apache.spark.sql.Row
import org.apache.spark.sql.types._
// Create an RDD
val peopleRDD = spark.sparkContext.textFile("examples/src/main/resources/people.txt")
// The schema is encoded in a string
val schemaString = "name age"
// Generate the schema based on the string of schema
val fields = schemaString.split(" ")
  .map(fieldName => StructField(fieldName, StringType, nullable = true))
val schema = StructType(fields)
// Convert records of the RDD (people) to Rows
val rowRDD = peopleRDD
  .map(_.split(","))
  .map(attributes => Row(attributes(0), attributes(1).trim))
// Apply the schema to the RDD
val peopleDF = spark.createDataFrame(rowRDD, schema)
// Creates a temporary view using the DataFrame
peopleDF.createOrReplaceTempView("people")
// SQL can be run over a temporary view created using DataFrames
val results = spark.sql("SELECT name FROM people")

上面是一个官方的例子,在schema控制,可编程性和 sql 操作等能较好的结合,逻辑比较类同后端开发。

基于上述spark特点及优势,我们最终选择spark实现会计引擎逻辑。

spark基础介绍

基础概念
Rdd(Resilient distributed dataset):不可变的弹性分布式数据集(不可变性似于docker中的只读镜像层),只能通过其他的transformation算子创建新的RDD。

Operations:算子,spark包括两类算子,transformation(转换算子,通过对前置rdd的处理生成新的rdd)/action(触发spark job的拆分及执行,负责将rdd输出)。

Task:执行器执行的任务单元,一般基于当前rdd的分区数量拆分。

Job:包含多个task的集合,基于Action算子拆分。

Stage:基于当前rdd处理逻辑的宽窄依赖拆分,spark中非常重要的概念,stage的切换会涉及到IO。

Narrow/Wide dependencies:参考下图,区分的重要依据在于父节点是否会被多个子节点使用。
在这里插入图片描述

文章引用于 :https://blog.csdn.net/weixin_38754799/article/details/123343550
使用spark on odps处理供应链路的问题 其中有计算参数,运维调优等

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值