当前课程知识点:大数据平台核心技术 >  第四讲 分布式编程模型的设计与演化 >  关系型数据编程模型 >  关系型数据编程模型(主讲人:吴威)

返回《大数据平台核心技术》慕课在线视频课程列表

关系型数据编程模型(主讲人:吴威)在线视频

关系型数据编程模型(主讲人:吴威)

下一节:分布式图计算模型(主讲人:吴威)

返回《大数据平台核心技术》慕课在线视频列表

关系型数据编程模型(主讲人:吴威)课程教案、知识点、字幕

MapReduce是一个非常强大

并且灵活的编程框架

大家线下可以再体会一下

下面我们聚焦在

最常见的一类数据格式

关系型数据

看看在关系型数据上

其他的编程模型

最近几年在分布式领域

涌现了各种关系型语言

比如来自google论文里的

FlumeJava

以及它的开源实现Crunch

还在在Hadoop的开源社区里

涌现了Cascading

Pig Spark等语言

也是非常有用的

这类语言的数据源

是关系型数据

比如之前我提到的Table

Relations PCollection

RDD等等

除了这层数据抽象比较类似

这里关系型语言

都包含了一系列的关系运算符

比如FlumeJava里

叫做primitive operations

有三个分别叫做

paralleDo groupByKey

以及flatten

而在Cascading里

这些运算符被称为Pipes

有Each GroupBy Every

CoGroup等等

Pig和前面两个语言不同

因为

它并没有给用户提供Java的SDK

而是自己定义了一套DSL

DSL就是领域专用语言

这里的领域就是分布式计算领域

这个语言叫做Pig Latin

Pig Latin也有一堆的运算符

比如FOREACH GROUP JOIN

等等

有意思的是

我们可以在这些关系型运算符里

看到类似的东西

也就是说三个编程语言里

paralleDo Each和FOREACH

三个运算符的语意其实是一样的

都是说要对关系数据集里的

每一条关系型的记录做运算

转换为另外的记录

GroupBy也是类似的意思

就是把多条记录按照某种条件

聚合起来

因此我们把这类语言

统称为关系型语言

它们都符合关系型编程模型

下面我们以Pig来举例

Pig是来自雅虎的开源软件

在Hadoop社区比较流行

在Have之前它就出现了

它最大的特点

就是定义了一系列的算子

也就是关系型的运算符

我们来看一个

Pig写的wordCount的例子

包括输入和输出只有五行代码

第一步是读入一个文件

产生一个关系数据集A

第二步

是将A通过ForEach算子

转换为单词的列表

第三步

再把单词通过CgroupBy

进行聚合

第四步

是对每个group做计数

也是用了foreach算子

最后一步是把结果数据集D

存储到文件中

在上面Pig的例子中

其实隐藏了不少细节

比如里面一个TOKENIZE的方法

其实是扩展自

Pig内制的I will founk类

并实现了exec的方法

在方法中加入了自己的处理逻辑

函数内部的细节有点类似于

MapReduce版的WhatCount

里面的Map函数

这个函数加上foreach算子

就是典型的函数式编程的例子

比如

输出只依赖于输入参数

函数不会改变外部的状态等等

下面我们来看另外一个例子

就是大家比较熟悉的SQL语言

这个语句是要找出计算机系学生

来源前十名的省份

及学生数目

观察里面几个SQL的关键词

再结合我们刚才

看到的关系型语言

我们可以看到SQL

其实也是一种关系型编程语言

SELECL JOIN GROUPBY

WHILE等算子

在其他关系型语言中都能找到

而且语意大同小异

我们在后续的课程中会介绍

分布式SQL语言

及引擎的设计与实现

MapReduce是一种

简化的关系型语言

对外只暴露了Map和Reduce

两种接口

整个MapReduce框架

用其他的关系语言来表示

会更加清楚

首先是读取文件

对应一个LOAD运算符

接着对每一条数据做Map操作

对应于ForEach运算符

ForEach是一个高阶函数

它的输入是一个具体的Map函数

接下去两步是对用户透明的

分别是GroupBy和SortBy运算符

经过这两个操纵

我们把相同Key的记录

聚合在一起

也就是得到了Key

加上Valuelist的结构

也就是Ruduce的输入

接下去的运算符又是ForEach

参数是Reduce函数

最后得到一个结果

用了STORE运算符

这不是典型的

MapReduce实现方法

因为

这是我们用其他关系型语言的

预算符组合得到的

实际上

ODPS MapReduce有一个版本

就是使用SQL语言

和用户自定义函数来实现的

这反映出一点

就是不同的关系型编程语言之间

有着很密切的关系

我们来看一个分布式编程模型

是怎么实现的

一般会分为以下几层

最上面的是面向用户的编程接口

比如Pig Latin

MapReduce或者SQL等

在中间的是执行计划层

在最下面的是执行引擎

比如Spark MapReduce

和Tez等

中间的执行计划层非常关键

它负责将用户的逻辑代码

转换为真正在分布式系统上

执行的代码

所以 我们的程序

可以写得非常简洁

但是实际表达能力却非常强

整体的地方都发生在

执行计划的生成上

执行计划生成记忆会收集信息

基于规则或者历史信息

对执行过程做优化

以期待得到更高效的执行程序

有时候执行引擎

和编程接口的区别

并不十分明显

我们在下面看到

MapReduce既出在接口层

称为MapReduce API

又出现在引擎层

我们熟知的MapReduce

同时包含这两个部分

比如Spark

也是一个既包含了完整的

基于RDE的API

也是实现了

基于DAG模型的执行引擎

但是有些编程模型就很明显

还是举Pig的例子

在Pig Ltain语言下面

执行引擎可以自由选择

比如Tez MapReduce Spark等

最早的Pig

是基于MapReduce运行的

也就是只有一种执行引擎

后来涌现出很多执行引擎

比如Tez和Spark等

关系型编程模型里

大量应用了函数式编程的思想

简化了分布式环境下的编程

而且相对于MapReduce而言

关系型的编程语言的应用范围

更加广泛

SQL就是一个很好的例子

我们接着看看关系型编程模型

里面有什么特点

总结起来有以下几条

所有的模型都是包含了

基本的编程算子或运算符

关系型编程模型比较简单

只需要关注数据格式

及数据之间的关系

因为关系型计算的算子比较类似

各类编程模型显成(07:34)的程序

其实可以相互转化

甚至一套编程模型

可以用另外一套模型来实现

编程模型可以是DSL语言

比如SQL或者Pig

也可以是通用型语言

提供编程的SDK

比如Spark Cascading等

两种方式各有优势

适用于不同的场景

同时关系型编程模型

对使用者隐藏了

分布式环境下的底层细节

将和MapReduce一样

为使用者解决了容错性 并发性

和数据本地化的问题

很早以前在Hadoop社区

只有MapReduce

这样一种执行引擎和编程框架

最近开源社区

涌现出了不少新的执行引擎

比如Spark Tez等

所以最近的趋势是用户想用

更High-level的编程语言

并兼容下面的各种引擎

大数据平台核心技术课程列表:

第一讲 大数据和ODPS

-主讲人:武永卫

--大数据处理平台概述(主讲人:武永卫)

-主讲人:程永

--大数据平台ODPS(主讲人:程永)

-QUIZ--作业

第二讲 分布式存储

-大纲

--大纲(主讲人:姚文辉)

-初步认识大数据对分布式存储系统的需求

--初步认识大数据对分布式存储系统的需求

-理解大数据对分布式存储系统的需求

--理解大数据对分布式存储系统的需求(主讲人:姚文辉)

-具体说明大数据对分布式存储系统的需求

--具体说明大数据对分布式存储系统的需求(主讲人:姚文辉)

-大规模分布式存储的挑战

--大规模分布式存储的挑战(主讲人:姚文辉)

-小概率事件-Raid卡故障

--小概率事件-Raid卡故障(主讲人:姚文辉)

-分布式存储系统举例

--分布式存储系统举例(主讲人:姚文辉)

-分布式存储系统重要功能设计要点剖析

--分布式存储系统重要功能设计要点剖析(主讲人:姚文辉)

-链式写正常流程

--链式写正常流程(主讲人:姚文辉)

-写流程的另一种常见方式:主从模式

--写流程的另一种常见方式:主从模式(主讲人:姚文辉)

-链式写异常流程

--链式写异常流程(主讲人:姚文辉)

-写异常处理的另一种方法-Seal and New

--写异常处理的另一种方法-Seal and New(主讲人:姚文辉)

-读正常流程

--读正常流程(主讲人:姚文辉)

-读流程优化-BackupRead

--读流程优化-BackupRead(主讲人:姚文辉)

-IO QoS

--IO QoS(主讲人:姚文辉)

-数据正确性:checksum

--数据正确性:checksum(主讲人:姚文辉)

-数据可靠性-Replication

--数据可靠性-Replication(主讲人:姚文辉)

-数据均衡-Rebalance

--数据均衡-Rebalance(主讲人:姚文辉)

-垃圾回收-Garbage collection

--垃圾回收-Garbage collection(主讲人:姚文辉)

-Erasure coding

--Erasure coding(主讲人:姚文辉)

-Erasure coding(3,2)写入和读取过程

--Erasure coding(3,2)写入和读取过程(主讲人:姚文辉)

-元数据管理的高可用性和可扩展性

--元数据管理的高可用性和可扩展性(主讲人:姚文辉)

-元数据管理的高可用性

--元数据管理的高可用性(主讲人:姚文辉)

-Paxos概要

--Paxos概要(主讲人:姚文辉)

-Raft

--Raft(主讲人:姚文辉)

-元数据管理的可扩展性

--元数据管理的可扩展性(主讲人:姚文辉)

-不同存储介质的特性

--不同存储介质的特性(主讲人:姚文辉)

-盘古混合存储

--盘古混合存储(主讲人:姚文辉)

-QUIZ--作业

第三讲 资源管理与任务调度

-阿里云飞天分布式调度

--阿里云飞天分布式调度(主讲人:陶阳宇)

-任务调度

--任务调度(主讲人:陶阳宇)

-资源调度

--资源调度(主讲人:陶阳宇)

-容错机制

--容错机制(主讲人:陶阳宇)

-规模挑战

--规模挑战 (主讲人:陶阳宇)

-安全域性能隔离

--安全域性能隔离(主讲人:陶阳宇)

-分布式调度的发展方向

--分布式调度的发展方向(主讲人:陶阳宇)

-QUIZ--作业

第四讲 分布式编程模型的设计与演化

-数据格式和抽象

--数据格式和抽象(主讲人:吴威)

-分布式编程模型

--分布式编程模型(主讲人:吴威)

-MapReuduce编程模型

--MapReuduce编程模型(主讲人:吴威)

-关系型数据编程模型

--关系型数据编程模型(主讲人:吴威)

-分布式图计算模型

--分布式图计算模型(主讲人:吴威)

-分布式编程未来展望

--分布式编程未来展望(主讲人:吴威)

-QUIZ--作业

实践1:通过两阶段提交协议完成数据上传

-分布式事务

--分布式事务 (主讲人:冯骁)

-分布式一致性算法

--分布式一致性算法(主讲人:冯骁)

-两阶段提交与三阶段提交

--两阶段提交与三阶段提交(主讲人:冯骁)

-实践--介绍

--实践--介绍(主讲人:冯骁)

第五讲 离线分布式关系型计算

-关系型计算基本原理_1

--离线分布式关系型计算_1(主讲人:王鹏飞)

-关系型计算基本原理_2

--关系型计算基本原理_2(主讲人:王鹏飞)

-分布式环境中的连接计算和聚合计算

--分布式环境中的连接计算和聚合计算(主讲人:王鹏飞)

-其他计算和物理优化

--其他计算和物理优化(主讲人:王鹏飞)

-QUIZ--作业

第六讲 全局数据管理与调度

-提纲

--提纲(主讲人:罗李)

-课程背景介绍

--课程背景介绍(主讲人:罗李)

-前序知识

--前序知识(主讲人:罗李)

-分布式节点距离计算法则

--分布式节点距离计算法则(主讲人:罗李)

-数据分布策略

--数据分布策略(主讲人:罗李)

-分布式计算调度

--分布式计算调度(主讲人:罗李)

-数据就近原则计算如何容错

--数据就近原则计算如何容错(主讲人:罗李)

-ODPS跨集群数据依赖

--ODPS跨集群数据依赖(主讲人:罗李)

-QUIZ--作业

实践2:编写MR完成Group By+Join操作

-主讲人:谢德军

--实践2:编写MR完成Group By+Join操作(主讲人:谢德军)

第七讲 流式计算的系统设计与实现

-增量计算和流式计算

--流式计算的系统设计与实现(主讲人:强琦)

-与批量计算的区别

--与批量计算的区别(主讲人:强琦)

-业界典型系统技术概要分析

--业界典型系统技术概要分析(主讲人:强琦)

-核心技术

--核心技术(主讲人:强琦)

-消息机制

--消息机制(主讲人:强琦)

-有状态计算、并行DAG、抢占式调度和资源隔离、Failover机制

--有状态计算、并行DAG、抢占式调度和资源隔离、Failover机制(主讲人:强琦)

-StreamSQL

--StreamSQL(主讲人:强琦)

-QUIZ--作业

第八讲 内存计算

-软硬件趋势、分布式计算简史与内存计算

--软硬件趋势、分布式计算简史与内存计算(主讲人:强琦)

-分布式计算

--分布式计算(主讲人:强琦)

-内存计算

--内存计算(主讲人:强琦)

-统一的计算框架

--统一的计算框架(主讲人:强琦)

-业界经典系统技术分析-spark&flink

--业界经典系统技术分析-spark&flink(主讲人:强琦)

-QUIZ--作业

第九讲 大规模数据的分布式机器学习平台

-主讲人:褚葳

--大规模数据的分布式机器学习平台(主讲人:褚葳)

-QUIZ--作业

实践3:实现MapReduce编程运行时库

-分布式环境下的新问题

--分布式环境下的新问题(主讲人:徐冬)

-工程实现范例

--工程实现范例(主讲人:徐冬)

-课程设计相关问题

--课程设计相关问题(主讲人:徐冬)

关系型数据编程模型(主讲人:吴威)笔记与讨论

也许你还感兴趣的课程:

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