HBase rowkey设计实例

需求:绘制渠道用户的每日趋势(每分钟一组数据一天1440组,2000+个渠道,区分新/老用户,2*1440*2000+=576万+/每天),需要保存90天。

查询条件:渠道号、新or老用户、日期

rowkey:渠道_日期_新or老用户_小时分钟(hhmm)

连接HBase

from thrift.protocol import TBinaryProtocol
from thrift.transport import TSocket
from thrift.transport import TTransport
from hbase import Hbase

def hbase_connect():
    transport = TSocket.TSocket(‘*‘, 9090)
    # transport = TSocket.TSocket(‘10.50.14.105‘, 9090)
    hbase_transport = TTransport.TBufferedTransport(transport)
    protocol = TBinaryProtocol.TBinaryProtocol(transport)
    hbase_client = Hbase.Client(protocol)
    hbase_transport.open()
    return hbase_transport, hbase_client

创建表:

def create_hbase_table():
    transport, client = hbase_connect()
    tables = client.getTableNames()
    print tables
    client.createTable(‘client_rt_pv‘, [Hbase.ColumnDescriptor(name = ‘default‘)])
    tables = client.getTableNames()
    print tables

插入数据:

mutationsbatch = []

#### loop
rowkey = ‘_‘.join([tmp_pub, dayStr, ‘ac‘, tmp_ct])
mutations = [
    Hbase.Mutation(column="default:pv", value=str(tmp_pv)),
    Hbase.Mutation(column="default:uv", value=str(tmp_uv)),
    Hbase.Mutation(column="default:pvdivuv", value=str(‘%.2f‘ % (tmp_pv/float(tmp_uv) if tmp_uv != 0 else 0, ))),
    Hbase.Mutation(column="default:tm", value=str(tmp_ct)),
    Hbase.Mutation(column="default:pub", value=str("".join([tmp_pub, ‘ ‘]))),
    Hbase.Mutation(column="default:pubname", value=pub_id.get(tmp_pub, ‘unknown‘))]

mutationsbatch.append(Hbase.BatchMutation(row=rowkey, mutations=mutations))

### end loop
hbase_client.mutateRows("client_rt_pv", mutationsbatch, None)
hive_transport.close()
时间: 2024-10-14 05:20:28

HBase rowkey设计实例的相关文章

Hbase rowkey设计一

转自 http://blog.csdn.net/lifuxiangcaohui/article/details/40621067 hbase所谓的三维有序存储的三维是指:rowkey(行主键),column key(columnFamily+qualifier),timestamp(时间戳)三部分组成的三维有序存储. 1.rowkey,我们知道rowkey是行的主键,而且hbase只能用个rowkey,或者一个rowkey范围即scan来查找数据.所以 rowkey的设计是至关重要的,关系到你应

HBase学习(十八)Hbase rowkey设计一

hbase所谓的三维有序存储的三维是指:rowkey(行主键),column key(columnFamily+qualifier),timestamp(时间戳)三部分组成的三维有序存储. 1.rowkey,我们知道rowkey是行的主键,而且hbase只能用个rowkey,或者一个rowkey范围即scan来查找数据.所以 rowkey的设计是至关重要的,关系到你应用层的查询效率.我们知道,rowkey是以字典顺序排序的.而存储的字节码,字典排序,我们知道,如果是字 母,那就是字母的顺序,比如

Hbase Rowkey设计原则

Hbase是三维有序存储的,通过rowkey(行键),column key(column family和qualifier)和TimeStamp(时间戳)这三个维度可以对HBase中的数据进行快速定位. Hbase中Rowkey可以唯一标识一行记录,在Hbase查询的时候,有以下几种方式: 1.通过get方式,指定rowkey获取唯一一条记录 2.通过scan方式,设置StartRow和EndRow参数进行范围匹配 3.全表扫描,即直接扫描整张表中所有行记录 Rowkey长度原则 rowkey是

Hbase Rowkey设计

因为一直在做hbase的应用层面的开发,所以体会的比较深的一点是hbase的表结构设计会对系统的性能以及开销上造成很大的区别,本篇文章先按照hbase表中的rowkey.columnfamily.column.timestamp几个方面进行一些分析.最后结合分析如何设计一种适合应用的高效表结构. 1.表的属性 (1)最大版本数:通常是3,如果对于更新比较频繁的应用完全可以设置为1,能够快速的淘汰无用数据,对于节省存储空间和提高查询速度有效果.不过这类需求在海量数据领域比较小众. (2)压缩算法:

HBase的rowkey设计(含实例)

转自:http://www.aboutyun.com/thread-7119-1-1.html 对于任何系统的数据设计,我们都想提高性能,达到资源最大化利用,那么对于hbase我们产生如下问题: 1.hbase rowkey设计如何才能提高性能?2.hbase rowkey如何设计才能散列到不同的节点上? 访问hbase table中的行,只有三种方式: 1 通过单个row key访问2 通过row key的range3 全表扫描 文中可能涉及到的API: Hadoop/HDFS:http://

HBase Rowkey的散列与预分区设计

转自:http://www.cnblogs.com/bdifn/p/3801737.html 问题导读:1.如何防止热点?2.如何预分区?扩展:为什么会产生热点存储? HBase中,表会被划分为1...n个Region,被托管在RegionServer中.Region二个重要的属性:StartKey与EndKey表示这个Region维护的rowKey范围,当我们要读/写数据时,如果rowKey落在某个start-end key范围内,那么就会定位到目标region并且读/写到相关的数据.简单地说

hbase 利用rowkey设计进行多条件查询

摘要 本文主要内容是通过合理Hbase 行键(rowkey)设计实现快速的多条件查询,所采用的方法将所有要用于查询中的列经过一些处理后存储在rowkey中,查询时通过rowkey进行查询,提高rowkey的利用率,加快查询速度.行键(rowkey)并不是简单的把所有要查询的列的值直接拼接起来,而是将各个列的数据转成整型(int)数据来存储.之后实现两个自定义的比较器(comparator):一个是相等比较器,用于实现类似于SQL的多条件精确查找功能. select * from table wh

Hbase中rowkey设计原则

Hbase中rowkey设计原则 1.热点问题 在某一时间段,有大量的数据同时对一个region进行操作 2.原因 对rowkey的设计不合理 对rowkey的划分不合理 3.解决方式 rowkey是hbase的读写唯一标识 最大长度是64KB. 4.核心原则 设计必须按照业务需求进行设计 5.长度原则 经验:10~100字节可以 官方:16字节,因为操作系统时8字节进行存储 6.散列原则 划分region是按照rowkey的头部进行划分. 有几种方式: )组合字段 id+timestamp )

HBase的RowKey设计

HBase是三维有序存储的,通过rowkey(行键),column key(column family和qualifier)和TimeStamp(时间戳)这个三个维度可以对HBase中的数据进行快速定位. HBase中rowkey可以唯一标识一行记录,在HBase查询的时候,有两种方式: 通过get方式,指定rowkey获取唯一一条记录 通过scan方式,设置startRow和stopRow参数进行范围匹配 全表扫描,即直接扫描整张表中所有行记录 rowkey长度原则 rowkey是一个二进制码