文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python连接HBase

2023-01-31 06:06

关注

hadoop 2.7.0
hbase 1.2.1
Thrift 0.9.0

./hbase-daemon.sh start thrift
cd hbase-1.2.1/hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift
thrift --gen py Hbase.thrift

#生成gen-py文件
.
├── gen-py
│   ├── hbase
│   │   ├── constants.py
│   │   ├── Hbase.py
│   │   ├── Hbase-remote
│   │   ├── __init__.py
│   │   └── ttypes.py
│   └── __init__.py
└── Hbase.thrift
#把gen-py/hbase复制到项目下
.
├── hbase
│   ├── constants.py
│   ├── Hbase.py
│   ├── Hbase.pyc
│   ├── Hbase-remote
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── ttypes.py
│   └── ttypes.pyc
└── hbase_client.py

hbase_client.py

# # -*- coding: utf-8 -*-

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

from hbase import Hbase
from hbase.ttypes import ColumnDescriptor, Mutation


class HbaseClient(object):
    def __init__(self, host='localhost', port=9090):
        transport = TTransport.TBufferedTransport(TSocket.TSocket(host, port))
        protocol = TBinaryProtocol.TBinaryProtocol(transport)
        self.client = Hbase.Client(protocol)
        transport.open()

    def get_tables(self):
        """
        获取所有表
        """
        return self.client.getTableNames()

    def create_table(self, table, *columns):
        """
        创建表
        """
        self.client.createTable(table, map(lambda column: ColumnDescriptor(column), columns))

    def put(self, table, row, columns, attributes=None):
        """
        添加记录
        @:param columns {"k:1":"11"}
        """
        self.client.mutateRow(table, row, map(lambda (k,v): Mutation(column=k, value=v), columns.items()), attributes)

    def scan(self, table, start_row="", columns=None, attributes=None):
        """
        获取记录
        """

        scanner = self.client.scannerOpen(table, start_row, columns, attributes)
        while True:
            r = self.client.scannerGet(scanner)
            if not r:
                break
            yield dict(map(lambda (k, v): (k, v.value),r[0].columns.items()))

if __name__ == "__main__":
    client = HbaseClient("192.168.19.74", 9090)
    client.create_table("student", "name", "coruse")
    print(client.get_tables())
    client.put("student", "1", {"name:":"zhangsan", "coruse:art": "88", "coruse:math": "12"})
    client.put("student", "2", {"name:":"lisi", "coruse:art": "90", "coruse:math": "100"})
    client.put("student", "3", {"name:":"lisi2"})
    for v in client.scan("student", columns=["name"]):
        print(v)
    for v in client.scan("student"):
        print(v)
阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯