HadoopDB:混合分布式系统
HadoopDB 是一个 Mapreduce 和传统关系型数据库的结合方案,以充分利用 RDBMS 的性能和 Hadoop 的容错、分布特性。2009 年被 Yale 大学教授 Abadi 提出,继而商业化为 Hadapt,据称从 VC 那儿拉到了 10M 刀投资。
本文是对 HadoopDB 论文的总结。其中不免掺杂些自己的不成熟想法,更详细的内容,还请参见原论文 HadoopDB: An Architectural Hybrid of MapReduce and DBMS Technologies for Analytical Workloads
背景
PB 级数据分析系统的能力要求
- 1.性能:节省开销(时间、资金)。
- 2.容错:数据分析系统(即使有故障节点也能顺利工作) 不同于 事务型的系统的容错(从故障中无损的恢复)。节点故障时,原来的查询操作不需要重启。
- 3.在异构型环境中运行的能力。即使所有机器硬件一样,但某些机器在某些时候可能因为软件原因、网络原因也会性能降低。分布式操作时,要防止木桶效应。
- 4.活的查询接口:商业化的数据分析一般建立在 SQL 查询上,UDF 等 non-SQL 也是需要的。
并行数据库
满足 1,4:利用分表的方式,扩散到多个节点。一般情况下节点最多为几十个,原因:1.每增加一个节点,失败率增加;2.并行数据库假设各个机器都是同质化的,但这往往不太可能
MapReduce
满足 2,3,4:Map - repartition - Reduce 原为非结构化数据,但也可以适用结构化数据。
- 2:(错误节点)动态的规划节点执行任务,将错误节点任务发放给新节点。并在本地磁盘做 checkpoint 存储。
- 3:(拖后腿的节点)节点间冗余的执行。执行慢的节点的任务交付给速度快的节点执行
- 4:Hive 的 HQL
HadoopDB
融合了之前两者,做出系统层面的改进,而不仅仅是语言和接口层面。
这三个解决方案对 4 个指标的关系如下图:
架构
如图
组件介绍
Databse Connector:
作用
hadoopTask <-通信-> Database on Node。节点上的 DB 类似于 Hadoop 中的数据源 HDFS
实现
扩展了 Hadoop 的 InputFormat
Catalog:
作用
1.链接参数如数据库位置,驱动类和证书; 2.一些元数据如数据簇中的数据集,副本的位置,数据的划分。
实现
HDFS 上的 XML。希望做成类似于 Hadoop 的 namenode。
Data Loader
作用
将数据合理划分,从 HDFS 转移到节点中的本地文件系统
实现
global hasher:分配到不同节点 local hasher:继续划分为不同 chunks
SQL to MapReduce to SQL (SMS) Planner
作用
将 HiveQL 转化为特定执行计划,在 hadoopDB 中执行。原则是尽可能的讲操作推向节点上的 RDBMS 上执行,以此提高执行效率。
实现
扩展 Hive: 1.执行查找前,用 catolog 的信息更新 Hive 的 metastore,定向到节点数据库的表 2.执行前,决定划分的键;将部分查询语句推到节点的数据库中执行。
示例
示例参见下文的 slides
总结
对 hadoopDB 的一些看法:
- 其数据预处理代价过高:数据需要进行两次分解和一次数据库加载操作后才能使用;
- 将查询推向数据库层只是少数情况,大多数情况下,查询仍由Hive 完成.因为数据仓库查询往往涉及多表连接,由于连接的复杂性,难以做到在保持连接数据局部性的前提下将参与连接的多张表按照某种模式划分;
- 维护代价过高.不仅要维护Hadoop 系统,还要维护每个数据库节点;
- 目前尚不支持数据的动态划分,需要手工一次划分好
HadoopDB:混合分布式系统的更多相关文章
- Hadoop和RDBMS的混合系统介绍
现在大数据概念被时常提起,社会各界对其关注度越来越高.往往越是火热的东西,人们越容易忽略它的本质.在 slides 中,我首先按照自己的理解,简单的理顺数据处理领域的发展历程.之后,落脚点是两个比较有 ...
- 分布式系统中一些主要的副本更新策略——Dynamo/Cassandra/Riak同时采取了主从式更新的同步+异步类型,以及任意节点更新的策略。
分布式系统中一些主要的副本更新策略. 1.同时更新 类型A:没有任何协议,可能出现多个节点执行顺序交叉导致数据不一致情况. 类型B:通过一致性协议唯一确定不同更新操作的执行顺序,从而保证数据一致性 2 ...
- 解析Java分布式系统中的缓存架构(上)
作者 陈彩华 文章转载交流请联系 caison@aliyun.com 本文主要介绍大型分布式系统中缓存的相关理论,常见的缓存组件以及应用场景. 1 缓存概述 2 缓存的分类 缓存主要分为以下四类 2. ...
- 从Elasticsearch来看分布式系统架构设计
分布式系统类型多,涉及面非常广,不同类型的系统有不同的特点,批量计算和实时计算就差别非常大.这篇文章中,重点会讨论下分布式数据系统的设计,比如分布式存储系统,分布式搜索系统,分布式分析系统等. 我们先 ...
- C语言编程学习:写的秒速计算四则混合运算项目
C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...
- 可伸缩Web架构与分布式系统(1)
开源软件近年来已变为构建一些大型网站的基础组件.并且伴随着网站的成长,围绕着它们架构的最佳实践和指导准则已经显露.这篇文章旨在涉及一些在设计大型网站时需要考虑的关键问题和一些为达到这些目标所使用的组件 ...
- 第5章分布式系统模式 Broker(代理程序)
许多复杂的软件系统运行在多个处理器或分布式计算机上.将软件分布在多台计算机上的原因有多种,例如: 分布式系统可以利用多个 CPU 或一群低成本计算机的计算能力. 某个软件可能仅在特定计算机上可用. 出 ...
- 阿里云HBase推出普惠性高可用服务,独家支持用户的自建、混合云环境集群
HBase可以支持百TB数据规模.数百万QPS压力下的毫秒响应,适用于大数据背景下的风控和推荐等在线场景.阿里云HBase服务了多家金融.广告.媒体类业务中的风控和推荐,持续的在高可用.低延迟.低成本 ...
- Redis 混合存储最佳实践指南
Redis 混合存储实例是阿里云自主研发的兼容Redis协议和特性的云数据库产品,混合存储实例突破 Redis 数据必须全部存储到内存的限制,使用磁盘存储全量数据,并将热数据缓存到内存,实现访问性能与 ...
随机推荐
- centos下apache+mysql+php安装及配置
今天难得休闲,自从加盟当前公司以来好像就基本没有写过博客了.难得闲下来和前同事聊天,他们几个人合伙买了VPS在用.这对我们搞WEB开发的童鞋来说是非常重要的,我来这家公司有许久了,但是竟然到现在连一台 ...
- 存储过程 务的概念 事务的特性 关于异常的处理 连接池 构JdbcUtil类
1 存储过程 1)用当地数据库语言,写的一段业务逻辑算法,并该算法存储在客户端 2)使用存储过程需要用于CallableStatement接口,同时需要使如下SQL命令调用:{call a ...
- 【HDOJ】2388 Playground Hideout
优先级队列直接AC. /* 2388 */ #include <iostream> #include <sstream> #include <string> #in ...
- [转] Windows下使用Python读取Excel表格数据
http://www.python-excel.org/这个网站罗列了很多关于在Python下操作Excel文件的信息,这里选择了其介绍的第一个模块xlrd . xlrd 0.9.2版本跨平台同时支持 ...
- 十条常用nmap命令行格式
十条常用nmap命令行格式 ) 获取远程主机的系统类型及开放端口 nmap -sS -P0 -sV -O <target> 这里的 < target > 可以是单一 IP, 或 ...
- Sencha 基础Demo测试,三种showView的方法
直接贴代码吧 Ext.define("build.controller.MainController",{ extend:"Ext.app.Controller" ...
- BZOJ3280: 小R的烦恼
题解: 随便建一下图费用流就可以过吧... 代码: #include<cstdio> #include<cstdlib> #include<cmath> #incl ...
- 解决angular的post请求后SpringMVC后台接收不到参数值问题的方法
这是我后台SpringMVC控制器接收isform参数的方法,只是简单的打出它的值: @RequestMapping(method = RequestMethod.POST) @ResponseBod ...
- vmware 虚拟机 mount :no medium found解决方法
使用vmware时,在虚拟机设置里,设置CD/DVD为系统镜像,挂载时,有时会有找不到介质或者no medium found之类的提示.根本原因是iso镜像并没有加载到虚拟机系统内.解决办法: 首先确 ...
- ubuntu桌面右上角键盘图标不见解决方法
今天出现了这个问题,桌面右上角的键盘图标不见,找到解决方法如下: 打开终端,分别输入以下命令即可: killall ibus-daemon 这个表示结束进程 ibus-daemon -d 这个表示重启 ...