读了两篇关于hadoopDB数据仓库的论文之后,写一点关于hadoopDB的简介:
hadoopDB是耶鲁大学的一个大学项目, 目的是为了构建一个数据仓库的工具。
HadoopDB 结合了hadoop 和paralled RDBMS,结合两个技术的优点。
HadoopDB is to connect multiple single_node database systemusing Hadoop as the task coordinator and network communication layer.
Hadoop的优点:fault toleranceand ability to operate in a heterogeneous environment properties.
缺点: performance,特别是对于join和aggregation操作。
Paralled RDBMS的优点: performance, 特别是对于join和aggregation的优化 处理。
缺点:就是hadoop的优点。
原来hadoop + hive就是一套完整数据仓库工具,hive的作用是把用户输入的类SQL语句翻译成hadoop能够执行一些操作-mapreduce的任务tree(包含多个mapreduce的操作),只有由hadoop去执行。但是这些操作都是基于google自己的HDFS,所以在performance上并不是理想。同类的产品还有yahoo的pig, Microsoft的SCOPE。
HadoopDB的最终想法就是在map阶段把SQL语句尽量的让paralledRDBMS 去执行,尽量发挥并行数据库系统的优势,之后把每个node的输出序列化到temp文件中,在reduce阶段把结果从temp文件中读出即可。
如果实在不能让paralled RDBMS去执行,那么只能依靠mapReduce的功能。
上面是HadooopDB的一个结构图,在原来的hadoop+ hive的基础上,增加了一些组件:
1. SMS Planner.
不清楚是SMS Planner是独立于hive,还是依赖于hive.现在暂且认为SMSPlanner的作用是在hive解析SQL语句生成mapreduce任务tree之后,对mapreduce任务tree进行优化,尽量指导hadoop去paralledDatabase中执行SQL。
2. Catalog。
里面存储了paralled database的一些信息。
3. Data loader。
负责把原始数据load到paralleddatabase中,需要完成的工作是对原始数据的partition.
4. Database Connector
该类继承自hadoop的inputformat类,用于向各个node传递信息,Databaseconnector里面包含了node里面database的链接信息和需要执行的SQL语句。
5. Paralled DataBase.
用于代替HDBS在各个node上存储数据。
以下面SQL语句为例:
SELECT YEAR(saleDate),SUM(revenue)
FROM sales GROUP BY YEAR(saleDate);
1. 对于hive来说,他会把他翻译成如下步骤:
2. 而通过SMS planner对上面plan的修改,如果在partition的时候,所有的表格是以year为attribute做的partition,那么每个database里面的数据是独立的,也就是可以把上述SQL语句直接给node中的database做查询。那么修改之后的plan如下:
只需要Map阶段把SQL语句传递给每个node,每个node只需要返回查询结果即可,不需要在reduce阶段做什么操作。
3. 但是如果在partition的时候,所有的表格没有以year为attribute做partition, 那么各个database里面的数据不是独立,是需要全部从各个数据库中读出相关表格,之后让mapreduce以year为attribute做map操作,之后对于各个map操作,做reduce操作。
两篇论文:
Abadi - HadoopDB An Architectural Hybrid of MapReduce and DBMS Technologies for Analytical Workloads
Abadi - Efficient Processing of Data Warehousing Queries in a Split Execution Environment