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:混合分布式系统的更多相关文章

  1. Hadoop和RDBMS的混合系统介绍

    现在大数据概念被时常提起,社会各界对其关注度越来越高.往往越是火热的东西,人们越容易忽略它的本质.在 slides 中,我首先按照自己的理解,简单的理顺数据处理领域的发展历程.之后,落脚点是两个比较有 ...

  2. 分布式系统中一些主要的副本更新策略——Dynamo/Cassandra/Riak同时采取了主从式更新的同步+异步类型,以及任意节点更新的策略。

    分布式系统中一些主要的副本更新策略. 1.同时更新 类型A:没有任何协议,可能出现多个节点执行顺序交叉导致数据不一致情况. 类型B:通过一致性协议唯一确定不同更新操作的执行顺序,从而保证数据一致性 2 ...

  3. 解析Java分布式系统中的缓存架构(上)

    作者 陈彩华 文章转载交流请联系 caison@aliyun.com 本文主要介绍大型分布式系统中缓存的相关理论,常见的缓存组件以及应用场景. 1 缓存概述 2 缓存的分类 缓存主要分为以下四类 2. ...

  4. 从Elasticsearch来看分布式系统架构设计

    分布式系统类型多,涉及面非常广,不同类型的系统有不同的特点,批量计算和实时计算就差别非常大.这篇文章中,重点会讨论下分布式数据系统的设计,比如分布式存储系统,分布式搜索系统,分布式分析系统等. 我们先 ...

  5. C语言编程学习:写的秒速计算四则混合运算项目

    C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...

  6. 可伸缩Web架构与分布式系统(1)

    开源软件近年来已变为构建一些大型网站的基础组件.并且伴随着网站的成长,围绕着它们架构的最佳实践和指导准则已经显露.这篇文章旨在涉及一些在设计大型网站时需要考虑的关键问题和一些为达到这些目标所使用的组件 ...

  7. 第5章分布式系统模式 Broker(代理程序)

    许多复杂的软件系统运行在多个处理器或分布式计算机上.将软件分布在多台计算机上的原因有多种,例如: 分布式系统可以利用多个 CPU 或一群低成本计算机的计算能力. 某个软件可能仅在特定计算机上可用. 出 ...

  8. 阿里云HBase推出普惠性高可用服务,独家支持用户的自建、混合云环境集群

    HBase可以支持百TB数据规模.数百万QPS压力下的毫秒响应,适用于大数据背景下的风控和推荐等在线场景.阿里云HBase服务了多家金融.广告.媒体类业务中的风控和推荐,持续的在高可用.低延迟.低成本 ...

  9. Redis 混合存储最佳实践指南

    Redis 混合存储实例是阿里云自主研发的兼容Redis协议和特性的云数据库产品,混合存储实例突破 Redis 数据必须全部存储到内存的限制,使用磁盘存储全量数据,并将热数据缓存到内存,实现访问性能与 ...

随机推荐

  1. 修改VMware Workstation 界面语言

    修改方法 我安装的VMware版本是10,找到VMware安装目录,我的是C:\Program Files\VMware\VMware Workstation\messages,里面有ja和zh-cn ...

  2. 给TextView中的text上下左右添加一张图片

    1,在xml中配置使用,android:drawableLeft 等 其它的有:android:drawableTop,android:drawableBottom,android:drawableR ...

  3. 将OutLook.exe注册为服务,让其一直保持开启状态

    类似于TaobaoProtect.exe是由TBSecSvc服务启动的 http://stackoverflow.com/questions/3582108/create-windows-servic ...

  4. The Material Sourcing Process Failed To Create Picking Suggestions in INVTOTRX (文档 ID 2003806.1)

    In this Document Symptoms Cause Solution References Applies to: Oracle Inventory Management - Versio ...

  5. Zookeeper基本知识

    Zookeeper的Session: (1)客户端和server间采用长连接 (2)连接建立后,server产生session ID(64位)返还给客户端 (3)客户端定期发送ping包来检查和保持和 ...

  6. .woff 文件404,配置到web.config

    <staticContent>        <remove fileExtension=".woff" />        <mimeMap fil ...

  7. uva11082 Matrix Decompressing

    网络流 首先算出每行每列的数的和. 每行的值减去c,每列的值减去R 然后每行和每列之间连边,容量为19. 这样一来,(i,j)的流量相当于(i,j)的值-1. 这样就避免了流量为0不对应答案的尴尬情况 ...

  8. android.util.AndroidRuntimeException: requestFeature() must be called before adding content 错误解决方法

    Activity全屏,网上的代码如下:protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstance ...

  9. Centos 下Nginx 自启动脚本

    #!/bin/bash #ckconfig: NGINX_PATH=/web/container/nginx- NGINX_COMMAND=$NGINX_PATH/sbin/nginx NGINX_P ...

  10. Java、JSP获得当前日期的年、月、日

    Java package com.ob; import java.text.ParseException; import java.text.SimpleDateFormat; import java ...