`
superlxw1234
  • 浏览: 550674 次
  • 性别: Icon_minigender_1
  • 来自: 西安
博客专栏
Bd1c0a0c-379a-31a8-a3b1-e6401e2f1523
Hive入门
浏览量:44346
社区版块
存档分类
最新评论

Hive over HBase和Hive over HDFS性能比较分析

阅读更多

 

环境配置:

hadoop-2.0.0-cdh4.3.0 (4 nodes, 24G mem/node)

hbase-0.94.6-cdh4.3.0 (4 nodes,maxHeapMB=9973/node)

hive-0.10.0-cdh4.3.0

 

一、查询性能比较:

    query1:
        select count(1) from on_hdfs;
        select count(1) from on_hbase;
    query2(根据key过滤)
        select * from on_hdfs
            where key = '13400000064_1388056783_460095106148962';
        select * from on_hbase
            where key = '13400000064_1388056783_460095106148962';
    query3(根据value过滤)
        select * from on_hdfs where value = 'XXX';
        select * from on_hbase where value = 'XXX';

 

    on_hdfs (20万记录,150M,TextFile on HDFS)
    on_hbase(20万记录,160M,HFile on HDFS)

 

    

    on_hdfs (2500万记录,2.7G,TextFile on HDFS)
    on_hbase(2500万记录,3G,HFile on HDFS)

 

   

 

     从上图可以看出,
            对于全表扫描,hive_on_hbase查询时候如果不设置catching,性能远远不及hive_on_hdfs;
            根据rowkey过滤,hive_on_hbase性能上略好于hive_on_hdfs,特别是数据量大的时候;
            设置了caching之后,尽管比不设caching好很多,但还是略逊于hive_on_hdfs;

 

二、Hive over HBase原理

 

    Hive与HBase利用两者本身对外的API来实现整合,主要是靠HBaseStorageHandler进行通信,利用HBaseStorageHandler,Hive可以获取到Hive表对应的HBase表名,列簇以及列,InputFormat和OutputFormat类,创建和删除HBase表等。
    Hive访问HBase中表数据,实质上是通过MapReduce读取HBase表数据,其实现是在MR中,使用HiveHBaseTableInputFormat完成对HBase表的切分,获取RecordReader对象来读取数据。
    对HBase表的切分原则是一个Region切分成一个Split,即表中有多少个Regions,MR中就有多少个Map;
    读取HBase表数据都是通过构建Scanner,对表进行全表扫描,如果有过滤条件,则转化为Filter。当过滤条件为rowkey时,则转化为对rowkey的过滤;
    Scanner通过RPC调用RegionServer的next()来获取数据;

 

三、性能瓶颈分析

1. Map Task

    Hive读取HBase表,通过MR,最终使用HiveHBaseTableInputFormat来读取数据,在getSplit()方法中对HBase表进行切分,切分原则是根据该表对应的HRegion,将每一个Region作为一个InputSplit,即,该表有多少个Region,就有多少个Map Task;
    每个Region的大小由参数hbase.hregion.max.filesize控制,默认10G,这样会使得每个map task处理的数据文件太大,map task性能自然很差;
    为HBase表预分配Region,使得每个Region的大小在合理的范围;
    下图是给该表预分配了15个Region,并且控制key均匀分布在每个Region上之后,查询的耗时对比,其本质上是Map数增加。

   

2. Scan RPC 调用:

  •     在Scan中的每一次next()方法都会为每一行数据生成一个单独的RPC请求, query1和query3中,全表有2500万行记录,因此要2500万次RPC请求;

   

  •     扫描器缓存(Scanner Caching):HBase为扫描器提供了缓存的功能,可以通过参数hbase.client.scanner.caching来设置;默认是1;缓存的原理是通过设置一个缓存的行数,当客户端通过RPC请求RegionServer获取数据时,RegionServer先将数据缓存到内存,当缓存的数据行数达到参数设置的数量时,再一起返回给客户端。这样,通过设置扫描器缓存,就可以大幅度减少客户端RPC调用RegionServer的次数;但并不是缓存设置的越大越好,如果设置的太大,每一次RPC调用将会占用更长的时间,因为要获取更多的数据并传输到客户端,如果返回给客户端的数据超出了其堆的大小,程序就会终止并跑出OOM异常;

    所以,需要为少量的RPC请求次数和客户端以及服务端的内存消耗找到平衡点。

    rpc.metrics.next_num_ops
    未设置caching,每个RegionServer上通过next()方法调用RPC的次数峰值达到1000万:


    设置了caching=2000,每个RegionServer上通过next()方法调用RPC的次数峰值只有4000:



    设置了caching之后,几个RegionServer上的内存消耗明显增加:



 

  •     扫描器批量(Scanner Batch):缓存是面向行一级的操作,而批量则是面向列一级的操作。批量可以控制每一次next()操作要取回多少列。比如,在扫描器中设置setBatch(5),则一次next()返回的Result实例会包括5列。
  •     RPC请求次数的计算公式如下:
    RPC请求次数 =
    (表行数 * 每行的列数)/ Min(每行的列数,批量大小)  / 扫描器缓存

因此,在使用Hive over HBase,对HBase中的表做统计分析时候,需要特别注意以下几个方面:

1. 对HBase表进行预分配Region,根据表的数据量估算出一个合理的Region数;

2. rowkey设计上需要注意,尽量使rowkey均匀分布在预分配的N个Region上;

3. 通过set hbase.client.scanner.caching设置合理的扫描器缓存;

4. 关闭mapreduce的推测执行:

   set mapred.map.tasks.speculative.execution = false;
   set mapred.reduce.tasks.speculative.execution = false;

 

更多关于大数据Hadoop、Spark、Hive的精彩文章,请参阅 我的博客

 

 

 

  • 大小: 22.9 KB
  • 大小: 22.5 KB
  • 大小: 18.7 KB
  • 大小: 25.6 KB
  • 大小: 25.8 KB
  • 大小: 32.9 KB
2
4
分享到:
评论
1 楼 啦登2010 2014-01-23  
  

相关推荐

    scala-hive-HBASE-Api.7z

    HBase提供了强一致性的读写操作,适用于实时分析和大数据实时应用。 在Java开发中,为了将这些组件整合在一起,你需要相关的jar包,例如包含Hive和HBase的API。这些API允许你在Scala程序中直接操作Hive和HBase,...

    hive与hbase整合经验谈

    Hive作为一个基于Hadoop的数据仓库工具,适合于数据批处理和分析,而HBase则是一款分布式、高性能的NoSQL数据库,适用于实时数据查询。本文将探讨如何将Hive与HBase进行整合,充分利用两者的优势,提升大数据处理的...

    hive、Hbase、mysql的区别.docx

    总结来说,Hive适合大数据分析和报表生成,Hbase适合实时数据查询和海量数据存储,而MySQL适用于需要高并发、实时事务处理的场景。选择哪种数据库取决于具体的应用需求,如数据量、查询性能、事务处理和数据一致性...

    HBase与hive整合 和 hive与hdfs结合的效率对比1

    HBase是一款基于Hadoop的分布式数据库,适用于实时查询和大规模数据存储,而Hive则是一个数据仓库工具,侧重于离线批处理和分析。本文将深入探讨HBase与Hive的整合方式,以及二者在查询性能上的对比。 一、HBase与...

    mapreduce方式入库hbase hive hdfs

    mapreduce方式入库hbase hive hdfs,速度很快,里面详细讲述了代码的编写过程,值得下载

    hadoop,hive,hbase学习资料

    【标题】:“hadoop,hive,hbase学习资料”是一份综合性的学习资源,涵盖了大数据处理领域中的三个核心组件——Hadoop、Hive和Hbase。这些工具在大数据处理和分析中发挥着至关重要的作用。 【描述】:描述指出这份...

    hadoop,hbase,hive版本整合兼容性最全,最详细说明【适用于任何版本】 -

    总的来说,Hadoop、HBase和Hive的版本整合是一项复杂的任务,需要综合考虑功能需求、性能优化和稳定性。通过合理规划和测试,可以确保这些组件在不同版本间的无缝配合,从而发挥大数据处理的最佳效能。在实际操作中...

    HIVE和HBASE区别

    "HIVE和HBASE区别" HIVE和HBASE是两种基于Hadoop的不同技术,分别是数据仓库和Key/Value系统。它们之间有很多区别,包括设计理念、应用场景、查询语言等方面。 HIVE HIVE是一个构建在Hadoop基础设施之上的数据...

    hive和HBASE.zip

    - 监控与调优,定期检查Hive和HBase的运行状态,及时调整参数,优化性能。 总结,Hive和HBase的组合利用了它们各自的优势,Hive的SQL友好性和HBase的实时性,为大数据处理提供了一种有效的方法。在实际应用中,...

    Hive的HBase存储接口.doc

    在Hadoop生态系统中,Hive是一个基于Hadoop的数据仓库工具,它允许用户使用SQL-like语言进行数据查询和分析。...在实际应用中,正确配置和使用Hive-HBase-Handler可以实现大数据处理的灵活性和高性能。

    大数据-数据迁移-hive、hbase、kudu迁移

    3. **迁移测试**:在测试环境中验证数据迁移的正确性和性能,找出并修复潜在问题。 4. **数据运行&验收**:在新环境中运行数据,进行业务逻辑验证和数据一致性检查。 5. **业务割接**:通过停机窗口进行数据全量同步...

    Hadoop+Spark+Hive+HBase+Oozie+Kafka+Flume+Flink+ES+Redash等详细安装部署

    这些组件协同工作,提供了数据存储、处理、调度、流处理、实时分析和可视化的一体化解决方案。 首先,我们来看Hadoop,这是一个分布式文件系统,核心由HDFS(Hadoop Distributed File System)和MapReduce组成。...

    HDFS+MapReduce+Hive+HBase十分钟快速入门.zip_hbase_hdfs_hive_mapReduce

    在大数据处理领域,Hadoop生态系统中的HDFS(Hadoop Distributed File System)、MapReduce、Hive和HBase是四个至关重要的组件。本资料“HDFS+MapReduce+Hive+HBase十分钟快速入门”旨在帮助初学者迅速理解这些技术...

    浅谈Hive vs. HBase

    - **数据抽象层**:Hive 不直接存储数据,而是依赖 HDFS 和 MapReduce 进行数据存储和计算。 - **HQL**:Hive 提供了一种称为 HiveQL 的查询语言,它支持 SQL 查询风格,使得熟悉 SQL 的用户能够轻松进行数据查询、...

    Hadoop,HBase,Hive,HDFS视频,共44集(全套)

    Hadoop,HBase,Hive,HDFS视频,共44集(完整全套)!!

    Sqoop数据采集工具简介、安装、使用学习笔记(配合Hive和Hbase)

    - **Hive/HBase -> RDBMS**:两者均不支持直接转换,但可以通过以下步骤实现:先将数据从 Hive 或 HBase 导出到 HDFS,再从 HDFS 导出到 RDBMS。 #### 三、Sqoop1 的安装 - **版本选择**:选择 Sqoop 1.4.6 版本。...

    java解决hive快速导数据到Hbase代码

    在大数据处理领域,Hive和HBase是两个重要的组件,分别用于数据仓库和实时数据分析。本文将详细讨论如何使用Java编程语言实现从Hive到HBase的快速数据导入方案。 首先,Hive是一个基于Hadoop的数据仓库工具,它可以...

    Hadoop分布式搭建配置/Hive/HBase

    通过阅读这本书,你可以深入理解Hadoop的工作原理,包括HDFS的数据块管理、MapReduce的作业调度等,从而更好地进行二次开发和性能调优。 接下来,我们转向Hadoop生态中的其他重要组件。Hive是基于Hadoop的数据仓库...

Global site tag (gtag.js) - Google Analytics