论文部分内容阅读
随着企业内日常运转产生的数据规模的不断增大,百度已经面临需要处理上百PB大数据的问题。百度内部普遍采用MapReduce分布式计算框架进行大数据处理,虽然MapReduce框架简化了分布式计算的编程过程,但其接口仍然相对低级,代码难以维护和复用。并且,企业内大部分分析师普遍采用基于关系代数的SQL进行数据分析,百度需要在现有的分布式计算框架上开发基于关系代数的分布式Query Engine,让更多的用户用SQL就能查询大数据,提高企业内大数据查询和分析的效率。同时,目前在工业界有很多基于分布式的关系代数Query Engine系统,例如Apache Hive, Apache SparkSQL, Google Dremel等,这些系统普遍采用SQL作为大数据的查询接口,并结合传统编程语言提供函数扩展,让查询更具有扩展性。同时将查询编译为基于现有分布式计算框架的查询计划,并引入传统RDBMS的优化规则对查询计划进行优化,提高查询性能。虽然工业界的Query Engine系统可以很好的抽象大数据计算,但这些系统的功能和百度内部的需求并不完全符合,百度需要针对自己的需求开发具有高性能,高稳定性和高可扩展性的关系代数Query Engine。本系统的目标是为结构化的大数据计算提供高效的公共组件,实现易用高效地SQL查询接口。本系统借鉴了传统编译器的思想,采用分层的结构,主要分为四层:第一层是前端层,主要负责处理SQL的词法分析,语法分析和语义解析。第二层是中间表示层,实现了对关系查询的中间表示语言IR,IR是“双层”的静态强类型SSA,包括能捕捉完整查询语义的类型系统,表达式系统和关系代数算子,将关系代数运算抽象为基于Dataflow的无环有向图DAG结构。第三层是优化层,将对逻辑计划的各个算子的分析和变换抽象为“遍”,该框架可以动态地添加优化规则,引入了传统RDBMS的基于规则和基于代价的优化,生成最优的查询计划。第四层是运行时层,基于百度内部的分布式数据流计算框架实现了多种关系代数物理算子,例如数据加载算子,表连接算子,聚集算子等,以IR表示的逻辑计划算子会被编译为一个或多个物理算子,这些算子串联为DAG结构。目前本系统在百度内部已经上线使用,覆盖线上批处理查询80%的任务,平均性能超过企业内部的Hive系统30%,还将继续优化性能,完善功能,提高系统可用性和稳定性。