知识卡片
Hadoop与MPP数据库对比之处理模型多样性:任意代码与声明式查询的融合
内容
MPP数据库是单体紧密集成的系统,SQL让业务分析师能用优雅语法表达查询、还能对接可视化工具,但并非所有处理都能合理地表达成SQL——机器学习特征工程、图像分析、自然语言模型这类高度定制化的逻辑天然需要写代码而非查询。MapReduce的优势正在于让工程师能在大数据集上自由运行任意代码,甚至可以在它之上搭出一个SQL执行引擎(这正是Hive所做的),反过来在单体MPP数据库里”运行任意代码”却做不到,因为数据库的用户定义函数机制通常笨重、且与主流编程语言的包管理生态(Maven/npm/gems)兼容不佳。但反过来,数据流引擎后来也主动向声明式风格靠拢:如果连接是以声明方式指定的,查询优化器就能自动分析输入特征、决定用哪种连接算法(甚至改变连接顺序)最优,省去开发者手写和记住各种连接算法的负担;对于只是简单过滤或抽取字段的操作,声明式表达还能让引擎利用列式存储和向量化执行进一步榨取性能。这两条路线正在互相靠拢:批处理框架越来越像MPP数据库,同时保留了运行任意代码的灵活性,最终两者看起来都只是”存储和处理数据的系统”。
参考来源
- 位置:《数据密集型应用系统设计》第十章《批处理》"处理模型的多样性""向声明式查询语言的转变"(源文件:_epub-src/ch10_split_002.html)
- 结论依据:原文说明SQL无法表达所有处理需求(机器学习/图像分析),MapReduce允许运行任意代码但数据库UDF机制笨重,随后指出数据流引擎引入声明式连接语义让优化器自动选择连接算法与利用列存/向量化,直接支撑本卡片结论。
- 原始内容:并非所有类型的处理都可以合理地表达为SQL查询……MapReduce使工程师能够轻松地在大型数据集上运行自己的代码……如果连接是以声明式的方式指定的……查询优化器决定如何最好地执行连接。