当前课程知识点:高级大数据系统 >  In-memory Processing >  Spark >  Video

返回《高级大数据系统》慕课在线视频课程列表

Video在线视频

Video

下一节:Video

返回《高级大数据系统》慕课在线视频列表

Video课程教案、知识点、字幕

我们说了

in-memory data processing

变得非常重要

由于大家都需要进行迭代化

和这种交互性的这种数据操作

那么在

in-memory data processing

这些系统当中

有一个非常流行的系统叫做spark

那么我们接下来时间

就会去介绍一下spark

它的一些设计的原则

以及它是怎么样来对内存中的

这种数据进行管理

以及它是怎么样去

进行数据的处理的

那么spark是UC Berkeley AMPLab

做的一个项目

那么他们最开始做这个项目的

motivation

我们刚才已经介绍过

由于大量的迭代化

大量的交互性的

这种数据操作的存在

那么他们对这种内存中的数据集

进行了一定的这个抽象

然后使得数据

可以有效地在内存中

进行缓存进行操作

然后免除了很多storage

到storage的这种数据的

这种往返的读写

那么spark

它是一个大数据分析的一个引擎

和map-reduce和类似

那么map-reduce提供了

map和reduce的两个

操作这个抽象

那么spark也提供了一系列

操作的这种抽象

供上层的这个数据分析师

或者是工程师来对数据进行处理

在某一些这个特定的任务底下

我们由于这种数据迭代和

数据交互的存在

spark可以非常有效的

提升数据处理的速度

那么比如说他在一些内存化的

这种数据处理当中

可以几十倍

甚至上百倍的超过map-reduce

在这些数据处理任务上

同时它除了支持spark

除了支持map-reduce

的这种批量的数据处理

他对这种迭代和交互的数据处理

都会有很好的支持

比如说在交互数据处理里面

用户可以像用命令行一样

去操作spark

可以反复的去思考

去尝试

去试错

各种各样数据处理的这个结果

那么我们来看spark

它在设计的时候

它的一个目标是什么样的呢

它的目标是要提供一个

memory的抽象化

能够使用户在处理内存中的数据

处理分布式文件系统中的

数据的时候

有一个新的这种内存的

抽象化的考虑

比如说用户可以指定

数据在内存中以cache的形式存在

那么在后续的处理当中

这种cache的数据

就可以很快的速度

满足后面的分析的需要

同时它还要满足原来map-reduce

已经做到的一些优势

比如说

当系统中出现一些错误的时候

整个系统要能够容错

当数据在系统中

有一些差异化的分布的时候

我们整个计算的过程

能够照顾到数据的locality

能够就近进行数据的处理

而避免数据的搬移

然后能够进行

seamless的scale

能够让整个系统当硬件设备

和网络设备在增加的时候

系统的性能能够无缝的提升

那么这是最原始的一些需求

那么在达到这个需求的探索当中

spark提出了一种新的数据

模型叫做RDD

RDD的全称

是resilient distributed datasets

它的意思就是要在内存中

构建一种可伸缩的数据集

那么它的一个基本的概念

是把我们在处理的数据集

给抽象成一个一个的对象

那么这些对象本身不能发生变化

它可以在内存中缓存

它可以执行一系列类似于map-reduce

这样的操作来生成新的数据集

和新的操作的流程

那我们就来看它的核心的RDD

是怎么样满足spark

来进行数据的操作的

那么在介绍RDD之前

我们给大家看了一下spark

它的一个overview

实际上spark它运行在一个

叫做mesos

的这样一个集群的资源管理之上

那么和hadoop类似

它也能够有效的对底层的计算和

存储资源进行有效的一个利用

同时spark也可以去使用

传统的HDFS的文件系统

就是说你原来的一些任务

如果是由Hadoop生成的数据的话

实际上可以比较容易的迁移到

spark上去进行

那么spark的默认的语言是scala

所以大家在使用spark的时候

如果能够对Java Scala

有一定的了解的话

可能用起来就会非常容易上手

总之今天的spark实际上

由于受到它这个Databricks

这个商业化公司的一个支撑

已经慢慢地形成了自己的

一个生态系统

在这个生态系统当中

以spark为核心

发展出了它的数据库

它的上层的数据仓库

以及底层的一些内存文件系统

以及底层的资源管理的方式

那么这些是大家在后续的阅读当中

可以去进一步了解的

我们来重点介绍spark的

一个核心概念RDD

这种可伸缩的分布式数据集

那我们来看RDD

它的一些基本特征是什么样的

RDD实际上支撑了整个spark的操作

和spark对数据的一个处理

那么它能支持传统的

这种数据处理的流程

比如说map-reduce

比如说SQL的一些流程

同时它还针对一些特殊的

处理进行了优化

比如说图的处理

比如说迭代化的这种Hadoop的处理

它进行了一些这种特别的考虑

那我们来看spark

怎么样通过RDD

来实现这种相对比较丰富的

这种数据处理操作的这样

一个支持的

那么在这个spark里面

实际上它把这个过程

通过了对RDD的一个定义来实现的

首先它对RDD的一个定义是

RDD是一个一个独立的

不可改变的这样一个

内存中的对象

这些对象不能改变

它和传统分布式文件

系统里面的文件

是不太一样

文件我们可以对文件进行增添

我们可以对文件中的某一些字段

进行修改

那么RDD他一旦生成之后

它本身是不能发生变化的

你想对他变化之后不可避免

就会形成一个新的RDD

那么这是RDD的一个特征

这个不可变

那么RDD要想进行操作

怎么办

我们只能对它进行一些叫做

transforming的这样一个操作

对它进行一些形变

那么形变会让一个RDD

变成另外的RDD

或者是会让多个RDD

变成另外的一些RDD

同时我们会对RDD

进行一些控制

比如说我们可以让它输出到文件

我们可以让它cache到内存当中

为了后续的迭代处理

那么这是RDD的一些特征

在RDD里面为了满足我们提到的

这样一些分布式的操作

实际上它的一些操作类似于map和reduce

它也有一些这种分布化的这种过程

比如说它可以进行reduce

类似于map-reduce中的reduce

它可以进行collect

把数据收集到用户的终端

或者用户的这个磁盘

它可以进行统计用count

然后它可以进行save

把数据存到分布式文件系统

或者是用户的这个本地

那么这是RDD

它在考虑的时候将更多复杂的元素

放到了一块

那么我们给一些这个具体的介绍

针对这样的一些概念

那么RDD

一个非常重要的概念

就是它的这个transformation

transform实际上是将RDD

从一种类型变成

另外一种类型的操作

那么在这个操作当中

你可以蕴含比较复杂的

这种数据的变化

或者是利用spark支撑的

一些基础的变化来

组合出比较复杂的

数据操作的过程

那么它的一个基本的描述是这样

它会用一系列的这个原始

RDD作为它的输入

同时它会生成一个新的RDD

然后这个RDD

可以供后续的这个操作

我们来给一些例子

基于单一的RDD

它能做一些什么样的变化

什么样的transform

比如说在这个例子当中

我们需要找着一个RDD的

这个数据集中

它的这种独立的元素

我们来看它的原始的数据是apple

apple和banana

那么它经过形变之后

就变成了apple和banana

实际上这个操作在我们处理出去的

过程中可能会比较常用

我们会把一些

这个重复的元素去掉

让他形成一个集合

这是一个single RDD的一个变化的一个例子

同时我们可以进行sample

那么这也是我们在大数据处理里面

可能会常用的

假设我们想要对数据集的一部分元素

进行查看的时候

我们不需要考察整个数据集

这时候我们可以进行一个

sample的操作

那么sample之后我们发现

它可以把数据集中的某一些元素

给提取出来

而把另外的一些元素给丢掉

在实际的操作当中就可以给定

我要以多大的

这样一个sample的比例

或者是其他的条件来进行sample

那么这是单一RDD操作的一些例子

那么当我们的输入是多个RDD的时候

我们可以进行什么操作呢

这边也给了几个例子

我们输入的RDD有dataset A和

dataset B

那么在A里面我们有apple

等这3个元素

在B里面我们有另外的3个元素

我们来看

当我们的输入是A和B的时候

我们能做哪些操作

我们可以去做并集

大家可以很容易的发现

我们可以把A和B中的元素

给并到一块

但是在spark里面

大家可以注意到这个union

实际上并没有把单一的元素

给过滤出来

而是将banala出现了两次

实际上大家可以再用一次

这个uniq

把这个重复的元素给去掉

这是在并集上面

我们能做的一些事情

那么在交集上

我们可以把两个集合

同时出现的元素给取出来

我们还可以做集合上的减

数据集上的一个减

我们把出现在A中

但是不出现在B中的

元素给提取出来

我们也可以做他的这个cartesian

我们将两个集合进行组合

达到一个新的这种集合的一个目标

比如说我们可以看到底下有括号

把两个集合中的元素

排列到了一块

大家要有一个概念

就是当我们在做这些操作的时候

实际上你的集合可能要

远远比我们举的例子要复杂得多

他们可以是GB或者是TB级的

这样一个数据集

那么不需要你去关心底下的

这种数据的并行

而直接将这些数据组合到一块

我们还可以对另外一种形态的

RDD进行transform

它叫做这个Pair-RDD

所谓Pair-RDD

就是说在这个RDD里面

它有一些分裂的这样一个元素

比如说在我们的这个

myRDD里面

它有一个列叫做name

另一个列叫做age

那我们当进行一个Pair-RDD的

这个transformation的时候

我们会做一件什么事情

我们可以看到Pair-RDD的transformation

有一个例子叫做groupByKey

就是说按照它的key

来进行一个分组

那么在这里面我们把放在前面的这个元素

也就是name作为它的key

当我们对name

进行一个group的时候

我们发现那个sara

实际上它有两个对应的元素

分别是31和40

他们就会组织成一个新的列表

作为新的这个value

加入到新的

形变出来的这个RDD里面

在这种操作里面

实际上对于很多业务上的

要求其实还是能够满足的

在很多业务里面他们的确是需要

对value或者对key

进行一定的这种整理

也很像我们在SQL里面

所做的一些操作

这是大家可以在后续可以去挖掘

哪一些transformation

大家可以在实际的使用中去用到

那么transformation实际上

它只负责将一个RDD

转换成另外一个RDD

这个过程不断的进行

那么你生成了

很多很多的这个RDD

在spark的这个系统当中

那么RDD的操作

还有另外一个叫做action

实际上它就是具体

去实施一个动作

那么当你实施一个

action的时候

其实整个计算就会被触发

那么在transformation的时候

你会发现整个spark系统

可能并没有发生什么动作

但是当你在做action的时候

这些动作就会真的发生了

那么他会做一些什么事情呢

比如说你可以要求他把一些结果

打印在屏幕上

你可以要求把某些RDD的结果

输入到文件分布式文件系统

这些都是action去做的

那在我们这个例子里面

我们可以看到一个

action的这个例子

是叫做count

count实际上是要把一个RDD里面

数据的元素给输出到

用户的这个屏幕

那么我们发现

当我的RDD中有5个元素

而我执行count的时候

那么spark就会真正地去

运行这个任务

这个过程也可能会是在

多台服务器上并发的进行的

那么在我们的这个结果当中

具体就输出了一个数字5

说明它有5条记录

那么其他的一些count的

这个例子还包括countByValue

我们可以按照value把这个

countd的这个RDD中的元素

进行一个统计输出到屏幕

我们可以collect

collect指的是什么呢

我们可以把整个RDD中的

数据集打印到屏幕上

一条一条打印出来

那么这也是需要spark

具体去做一些事了

那么我可以take

take是让我们可以

只打印出RDD中的N条

那么当数据比较大的时候

我们可以用这个方法

来做一个采样

做一个简单的查看

我们可以作reduce

这个reduce和map-reduce

reduce中的reduce类似

他们可以对数据

进行一个整合的操作

根据你提供的一个函数来进行

一个reduce的操作

我们可以对数据中的每一条

进行某一个函数叫做for each

那么这样也可以达到对数据进行

实际的处理的任务

我们可以把它保存成text file

让整个数据写入到

分布式文件系统

或者是写入到某一个位置

总之action和transformation的

区别就在于action

可以将RDD进行一个具体的操作

而transformation实际上

只是告诉了spark

我将要进行什么样的操作

由于你并不希望在transformation

看到这个结果

所以spark

并没有去真正的执行一些任务

只有当它发生了action之后

这些任务才会被回朔的

迭代的执行

这个过程叫做laziness的

这个执行

我们在后面会给大家介绍

高级大数据系统课程列表:

Introduction to Big Data Systems

-What is big data and what is big data system?

--Video

-Problems in big data systems?

--Video

-Overview of the course

--Video

-Principles of big data system design

--Video

Basics of Linux Data Processing

-Manipulating Data on Linux

--Video

--Video

--Video

-Basics of Linux Data Processing--Manipulating Data

-Running Commands on a Single Machine

--Video

-Running Commands on a Single Machine--作业

-Using a Linux Cluster

--Video

-Using a Linux Cluster--作业

Distributed File System

-Storage for Big Data Computing: Distributed file system

--Video

-Storage for Big Data Computing: Distributed file system--作业

-File system and GFS

--Video

-File system and GFS--作业

-Understanding HDFS using Legos

--Video

-Understanding HDFS using Legos--作业

-File System Implementation and DFS

--Video

--Video

-File System Implementation and DFS--作业

MapReduce

-What is MapReduce and why

--Video

-What is MapReduce and why

-Learn MapReduce by playing with cards

--Video

-Processing pattern

--Video

-Processing pattern--作业

-Hadoop

--Video

-Hadoop--作业

-Algorithms in MapReduce

--Video

-Algorithms in MapReduce--作业

-Tutorial

--Video

In-memory Processing

-Background

--Video

-Background--作业

-Spark

--Video

-Spark--作业

-Use Spark for data mining

--Video

-Use Spark for data mining--作业

-Spark data processing

--Video

-Spark data processing--作业

-Experiment in Spark

--Video

-Experiment in Spark--作业

Streaming Data Processing

-Introduction to streaming data processing

--Video

-Introduction to streaming data processing--作业

-Storm

--Video

--Video

--Video

-Storm--作业

-Spark streaming

--Video

--Video

-Spark streaming--作业

NoSQL

-NoSQL introduction

--Video

-NoSQL introduction--作业

-Common Advantages

--Video

-Common Advantages--作业

-Bigtable

--Video

-Bigtable--作业

-Master Startup

--Video

-Master Startup--作业

-HBase

--Video

-HBase--作业

Graph Processing

-What is GraphDB and Graph data processing

--Video

-What is GraphDB and Graph data processing--作业

-Graph systems

--Video

-Graph systems

-Example of a GraphDB

--Video

-Example of a GraphDB--作业

Machine Learning System

-Mahout

--Video

-Mahout--作业

-Case Study: Recommendation

--Video

-Case Study: Recommendatio作业

-Recommendation in Mahout

--Video

-Recommendation in Mahout--作业

Video笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。