SGG-Spark-SRC

一、

大数据实现:存储 、 传输 、 分析。spark是用最流行的分布式计算引擎

八卦

腾讯有8000多个节点的spark集群,是世界最大的

二、特点

  • 快速、通用、可扩展、集群的计算引擎,是apache的开源项目,有全职的维护人员和贡献者。

1. 快速:

基于内存
mr是进程级别,而spark的task是线程级别

2. 易用

封装好的算子,函数式编程只关心输入和输出

支持4种编程语言和sql

python和R对某些特性支持的不好

支持scala和python的repl交互执行环境,可以非常方便的来验证思路。而不需要打包+上传+执行,对于原型开发很有用。

3. 通用

{1} 可用在通用的平台上,比如yarn、masos

集群管理器

hadoop2.0后把yarn独立出来,用来调度资源。spark计算肯定也需要资源,spark既有自己的独立调度器(standalone),也可以使用别的通用的集群管理器。比如yarn,masos。
standalone只能给spark自己用,效率其实更高。需要在每个节点都装spark 并且 需要专门给spark配1个集群。用yarn的话可以和现有的集群整合。

{2} 4个通用模块,可以这些模块上建立应用

在这里插入图片描述

4. 可扩展

非常方便的同其他开源产品融合,比如hive、hdfs。hive可以换引擎。

可以直接操作csv、json、gz等

**spark几个抽象的理解**

三、core

是个项目,实现了spark的基本功能:包括任务调度、内存管理、错误恢复、与存储系统读写、rdd的实现。其他4个模块都是在此之上的封装。

1. RDD

RDD是spark最核心的概念,学spark就是学RDD。

{1} RDD是处理分布式数据的逻辑的抽象,为啥非要用RDD呢?因为分布式数据的处理逻辑不仅仅包含业务逻辑,还不得不包括如下方面:

  1. 为了实现计算向数据移动:需要获取分区的位置,也就是需要有一个容器来存分区的位置,这样发送task时才能有的放矢。
    对应RDD的分区列表和计算最优发送分区列表
  2. 容错:
    1. 需要有个属性记录血缘lineage,遇到分区丢失、节点丢失时如何处理?
    2. 需要有个函数记录自己是如何从父RDD获取的
      对应计算函数和血缘列表
  3. 优化:窄依赖之间以pipeline方式运行,宽依赖之间的shuffle如何优化?
  4. 资源调度、任务分配
  5. 提取通用业务逻辑封装为方法、函数

以上5个方面,如果让开发者自己写。不现实,而RDD这个抽象(对象)把上面这些都给做了,开发者只需要关心业务,并且使用封装好的算子来实现业务,大大的降低了开发者的工作量。

再重复一遍:RDD就是driver端用来处理分布式数据的处理逻辑。此处有一点疑问,都说RDD不存数据是处理逻辑,集合存数据,但集合也不是直接存数据的,而且集合里面也有算子(方法),只不过没RDD复杂而已。普通的集合没有考虑并发,要串行执行。但个人认为本质是一样的。而且从RDD的名字来看,本身就是数据集==》
所以我个人理解,RDD就是分布式数据的容器,说它存数据并没有问题。RDD是操作分布式数据的入口、工具,可以通过RDD来操作分布式大数据。

RDD最顶级的抽象是个抽象类,有很多子类,不同的算子会生成不同的子类。
在driver端编写
由sc创建

{2} RDD的不变性

不变有很多好处:

  1. 线程安全

2. sparkContext、sparkSession

顾名思义,用来配置环境(上下文),啥环境呢?就是当前spark app的计算环境,包括资源申请、创建RDD处理逻辑、封装RDD逻辑为task、发送task、获取结果。相当于一个乙方的项目经理,协调甲方和自己手下的兵。rdd就是兵。spark app的任何操作都是通过sc和sc下面的rdd

四、sparksql

1. 操作结构化和半结构化数据,也就是行和列的数据表。说明这些列和列类型的一些规则被称为模式(schema)。

不仅仅是hive表的,parquet、csv的都可以,这些数据自带schema表结构。统一用df对象抽象,是对RDD的封装,df可以直接转为RDD,但RDD转df需要提供schema也就是StructType对象。

sparkSession也可以直接读取没有schema的text文件,通过sparkSession.read.text(),但获取的df把一行全放到一列中且名字默认为value

{1} 结构化意味着每行数据有共性,可以用schema(StructType)描述,可以用sql,rdd能做的df都能做。

其实说白了,就是可以用列来管理这些数据。注意,是列,不是属性。df中也有结构,结构中也有列,列也有类型,但跟类和类的属性不是一回事,结构中的列并不像类的属性那样灵活,受hive表中列属性的节制,只能有有限的几种,在sparksql的DataTypes类中可以查看,就那么几种。

Spark运行模式(master)

1. local

用来测试,因为在yarn上是jar直接运行,不能debug

windows + local搭建

因为在windows idea中运行spark local模式时报
在这里插入图片描述
猜测即使是spark的local模式,也是需要配hadoop的,需要在windows本地安装一个hadoop提供hadoop的依赖。这也是官网上为啥会提供spark-hadoop安装包的原因
在这里插入图片描述

2. standalone

顾名思义,独立,只有spark,没有别的资源调度器参与

3. yarn

4. 其他masos

Driver

2个线程
java程序都需要从main()开始执行,spark app也需要从main()开始执行,这个main就是Driver类的main()。既然是入口,那肯定要做一些环境搭建、准备的工作,包括:创建sc、RDD、rdd逻辑的编写、结果处理。driver启动spark app开始启动,spark app结束driver就结束。

sparkshell启动时会自动创建并启动一个driver,里面把sc和spark(sparkSession)都创建好了。

将用户代码转为job,将job转为task
将task分发给Executor执行
跟踪执行情况
sparkUI就是在driver端的一个web项目,所以sparkUI要访问driver所在的节点,

Executor

工作节点上的用来执行task的进程

跟driver心跳、交互
运行task
通过BloclManager为缓存的RDD的分区提供内存式存储
RDD的分区是直接缓存在Executor节点的内存中,

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值