转自:http://blog.jobbole.com/86710/

这是一组系列博文,目的是详尽介绍 SQL-on-Hadoop 。本系列的第一篇会介绍 Hadoop 系统的存储引擎和在线事务处理(简称 OLTP );第二篇将介绍在线分析处理(简称 OLAP );第三篇将介绍对 Hadoop 引擎的改进以及在相关替代产品中如何选型等话题。

SQL on Hadoop 是一个既令人兴奋又令人困扰的话题;

几乎每周都有一个新的 SQL on Hadoop 支持项目似乎抓住过社区注意力,哪怕只是一个短暂的瞬间;

在这个系列中,我们会讨论 Hadoop 系统上支持的每一类 SQL 解决方案,并对它们的架构,用例以及其他做出诚实的讨论。

Hadoop 引擎上的 SQL 有许多广泛的应用领域:

  • 数据处理与在线分析处理(OLAP)
  • 改进优化
  • 在线事务处理(OLTP)

存储引擎:

今天 Hadoop 主要有三个存储引擎:分别是 Apache HBase、Apache Hadoop HDFS 和 Hadoop Accumulo。Apache Accumlo与 Hbase 非常相似,但它本是由 NSA 组织创建的项目,历史上特别看重系统的安全性,尤其在授权认证方面;在我们看来,HBase 现在已经将安全特性方面的工作加入到项目中了,这样的话后面就不再进一步讨论 Accumulo 了。

HBase 是一个分布式键值存储系统,数据是通过排好序的 map 形式存储,也就是说数据都是经过对 key 列排序的,就像我们下面要描述的那样,HBase 典型的用例是 OLTP 应用,HDFS 是一个文件系统并能够以分布式的方式存储极大容量的数据集合;

HBase 在 HDFS 里存储的数据是以 HFile 格式存入的,这种格式不可配置。当不使用 HBase 而直接使用 HDFS 时,用户是必须要选择一种文件格式;

当进行文件格式选择时是有许多要点需要考虑的,比如,

  • 主要的读取模式是怎样的?是读取所有行呢,还是只读取所有行数据的一个子集;
  • 数据是不是还可能含有非 ASCII 码的文本内容?
  • 哪些工具会读写这些数据呢(Apache Hive,  Spark ?);

广义上说有两种文件格式与 HDFS 一起使用,它们是 Columnar 和 row-wise。Columnar 格式例如 RCFILE、ORC 和 Apache Parquet等,这些类型能提供极致的压缩性能(通过类似行程编码的多种编码方式进行压缩),同时在只读取行内少量列的场景下,也能提供较高的读性能;比如你一行数据有五十到一百个列却只需读取七八个列的场合;

row-wise 格式,比如有受限定的文本格式、Sequence 文件格式以及 Apache Avro 格式,这些格式虽不提供有效的压缩特性,但比较适合那些需要读取表中大多数列的业务场景,也适合那种数据是以流的方式,每次小批量地导进表中的业务场景;

我们建议排除文本格式,RCfile 和 Sequence 文件这几种格式,因为他们都是历史遗留的文件格式,另外不推荐也是因为集成历史系统数据时它们有潜在的异常问题。我们不建议使用这些格式是因为他们容易发生文本冲突(如非 ASCII 码文本),性能差,还有除了文本方式之外很少有工具可以读取它们;

一旦我们回答了选 columnar 还是 row-wise 的问题,并排除了历史遗留的那些文件格式,最重要的问题就变成了哪一个工具和引擎能够读取和写入这些数据,大量的 Hadoop 生态链工具和引擎已经集成了 Avro 和 Parquet 项目,其中 ORC 是性能最好的 Apache Hive 文件格式。

在线事务处理

Apache HBase 项目提供 OLTP 类型的操作并极具扩展性,HBase 是唯一一个通常用于在线用户数据存储的Hadoop子模块,但是 HBase 项目的目标并不是做一个关系型数据库管理系统,而且它也不是为了替换 MySQL、Oracle 或者 DB2 这类关系型数据库的,实际上 HBase 自己并不提供任何 SQL 接口,而且用户还必须用 Java, Python, 或者 Ruby 编程来存储和检索数据;

Apache Phoenix 项目目标是基于 Apache HBase 提供 OLTP 类型的 SQL,Phoenix 允许用户基于 HBase 数据模型执行插入更新和删除操作,但是就像前面提到的一样,HBase 数据模型从根本上就不同于传统关系型数据库,这样的话 HBase 加 Phoenix 也仍然不是关系型数据库的替代者;

HBase (以及Phoenix) 项目对于那些基于 RDBMS 之上,在应用扩展过程中遇到麻烦的业务场景非常有用;传统关系型数据库领域里的一个传统解决方案是进行水平分区,但这种解决方案跑起来却常遭受以下缺陷的困扰:

  • 跨分片事务没有得到支持
  • 增加机器进行水平扩容时需要复杂且昂贵的再分片过程,

就像经过分片的数据库一样,HBase 并不支持事务,但增加机器进行水平扩展和在HBase内部做负载再均衡,HBase 系统就要容易得多;

新的节点可以被加入到 HBase 集群中,HBase 能够自动分配数据分片到不同节点,如果假定分片数据库和 HBase 都缺少事务支持的话,HBase 就会因提供易于增加机器水平扩展的能力而胜出,有一些公司已经在做底层使用 HBase 架构基础而上层增加事务 SQL 支持的产品,比如 Splice Machine公司等。

SQL on Hadoop 的真相(1)的更多相关文章

  1. SQL on Hadoop 的真相(2)

    转自:http://blog.jobbole.com/87159/ 这是一组系列博客,目的是详尽介绍 SQL-on-Hadoop .该系列的第一篇会介绍一些存储引擎和在线事务处理(简称 OLTP )相 ...

  2. SQL on Hadoop中用到的主要技术——MPP vs Runtime Framework

    转载声明 本文转载自盘点SQL on Hadoop中用到的主要技术,个人觉得该文章对于诸如Impala这样的MPP架构的SQL引擎和Runtime Framework架构的Hive/Spark SQL ...

  3. SQL on Hadoop系统的最新进展(1)

    转自:http://blog.jobbole.com/47892/ 为什么非要把SQL放到Hadoop上? SQL易于使用.那为什么非得基于Hadoop呢?the robust and scalabl ...

  4. 盘点SQL on Hadoop中用到的主要技术

    转载自:http://sunyi514.github.io/2014/11/15/%E7%9B%98%E7%82%B9sql-on-hadoop%E4%B8%AD%E7%94%A8%E5%88%B0% ...

  5. SQL on Hadoop技术综述

    一.系统架构 runtime framework v.s. mpp 在SQL on Hadoop系统中,有两种架构: 1.一种是基于某个运行时框架来构建查询引擎,典型案例是Hive: 2.另一种是仿照 ...

  6. Hive--可执行SQL的Hadoop数据仓库管理工具

    Hive是一个基于HDFS的数据仓库软件,可理解为数据库管理工具:Hive的功能主要有: 1. 支持使用SQL对分布式存储的大型数据集进行读.写.管理,将SQL转化成MapReduce任务执行: 2. ...

  7. 一张图告诉你是须要 SQL 还是 Hadoop

    译序 非常多朋友问时下如火如荼的 Hadoop 是否适合引进我们自己的项目,什么时候用 SQL.什么时候用 Hadoop,它们之间怎样取舍?Aaron Cordova 用一张图来回答你这个问题,对于不 ...

  8. Hadoop 和 HDInsight:Windows Azure 中的大数据

    世界的大数据包含一个庞大而充满活力的生态系统,但一个开放源码项目上面有这一切,那就是 Hadoop 的王朝. Hadoop 是事实上的标准的分布式的数据运算.Hadoop 提供了一个 MapReduc ...

  9. 一篇文看懂Hadoop:风雨十年,未来何去何从

    本文分为技术篇.产业篇.应用篇.展望篇四部分 技术篇 2006年项目成立的一开始,“Hadoop”这个单词只代表了两个组件——HDFS和MapReduce.到现在的10个年头,这个单词代表的是“核心” ...

随机推荐

  1. 环境变量之执行文件路径的变量PATH

    当我们执行一个命令时,系统会依据PATH的设置去PATH定义的每个目录下查寻该命令的可执行文件,如果在PATH定义的目录中含有多个文件名为我们要执行的命令的可执行文件时,那么先查询到的同名命令先被执行 ...

  2. Mac安装Myeclipse2015开发环境

    1.下载Myeclipse2015 链接: http://pan.baidu.com/s/1jHe8mFk 密码: qgeb 下载下来后,在安装的时候需要自己设置下安装目标,不然在破解的时候不是太好找 ...

  3. js判断是否为数组

      js判断是否为数组类型 CreateTime--2018年5月18日14:38:58 Author:Marydon 1.错误方式 使用typeof 返回的是object 2.正确方式 方式一:使用 ...

  4. VC、OpenGL、ArcGIS Engine开发的二维三维结合的GIS系统

    一.前言 众所周知,二维GIS技术发展了近四十年,伴随着计算机软硬件以及关系型数据库的飞速发展,二维GIS技术已日臻完善.在对地理信息的分析功能上有着无可比拟的优势.一些宏观的地理信息,一维的地理信息 ...

  5. android 自己定义组合控件

    自己定义控件是一些android程序猿感觉非常难攻破的难点,起码对我来说是这种,可是我们能够在网上找一些好的博客关于自己定义控件好好拿过来学习研究下,多练,多写点也能找到感觉,把一些原理弄懂,今天就讲 ...

  6. jquery api 常见api 元素操作例子

    append_prepend.html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> ...

  7. js同域名下不同文件下使用coookie

    //写cookies function setCookie(name,value) { var Days = 30; var exp = new Date(); exp.setTime(exp.get ...

  8. UED、UCD、UE、UI、交互设计概念

    作者:王阅微链接:https://www.zhihu.com/question/19908990/answer/14314128来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  9. bcdedit

    我的电脑装了双系统:Win2003 SP2(C盘)和Win2008 SP2(D盘),最近2003一启动就蓝屏unknown hard error,安全模式也进不去,恢复注册表等方法试过也不行,但200 ...

  10. Python isdecimal() 方法

    描述 Python isdecimal() 方法检查字符串是否只包含十进制字符.这种方法只存在于unicode对象. 注意:定义一个十进制字符串,只需要在字符串前添加 'u' 前缀即可. 语法 isd ...