【课程】Spark从零开始

一、Spark介绍

1.1 Spark简介

Spark是什么:
Spark是一个快速且通用的集群计算平台。

Spark的特点:
1.Spark是快速的

Spark扩充了流行的MapReduce计算模型
Spark是基于内存的计算

2.Spark是通用的

Spark的设计容纳了其他分布式系统拥有的功能,批处理,迭代式计算,交互查询和流处理等。
优点:降低了维护成本

3.Spark是高度开放的

Spark提供了Python, Java, Scala, SQL的API和丰富的内置库。
Spark和其他的大数据工具整合的很好,包括Hadoop, Kafka等

1.2 Spark生态介绍

Spark历史

  • 诞生于2009年,加州大学伯克利分校RAD实验室的一个研究项目,最初是基于Hadoop MapReduce
  • 发现MapReduce在迭代式计算和交互式上抵消,引入内存存储
  • 2010年3月份Spark开源
  • 2011年AMP实验室在Spark上开发高级组件,像Spark Streaming
  • 2013年转移到了Apache下,不久便成为顶级项目了。

Spark组件:
Spark包含多个紧密集成的组件
Spark组件
1) Spark Core:

包含Spark的基本功能,包含任务调度,内存管理,容错机制等。
内部定义了RDDs(弹性分布式数据集)
提供了很多API来创建和操作这些RDDs。
应用场景,为其他组件提供底层的服务。

2) Spark SQL:

是Spark处理结构化数据的库,就像Hive SQL,MySQL一样。
应用场景,企业中用来做报表统计。

3) Spark Streaming:

是实施数据流处理的组件,类似Storm。
Spark Streaming提供了API来操作实施流数据。
应用场景,企业中用来从Kafka接受数据做实时统计。

4) Mlib:

一个包含通用机器学习功能的包,Machine learning lib.
包含分类,聚类,回归等,还包括模型评估,和数据导入。
Milb提供的上面这些方法,都支持集群上的横向扩展。
应用场景,机器学习。

5) Graphx:

是处理图的库(例如,社交网络图),并进行图的并行计算。
像Spark Streaming, Spark SQL一样, 它也集成了RDD API。
它提供了各种图的操作,和常用的图算法,例如PangeRank算法。
应用场景,图计算

6) Cluster Managers:

就是集群管理,Spark自带一个集群管理是单独调度器。
常见集群管理包括Hadoop YARN, Apache Mesos。

紧密集成的优点:

  1. Spark底层优化了,基于Spark底层的组件,也得到了相应的优化。
  2. 紧密集成,节省了各个组件组合使用时的部署,测试等时间。
  3. 向Spark增加新的组件时,其他组件,可立刻享用新组件的功能。

1.3 Spark与Hadoop的比较

Hadoop应用场景

  1. 离线处理
  2. 对时效性要求不高

Spark应用场景

  1. 时效性要求高的场景
  2. 机器学习等领域

比较
Doug Cutting(Hadoop之父)的观点:

  1. 这是生态系统,每个组件都有其作用,各善其职即可。
  2. Spark不具有HDFS的存储能力,要借助HDFS等持久化数据。
  3. 大数据将会孕育出更多的新技术。

二、Spark的下载和安装

Spark目录

bin:包含用来和Spark交互的可执行文件,如Spark shell。
core:streaming, python, …包含主要组件的源代码。
examples:包含一些单机的Spark jobs,可以单机运行的例子。

Spark的Shell

Spark的shell使你能够处理分布在集群上的数据。
Spark把数据加载到节点的内存中,因此分布式处理可在秒级完成。
快速使迭代式计算,实时查询,分析一般能够在shell中完成。

三、RDDs

3.1 RDDs介绍

Driver program:

包含程序的main()方法,RDDs的定义和操作。
它管理很多节点,我们称作executors。

Driver Program

SparkContext:

Driver programs通过SparkContext对象访问Spark。
SparkContext对象代表和一个集群的连接。
在Shell中SparkContext自动创建好了,就是sc。

RDDs:

Resilient distributed datasets(弹性分布式数据集,简称RDDs)
这些RDDs,并行的分布在整个集群中。
RDDs是Spark分发数据和计算的基础抽象类。
一个RDD是一个不可改变的分布式集合对象。
Spark中,所有的计算都是通过RDDs的创建,转换,操作完成的。
一个RDD内部有很多partition(分片)组成的。

分片partition:

每个分片包括一部分数据,partitions可在集群不同节点上计算。
分片是Spark并行处理的单元,Spark顺序的,并行的处理分片。

RDDs的创建方法:
1) 把一个存在的集合传给SparkContext的parallelize()方法,测试用:

val rdd = sc.parallelize(Array(1, 2, 2, 4), 4)

第1个参数:待并行化处理的集合
第2个参数:分区个数

2) 加载外部数据集

val rddText = sc.textFile("helloSpark.txt")

Scala的基础知识
Scala的变量声明: 创建变量是val/var

val:变量值是不可修改的,类似java final。
var:变量值定义完是可以修改的。

Scala的匿名函数和类型推断
lines.filter(line => line.contains("world")),定义一个匿名函数,接受line.

使用line这个Strig类型的变量上的contains方法,并且返回结果
line不需要制定类型,会自动推断

3.2 RDD基本操作 Transformation

Transformations介绍:
转换:从之前的RDD构建一个新的RDD,像map() 和 filter()。

逐元素Transformation:

map(): map()接收函数,把函数应用到RDD的每一个元素,返回新的RDD。
filter(): filter()接受函数,返回只包含满足filter()函数的元素的新RDD。
flatMap(): flatMap()对每个输入元素,输出多个输出元素。flat压扁的意思,将RDD中的元素压扁后返回一个新的RDD。

集合运算:
RDDs支持数学集合的计算,例如并集union,交集intersection,差集subtract计算。

3.3 RDD基本操作 Action

Action介绍:
在RDD上计算出来一个结果。
把结果返回给driver program或保存在文件系统,count(), save()
action1
action2
reduce():

接收一个函数,作用在RDD两个类型相同的元素上,返回新元素;
可以实现,RDD中元素的累加,计数,和其它类型的聚集操作;

collect():

遍历整个RDD,向driver program返回RDD的内容
需要单机内存能够容纳下(因为数据要拷贝给driver,测试使用)
大数据的时候,使用saveAsTextFile() action等。

take(n):

返回RDD的n个元素(同时尝试访问最少的partitions)。
返回结果是无序的,测试使用。

top():

排序(根据RDD中数据的比较器)

3.4 RDDs的特性

RDDs的血统关系图:
Spark维护着RDDs之间的依赖关系和创建关系,叫做血统关系图
Spark使用血统关系图来计算每个RDD的需求和恢复丢失的数据
Spark血统关系图

延迟计算(Lazy Evaluation):
Spark对RDDs的计算是,他们第一次使用action操作的时候。
这种方式在处理大数据的时候特别有用,可以减少数据的传输。
Spark内部记录metadata表明transformations操作已经被响应了。
加载数据也是延迟计算,数据只有在必要的时候,才会被加载进去。

RDD.persist(): 持久化
默认每次在RDDs上面进行action操作时,Spark都重新计算RDDs,如果想重复利用一个RDD,可以使用RDD.persist()。
unpersist()方法从缓存中移除。
缓存级别
缓存级别

3.5 KeyValue对RDDs

创建KeyValue对RDDs
使用map()函数,返回key/value对
例如,包含数行数据的RDD,把每行数据的第一个单词作为keys
key value
KeyValue对RDDs的Transformations{(1,2),(3,4),(3,6)}
key value
KeyValue

combineByKey(createCombiner, mergeValue, mergeCombiners, partitioner)

最常用的基于key的聚合函数,返回的类型可以与输入类型不一样,许多基于key的聚合函数都用到了它,像groupByKey()
原理,遍历partition中的元素,元素的key,要么之前见过的,要么不是。如果是新元素,使用我们提供的createCombiner()函数,如果是这个partition中已经存在的key,就会使用mergeValue()函数,合计每个partition的结果的时候,使用mergeCombiners()函数
举例
这里写图片描述
这里写图片描述

课程视频链接:https://www.imooc.com/video/14388

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据分析职业是一个多金的职业,数据分析职位是一个金饭碗的职位,前景美好,但是要全面掌握大数据分析技术,非常困难,大部分学员的痛点是不能快速找到入门要点,精准快速上手。本课程采用项目驱动的方式,以Spark3和Clickhouse技术为突破口,带领学员快速入门Spark3+Clickhouse数据分析,促使学员成为一名高效且优秀的大数据分析人才。学员通过本课程的学习,不仅可以掌握使用Python3进行Spark3数据分析,还会掌握利用Scala/java进行Spark数据分析,多语言并进,力求全面掌握;另外通过项目驱动,掌握Spark框架的精髓,教导Spark源码查看的技巧;会学到Spark性能优化的核心要点,成为企业急缺的数据分析人才;更会通过Clickhouse和Spark搭建OLAP引擎,使学员对大数据生态圈有一个更加全面的认识和能力的综合提升。真实的数据分析项目,学完即可拿来作为自己的项目经验,增加面试谈薪筹码。课程涉及内容:Ø  Spark内核原理(RDD、DataFrame、Dataset、Structed Stream、SparkML、SparkSQL)Ø  Spark离线数据分析(千万简历数据分析、雪花模型离线数仓构建)Ø  Spark特征处理及模型预测Ø  Spark实时数据分析(Structed Stream)原理及实战Ø  Spark+Hive构建离线数据仓库(数仓概念ODS/DWD/DWS/ADS)Ø  Clickhouse核心原理及实战Ø  Clickhouse engine详解Ø  Spark向Clickhouse导入简历数据,进行数据聚合分析Ø  catboost训练房价预测机器学习模型Ø  基于Clickhouse构建机器学习模型利用SQL进行房价预测Ø  Clickhouse集群监控,Nginx反向代理Grafana+Prometheus+Clickhouse+node_exporterØ  Spark性能优化Ø  Spark工程师面试宝典       课程组件:集群监控:福利:本课程凡是消费满359的学员,一律送出价值109元的实体书籍.

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值