转自: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. 通过micrometer实时监控线程池的各项指标

    通过micrometer实时监控线程池的各项指标 前提 最近的一个项目中涉及到文件上传和下载,使用到JUC的线程池ThreadPoolExecutor,在生产环境中出现了某些时刻线程池满负载运作,由于 ...

  2. 《学习opencv》笔记——矩阵和图像操作——cvCrossProduct and cvCvtColor

    矩阵和图像的操作 (1)cvCrossProduct函数 其结构 void cvCrossProdust(//计算两个三维向量的叉积 const CvArr* src1, const CvArr* s ...

  3. bzoj-1492 货币兑换Cash (2)——CDQ分治

    题意: 略 见上一篇 题解: 方程还是那个方程f[i]=A[i] * X[j] + B[i] * Y[j]. 化简为Y[i]=(-A[i]/B[i]) * X[i] + f[i]/B[i]这一坨: 既 ...

  4. ip段/数字,如192.168.0.1/24的意思是什么?(转)

    ip段/数字,如192.168.0.1/24的意思是什么? 踩踩 0作者:Admin 发表日期:2013-10-31 复制链接 收藏 首先来了解一下二进制的转换知识: 二进制数转换成十进制数 二进制的 ...

  5. iOS开发- 隐藏键盘总结

    一.隐藏自身软键盘 当对于有多个UITextField控件都想通过点击"Return"来隐藏自身软键盘的情况.这时的最好办法是使用Did End on Exit事件.在点击软键盘右 ...

  6. 转载:【Linux+windows】PHP5.5安装PHPRedis扩展

    首先,你必须安装了 Redis服务器,然后才能安装php-redis扩展,就像先安装mysql,然后再将php-mysql扩展安装并引入(区别是:php-redis扩展插件php没有自带,php-my ...

  7. Android成长之路-LayoutInflater和inflate的用法

    在这里用Tabhost的例子来说明: package cn.csdn.activity; import android.app.TabActivity; import android.os.Bundl ...

  8. HDU 4927 Series 1 ( 组合+高精度)

    pid=4927">Series 1 大意: 题意不好翻译,英文看懂也不是非常麻烦,就不翻译了. Problem Description Let A be an integral se ...

  9. 温故而知新 forEach 无法中断(break)的问题

    forEach无法使用break和return来中断,只能使用throw catch来达到中断的效果了. var id = (function(){ // forEach 是无法中断的.除非用这种ha ...

  10. 稳固而窒息 jquery attr 和 Prop的区别

    通常在获取或者设置checked,selected,readonly,disabled等的时候使用prop效果更好 attr是通过setAtrribute和getAttribute来设置的,使用的是D ...