MapReduce框架声明式接口系统介绍
1. MapReduce框架的特点与局限
MapReduce框架对程序员有很大吸引力,它只有两个主要的高级声明式原语(map和reduce),可以用任何编程语言编写,且无需担心并行执行的细节。然而,该框架也存在一些局限性:
- 数据格式和数据流僵化 :它只有一种输入数据格式(键/值对)和两阶段数据流,对于有不同数据流的任务(如连接操作或多阶段任务),需要不优雅的变通方法。
- 代码复用和维护困难 :即使是最常见的操作(如投影和过滤)也需要编写自定义代码,除非用户构建和维护自己的常用函数库,否则代码通常难以复用和维护。
此外,许多程序员可能不熟悉MapReduce框架,他们更倾向于使用SQL这种更熟练的高级声明式语言来表达任务,同时将执行优化细节留给后端引擎。高级语言抽象还能使底层系统进行自动优化。接下来将介绍为解决这些问题并在MapReduce框架之上添加类似SQL接口的研究成果。
2. 相关系统介绍
2.1 Sawzall
Sawzall是Google在MapReduce之上使用的脚本语言。一个Sawzall程序定义了对数据的单个记录执行的操作,该语言无法同时检查多个输入记录,也不能让一个输入记录的内容影响另一个记录的处理。语言中唯一的输出原语是 emit 语句,它将数据发送到外部聚合器(如求和、求平均值、求最大值、求最小值),聚合器收集每个记录的结果后进行关联和处理。聚合在语言外部进行的原因有:
- 一些聚合算法很复杂,最好用原生语言实现并打包。
超级会员免费看
订阅专栏 解锁全文
625

被折叠的 条评论
为什么被折叠?



