• Impala,Hive,Hbase,关系数据库区别


    Impala简介

    Impala是Cloudera公司主导开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop的HDFS和HBase中的PB级大数据。

    已有的Hive系统虽然也提供了SQL语义,但由于Hive底层执行使用的是MapReduce引擎,仍然是一个批处理过程,难以满足查询的交互性。

    相比之下,Impala的最大特点也是最大卖点就是它的快速。

    Impala特性

    a.没有使用MapReduce作为底层执行计算框架,虽然MapReduce是非常好的并行计算框架,但它更多地是面向批处理模式,而不是面向交互式的SQL执行模式。
    b.与MapReduce相比Impala将整个查询分成一批查询计划树,而不是一连串的MapReduce执行任务,在将查询计划分发之后,Impala采用拉链式的方式拉取计算结果,把结果数据组成执行树并进行流式传递汇集。减少了把中间结果写入磁盘的步骤,最后有从磁盘读取数据的开销。即相比没有了hive中mapreduce的启动时间。Impala的数据执行模式没有像Hive那样map->shuffle->reduce模式来处理数据保证了Impala的并发性和避免了中间过程中不必要的sort和shuffle。

    关系数据库和Impala

    Impala使用类似于SQL和HiveQL的Query语言。 下表描述了SQL和Impala查询语言之间的一些关键差异。

    Impala关系型数据库
    Impala使用类似于HiveQL的类似SQL的查询语言。 关系数据库使用SQL语言。
    在Impala中,您无法更新或删除单个记录。 在关系数据库中,可以更新或删除单个记录。
    Impala不支持事务。 关系数据库支持事务。
    Impala不支持索引。 关系数据库支持索引。
    Impala存储和管理大量数据(PB)。  与Impala相比,关系数据库处理的数据量较少(TB)。

    Impala与hive相同点

    1.数据储存:使用相同的数据存储池,都可以将数据的储存在HDFS或HBase中。
    2.元数据:两者使用相同的元数据
    3.SQL解释处理:比较相似的就是都是通过词法分析生成执行计划。
    4.查询计划树

    不同点

    1.执行计划
    hive依赖于MapReduce执行框架,执行计划分成map->shuffle-reduce->…的模型。如果是一个Query则会有跟多的写中间结果,由于MapReduce的执行特点,MapReudce任务的开启过程会增加过多的时间
    Impala将执行计划表现为一颗完整的执行计划树,Impala将所有的执行计划分发到Impala进行查询执行,避免了MR中sort和shuffle过程中的时间浪费。
    2.数据流
    hive:采用push推的方式,将每次计算的结果都push达到下一个节点。
    Impala:采用pull拉取的方式,将本节点需要的结果从上一个节点执行完的结果中进行pull拉取。
    3.内存使用
    Hive: 在执行过程中如果内存放不下所有数据,则会使用外存,以保证Query能顺序执行完。每一轮MapReduce结束,中间结果也会写入HDFS中,同样由于MapReduce执行架构的特性,shuffle过程也会有写本地磁盘的操作。
    Impala: 在遇到内存放不下数据时,当前版本0.1是直接返回错误,而不会利用外存,以后版本应该会进行改进。这使用得Impala目前处理Query会受到一定的限制,最好还是与Hive配合使用。Impala在多个阶段之间利用网络传输数据,在执行过程不会有写磁盘的操作(insert除外)
    4.调度
    hive任务调度依赖于hadoop的调度策略
    Impala调度由自己完成,目前只有一种调度器,simple schedule,它会尽量满足数据的局部性,扫描数据的进程尽量靠近数据本身所在的节点服务器。调度器目前还比较简单,在Simple Scheduler::GetBackend中可以看到,现在还没有考虑负载,网络IO状况等因素进行调度。但目前Impala已经有对执行过程的性能统计分析,应该以后版本会利用这些统计信息进行调度吧。
    5.容错
    Hive依赖于Hadoop的容错能力。
    Impalad:在查询过程中,没有容错逻辑,如果在执行过程中,发生故障,则直接返回错误(这与Impalad的设计有关,因为Impala定位于实时查询,一次查询失败,再查询一次就好,再查一次的成本很低)。但从整体来看,Impala是能很好的容错,所有的Impalad是对等的结构,用户可以向任何一个Impalad提交查询,如果一个Impalad失效,其上正在运行的所有Query都将失败,但用户可以重新提交查询由其它Impalad代替执行,不会影响服务。对于State Store目前只有一个,但当State Store失效,也不会影响服务,因为每个Impala都同步了State store的信息。只是不能再次更新集群的状态了。有可能会将执行计划分配给已经失效的Impalad执行。
    6.适用场景
    Hive:复杂的批处理查询任务,数据转换任务。
    Impala:实时数据分析,因为不支持UDF,能处理的问题有一定的限制,与Hive配合使用,对Hive的结果数据集进行实时分析。

    Hive,Hbase和Impala

    HBaseHiveImpala
    HBase是基于Apache Hadoop的宽列存储数据库。 它使用BigTable的概念。 Hive是一个数据仓库软件。 使用它,我们可以访问和管理基于Hadoop的大型分布式数据集。 Impala是一个管理,分析存储在Hadoop上的数据的工具。
    HBase的数据模型是宽列存储。 Hive遵循关系模型。 Impala遵循关系模型。
    HBase是使用Java语言开发的。 Hive是使用Java语言开发的。 Impala是使用C ++开发的。
    HBase的数据模型是无模式的。 Hive的数据模型是基于模式的。 Impala的数据模型是基于模式的。
    HBase提供Java,RESTful和Thrift API。 Hive提供JDBC,ODBC,Thrift API。 Impala提供JDBC和ODBC API。
    支持C,C#,C ++,Groovy,Java PHP,Python和Scala等编程语言。 支持C ++,Java,PHP和Python等编程语言。 Impala支持所有支持JDBC / ODBC的语言。
    HBase提供对触发器的支持。 Hive不提供任何触发器支持。 Impala不提供对触发器的任何支持。

    所有这三个数据库 - 

    • 是NOSQL数据库。

    • 可用作开源。

    • 支持服务器端脚本。

    • 按照ACID属性,如Durability和Concurrency。

    • 使用分片进行分区。

     

    Impala的优缺点

    优点

    1.支持JDBC/ODBC远程访问,支持SQL查询,快速查询大数据。
    2.无需转换为MR,直接读取HDFS数据。
    3.支持Data Local,可以对已有数据进行查询,减少数据的加载,转换。
    4.支持列式存储,多种存储格式可以选择(Parquet, Text, Avro, RCFile, SequeenceFile)。
    5.可以与Hive配合使用,兼容HiveSQL, 可对hive数据直接做数据分析。
    6.基于内存进行计算,能够对PB级数据进行交互式实时查询、分析。

    缺点

    1.不支持用户定义函数UDF。
    2.不支持text域的全文搜索。
    3.不支持Transforms。
    4.不支持查询期的容错。(发生故障,则直接返回错误)
    5.对内存要求高。
    6.完全依赖于hive。
    7.实践过程中 分区超过1w 性能严重下降。
    8.Impala不提供任何对序列化和反序列化的支持。
    9.Impala只能读取文本文件,而不能读取自定义二进制文件。
    10.每当新的记录/文件被添加到HDFS中的数据目录时,该表需要被刷新。

  • 相关阅读:
    echarts二维坐标这样写出立体柱状图
    echarts中使图表循环显示tooltip-封装tooltip的方法轮询显示图表数据
    webpack--运行npm run dev自动打开浏览器以及热加载
    exports、module.exports和export、export default到底是咋回事,区别在哪里
    H5页面判断客户端是iOS或是Android并跳转对应链接唤起APP
    关于页面锚点跳转以及万能锚点跳转插件
    echarts Map 省份文字居中,即对应地图中心位置
    Moment.js 常见用法,常见API
    Tomcat 不加载图片验证码
    Cglib 动态代理
  • 原文地址:https://www.cnblogs.com/chong-zuo3322/p/14541459.html
Copyright © 2020-2023  润新知