zoukankan      html  css  js  c++  java
  • 关于通过Python读取hbase里面的数据通过row_prefi前缀的方式读取数据的方式

    业务介绍:

    最近在做将线上的日志数据 通过flink的形式消费过来 ,然后灌入hbase 表当中。然后最近要解析这个日志想通过Python的方式读取hbase的日志进行解析 然后入库的方式做。

    我们想一个小时做一次 但是那个rowkey 设计的真是卧槽。一点业务理念都没有 就是简单的字符串拼接起来的。只能通过fliter的形式过滤rowkey 然后把数据拿到。真是蛋疼。

    所以只能重新设计rowkey,然后将实时的数据接入到我们的系统。

    图中的rowkey是之前别人设计的,我想一个小时拿一次 这可咋整啊。真是无语了。

    所以就想着能不能改一下rowkey的形式。然后为了保证不出现数据热点和数据的唯一性。重新设计rowkey

     我重新设计通过每天的小时数,然后还有年月日时分秒的形式,再加上这条数据的hash值。然后作为rowkey

    具体的python代码如下:

    #! /root/anaconda3/bin/python3
    # coding:utf-8
    
    
    
    import happybase
    import datetime,time
    
    connection = happybase.Connection('自己集群的ip')
    connection = happybase.Connection('自己集群的ip', autoconnect=False)
    connection.open()
    print(connection.tables())
    table = connection.table('app')
    print(table)
    #因为这里是美国时间,所以要获取的时间减8个小时,同时因为时获取的是前一个小时的数据 ,所以这里需要减去9个小时
    today_str = (datetime.datetime.now() + datetime.timedelta(hours=-9)).strftime('%Y-%m-%d %H:%M:%S')
    #这里获取的是小时的标识符2019080506 这里就截取06作为要处理的小时数据
    today_time=today_str[11:13]
    today = today_str[0:4] + today_str[5:7] + today_str[8:10]
    print(today_time)
    print(today)
    today_time_pingjie=today_time+"|"+today
    
    #这里需要对rowkey的前缀进行编码转化
    today_time_byte = bytes(today_time_pingjie, encoding = "utf8")
    
    for key, data in table.scan(row_prefix=today_time_byte):
           print(key, data)

    注意:

    这里通过 row_prefix 的形式获取到rowkey中我们想要的行数据。这里一定要注意将其转化为字节。字符串会出现下面的报错

    Traceback (most recent call last):
    File "F:/softinstall/Python/pythonworkplace/readhbasedata/hbase.py", line 27, in <module>
    for key, data in table.scan(row_prefix='05'):
    File "F:softinstallPythonpythonworkplacevenvlibsite-packageshappybase able.py", line 341, in scan
    row_stop = bytes_increment(row_prefix)
    File "F:softinstallPythonpythonworkplacevenvlibsite-packageshappybaseutil.py", line 82, in bytes_increment
    assert isinstance(b, six.binary_type)
    AssertionError

    官网的代码如下:

    https://happybase.readthedocs.io/en/latest/

    这个代码当中有一个b 百度上漫天飞的都没加这个 死活查询不到数据。

  • 相关阅读:
    支付宝支付内容 尚未完成
    mvc 高并发解决方案之一---存储过程
    微信第三方平台开头篇--MVC代码(第三方获取ticket和公众号授权)
    卡券类字段
    Jquery 方法学习
    c# 对象反射赋值未知属性需类型转换
    C# enum 枚举 反射
    MVC c# 调用sql的存储过程
    Javascript装饰器原理
    关于阿里云的产品应用思考
  • 原文地址:https://www.cnblogs.com/gxgd/p/12628086.html
Copyright © 2011-2022 走看看