从hbase读取数据优化策略和实验对比结果

起因:工作需要,我需要每5分钟从hbase中,导出一部分数据,然后导入到ES中,但是在开始阶段编写的python脚本,我发现从hbase读取数据的速度较慢,耗费大量的时间,影响整个导数过程,恐怕无法在5分钟内完成导数工作

在咨询了老人后,采取部门优化策略,并记录了实验结果。

hbase结果大致如下

粉丝表

rowKey  是粉丝ID

列名 含义
id 粉丝ID
ut 更新时间
...  ...
   

此hadoop集群有13台机器

任务的目标把hbase中前5分钟录入的数据录入到ES中。

1. 为了开速开发,我刚开始python通过thrift接口读取数据,显然耗时比较多

在这此实验中,提取数据以来的是ut 这列(更新时间字段)

2. 采用java client + SimpleColumnValueFilter 提取数据

使用thrift 接口非常的慢,照理说thrift server 相当于hbase client 只不过多进行一次数据转发,不应该这么慢,但现实就是这么残忍。

3. 由于hbase在插入数据时同时会记录timestamp,所以可以直接使用timestamp来提取数据(至少缩小了scan的查找范围)

4.,5 减小导数的时间范围,可以观察到,时间的下降不是线性的。我推断scan 操作有部分时间开销是基础时间开销,如果导入多少数据,时间也不会下降很多

6. 采用MapReduce后,速度有了成倍的提高。询问得知,正常情况下通过hbase client 从hbase中提取数据是线性,向一个region server发出请求后,再向另一个region sever发出请求,显然map reduce 并行比串行的速度提高了很多。

到阶段6时间已经满足业务需要了。据说还可以通过拆分region 来提高速度,有空试试。

时间: 2024-11-04 03:16:38

从hbase读取数据优化策略和实验对比结果的相关文章

hbase读取数据原理

假如client想要从hbase的"user"表中去取"333"的数据, 第一步.client从zookeeper中得到.ROOT的位置(在第二个HRegionserver中),然后去第二个HRegionserver中找.ROOT文件,然后从.ROOT中找到.META的位置(在第一个和第三个HRegionserver中),在第一个HRegionserver中存放[1,3)(行关键字按字典排序)的数据, 在第三个HRegionserver中存放[3,5)(行关键字按字

在Windows下MyEclipse运行JAVA程序连接HBASE读取数据出错

运行环境:Hadoop-2.5.0+Hbase-0.98.6 问题描述: 15/06/11 15:35:50 ERROR Shell: Failed to locate the winutils binary in the hadoop binary path java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.     at org.apache.hadoop

HBase最佳实践-读性能优化策略

任何系统都会有各种各样的问题,有些是系统本身设计问题,有些却是使用姿势问题.HBase也一样,在真实生产线上大家或多或少都会遇到很多问题,有些是HBase还需要完善的,有些是我们确实对它了解太少.总结起来,大家遇到的主要问题无非是Full GC异常导致宕机问题.RIT问题.写吞吐量太低以及读延迟较大. Full GC问题之前在一些文章里面已经讲过它的来龙去脉,主要的解决方案目前主要有两方面需要注意,一方面需要查看GC日志确认是哪种Full GC,根据Full GC类型对JVM参数进行调优,另一方

HBase 数据库检索性能优化策略

HBase 数据表介绍 HBase 数据库是一个基于分布式的.面向列的.主要用于非结构化数据存储用途的开源数据库.其设计思路来源于 Google 的非开源数据库"BigTable". HDFS 为 HBase 提供底层存储支持,MapReduce 为其提供计算能力.ZooKeeper 为其提供协调服务和 failover(失效转移的备份操作)机制.Pig 和 Hive 为 HBase 提供了高层语言支持,使其能够进行数据统计(可实现多表 join 等).Sqoop 则为其提供 RDBM

【转载】HBase 数据库检索性能优化策略

转自:http://www.ibm.com/developerworks/cn/java/j-lo-HBase/index.html 高性能 HBase 数据库 本文首先介绍了 HBase 数据库基本原理及专用术语,然后介绍了 HBase 数据库发布的操作 API 及部分示例,重点介绍了 Scan 方法的操作方式,接着介绍了检索 HBase 数据库时的优化方案,最后通过一个示例总结了实际项目中遇到的检索速度慢的解决方案. HBase 数据表介绍 HBase 数据库是一个基于分布式的.面向列的.主

hbase数据存取策略

复制策略是hadoop文件系统最核心的部分,对读写性能影响很大,hadoop和其它分布式文件系统的最大区别就是可以调整冗余数据的位置,这个特性需要很多时间去优化和调整. 一.数据存放 目前hadoop采用以机柜为基础的数据存放策略,这样做的目的是提高数据可靠性和充分利用网络带宽.当前具体实现了的策略只是这个方向的尝试,hadoop短期的研究目标之一就是在实际产品环境中观察系统读写的行为,测试性能和研究更深入的规则. 一个大的hadoop集群经常横跨多个机柜,而不同机柜之间的数据通讯同经过交换机或

实验三:将读取数据功能从Repository中分离

先理解下面这段话之后再开始做实验 经过实验二的改造之后,我们代码有一点结构的概念了: Listing.aspx:向Repository要Products,然后将得到的Products在页面中显示出来. Repository:负责从数据库中读取数据,并将数据转换成对象集合. 代码结构的改造之路还没完,请看下面的情况. 如果数据库中多了一张表:订单表(Orders).订单表中的所有订单当然也需要读出来显示在页面上.参考读取产品的做法,我们需要在Repository中增加一个像Products类似的属

Hbase写数据,存数据,读数据的详细过程

转自:http://www.aboutyun.com/thread-10886-1-1.html 附HBase 0.94之后Split策略: http://www.aboutyun.com/thread-11211-1-1.html 1.Client写入需要哪些过程?2.Hbase是如何读取数据的? Client写入 -> 存入MemStore,一直到MemStore满 -> Flush成一个StoreFile,直至增长到一定阈值 -> 出发Compact合并操作 -> 多个Sto

HBase读写性能优化

一个系统上线之后,开发和调优将会一直伴随在系统的整个生命周期中,HBase也不例外.下面我们要学习如何进行HBase读写性能调优,以获取最大的读写效率. HBase写入优化客户端优化批量写采用批量写,可以减少客户端到RegionServer之间的RPC的次数,提高写入性能.批量写请求要么全部成功返回,要么抛出异常. HTable.put(List<Put>); 异步批量提交如果业务可以接受异常情况下丢失少量数据,可以使用异步批量提交方式提交请求. 用户提交写请求之后,数据会先写入客户端缓存,并