当前课程知识点:大数据平台核心技术 > 第四讲 分布式编程模型的设计与演化 > 关系型数据编程模型 > 关系型数据编程模型(主讲人:吴威)
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的编程语言
并兼容下面的各种引擎
-主讲人:武永卫
-主讲人:程永
-QUIZ--作业
-大纲
-初步认识大数据对分布式存储系统的需求
-理解大数据对分布式存储系统的需求
-具体说明大数据对分布式存储系统的需求
-大规模分布式存储的挑战
-小概率事件-Raid卡故障
-分布式存储系统举例
-分布式存储系统重要功能设计要点剖析
-链式写正常流程
-写流程的另一种常见方式:主从模式
-链式写异常流程
-写异常处理的另一种方法-Seal and New
--写异常处理的另一种方法-Seal and New(主讲人:姚文辉)
-读正常流程
-读流程优化-BackupRead
-IO QoS
-数据正确性:checksum
-数据可靠性-Replication
-数据均衡-Rebalance
-垃圾回收-Garbage collection
--垃圾回收-Garbage collection(主讲人:姚文辉)
-Erasure coding
-Erasure coding(3,2)写入和读取过程
--Erasure coding(3,2)写入和读取过程(主讲人:姚文辉)
-元数据管理的高可用性和可扩展性
-元数据管理的高可用性
-Paxos概要
-Raft
-元数据管理的可扩展性
-不同存储介质的特性
-盘古混合存储
-QUIZ--作业
-阿里云飞天分布式调度
-任务调度
-资源调度
-容错机制
-规模挑战
-安全域性能隔离
-分布式调度的发展方向
-QUIZ--作业
-数据格式和抽象
-分布式编程模型
-MapReuduce编程模型
-关系型数据编程模型
-分布式图计算模型
-分布式编程未来展望
-QUIZ--作业
-分布式事务
-分布式一致性算法
-两阶段提交与三阶段提交
-实践--介绍
-关系型计算基本原理_1
-关系型计算基本原理_2
-分布式环境中的连接计算和聚合计算
-其他计算和物理优化
-QUIZ--作业
-提纲
-课程背景介绍
-前序知识
-分布式节点距离计算法则
-数据分布策略
-分布式计算调度
-数据就近原则计算如何容错
-ODPS跨集群数据依赖
-QUIZ--作业
-主讲人:谢德军
--实践2:编写MR完成Group By+Join操作(主讲人:谢德军)
-增量计算和流式计算
-与批量计算的区别
-业界典型系统技术概要分析
-核心技术
-消息机制
-有状态计算、并行DAG、抢占式调度和资源隔离、Failover机制
--有状态计算、并行DAG、抢占式调度和资源隔离、Failover机制(主讲人:强琦)
-StreamSQL
-QUIZ--作业
-软硬件趋势、分布式计算简史与内存计算
-分布式计算
-内存计算
-统一的计算框架
-业界经典系统技术分析-spark&flink
--业界经典系统技术分析-spark&flink(主讲人:强琦)
-QUIZ--作业
-主讲人:褚葳
-QUIZ--作业
-分布式环境下的新问题
-工程实现范例
-课程设计相关问题