`
coderplay
  • 浏览: 577013 次
  • 性别: Icon_minigender_1
  • 来自: 广州杭州
社区版块
存档分类
最新评论

Anthill: 一种基于MapReduce的分布式DBMS

阅读更多
MapReduce is a parallel computing model proposed by Google for large data sets, it’s proved to have high availability, good scalability and fault tolerance, and has been widely used in recent years. However, there is a voice from traditional database community, D. J. DeWitt et al argue that MapReduce loses the performance and efficiency from DBMS, and it’s a step backwards of data analysis techniques. After that, HadoopDB article presents a new type of MapReduce based distributed database implementation, but it has the following disadvantages: (1) It doesn’t add any query execution engine for Hadoop client, HadoopDB is only a pilot project; (2) HadoopDB uses PostgreSQL as its underlying database, where redundancies and backups which Hadoop’s underlying file system HDFS provides is short of, thus it loses Hadoop’s original high availability; (3) There is not a complete partition mechanism, its tables are manually  partitioned, this is not practical; (4) Table joining in HadoopDB is assumed in the ideal state, that two tables’ partitions are on the same node, but it’s not the case in the real world.
This paper overcomes the above problems, our implementation named Anthill can keep both advantages of shared-nothing MPP architecture databases and the MapReduce. Experiments show that: (1) Anthill provides better scalability than MPP databases, it can deploy more than 100 nodes, even 500 nodes; (2) Since Anthill uses the column-oriented database MonetDB as its underlying database, where I/O is effectively reduced, it achieves better performance than Hadoop and HadoopDB; (3) Anthill adds a complete query execution engine with parser, optimizer and planner, thus it can more intelligently handle the diversity of data and produce better query plans compared to HadoopDB. In short, Anthill is a new type of distributed database system with high commercial values.

Keywords: Distributed Database; Anthill; MapReduce; Hadoop

分享到:
评论
10 楼 bupt04406 2010-05-13  
coderplay 写道
bupt04406 写道
如果有很多不同的表的话,那就要对不同的表实现相应的InputFormat或是使用不同的sql语句

参见Hadoop自身的DBInputFormat, 不同sql语句就造成不同InputFormat实例,那重用性太差了。


嗯,DBInputFormat,使用jdbc接口,sql语句来进行操作。
应该使用jdbc或odbc这样的数据库接口
9 楼 bupt04406 2010-05-13  
coderplay 写道
bupt04406 写道
都是离线数据分析,Anthill中数据需要先放在了DB表里面,表的分布,也就是数据的分散性,均匀性不好会导致mapreduce分析的各个task需要的时间都不一样吧,怎么解决这个比较好呢

分布可以是哈希分布,也可以是Round-Robin分布。表采用Round-Robin可以确保表分布均匀,但是在做表连接时,却需要更多的节点间数据传输。这是一个矛盾点:相同哈希值的数据放一起连接效率高,但可能会引起数据倾斜;采用Round-Robin随机分布数据不会倾斜,但连接效率低。有一种办法是二次哈希,将倾斜的数据再次哈希——这需要精确的元数据控制。



嗯,分布这块是重点,涉及比较多的考虑,呵呵。
8 楼 coderplay 2010-05-13  
bupt04406 写道
如果有很多不同的表的话,那就要对不同的表实现相应的InputFormat或是使用不同的sql语句

参见Hadoop自身的DBInputFormat, 不同sql语句就造成不同InputFormat实例,那重用性太差了。
7 楼 coderplay 2010-05-13  
bupt04406 写道
利用DB来存储数据,每份数据都有多个备份,DB的额外开销是不是会比较大呢,用于存储一些冗余的信息会比较多吧

关于表位置的信息,是放在主节点的元数据库里面,数据节点不承担这部分责任。可以参考Slony-I。
6 楼 coderplay 2010-05-13  
bupt04406 写道
都是离线数据分析,Anthill中数据需要先放在了DB表里面,表的分布,也就是数据的分散性,均匀性不好会导致mapreduce分析的各个task需要的时间都不一样吧,怎么解决这个比较好呢

分布可以是哈希分布,也可以是Round-Robin分布。表采用Round-Robin可以确保表分布均匀,但是在做表连接时,却需要更多的节点间数据传输。这是一个矛盾点:相同哈希值的数据放一起连接效率高,但可能会引起数据倾斜;采用Round-Robin随机分布数据不会倾斜,但连接效率低。有一种办法是二次哈希,将倾斜的数据再次哈希——这需要精确的元数据控制。
5 楼 bupt04406 2010-05-13  
如果有很多不同的表的话,那就要对不同的表实现相应的InputFormat或是使用不同的sql语句
4 楼 bupt04406 2010-05-13  
利用DB来存储数据,每份数据都有多个备份,DB的额外开销是不是会比较大呢,用于存储一些冗余的信息会比较多吧
3 楼 bupt04406 2010-05-13  
都是离线数据分析,Anthill中数据需要先放在了DB表里面,表的分布,也就是数据的分散性,均匀性不好会导致mapreduce分析的各个task需要的时间都不一样吧,怎么解决这个比较好呢
2 楼 coderplay 2010-05-12  
它针对TB级别离线数据分析的, 没有update, insert单条数据的操作。Hadoop本身也是针对离线数据分析的,start up 和clean up都需要时间, JobTracker和TaskTracker的通信也需要时间。 Anthill将sql解析成MapReduce作业, 而MapReduce作业操作的节点数据是DB上的表,而非HDFS文件.
1 楼 bupt04406 2010-05-12  
是说Anthill是一个分布式数据库,有数据库的所有特点(可扩展性如何来获得),又跟hadoop一样数据有多个备份(数据备份,多个备份如何保持一致性),底层存储是按列存储(MonetDB),各个table由系统分配来存储在不同的节点上,mapreduce似的分布式计算么。

首先跟RDMS一样,有SQL Engine(Compiler Optimizer Execution Engine),获取client的sql请求,解析sql,执行sql,返回请求结果。 
底层是分布式存储,多个节点,那就需要有一个master。
数据有多个备份,增删改查就不好做了。 这个是最难做的吧
不同的table存储的位置不是人工指定的,而是系统自动分配的。
支持mapreduce应该比较好做。

Global site tag (gtag.js) - Google Analytics