`
杨俊华
  • 浏览: 97408 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

python 调用HBase 实例

阅读更多
新来的一个工程师不懂HBase,java不熟,python还行,我建议他那可以考虑用HBase的thrift调用,完成目前的工作。
首先,安装thrift
下载thrift,这里,我用的是thrift-0.7.0-dev.tar.gz 这个版本
tar xzf thrift-0.7.0-dev.tar.gz
cd thrift-0.7.0-dev
sudo ./configure  --with-cpp=no --with-ruby=no
sudo make
sudo make install



然后,到HBase的源码包里,找到
src/main/resources/org/apache/hadoop/hbase/thrift/
执行
 thrift --gen py Hbase.thrift
 mv gen-py/hbase/ /usr/lib/python2.4/site-packages/ (根据python版本可能有不同)


我这里写了些调用的脚本,供大家参考

from unittest import TestCase, main
from thrift import Thrift
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, BatchMutation
class HBaseTester:

    def __init__(self, netloc, port, table="staftesttable"):
        self.tableName = table

        self.transport = TTransport.TBufferedTransport(
            TSocket.TSocket(netloc, port))
        self.protocol = TBinaryProtocol.TBinaryProtocol(self.transport)
        self.client = Hbase.Client(self.protocol)
        self.transport.open()

        tables = self.client.getTableNames()
        if self.tableName not in tables:
            self.__createTable()

    def __del__(self):
        self.transport.close()

    def __createTable(self):
        name = ColumnDescriptor(name='name')
        foo = ColumnDescriptor(name='foo')

        self.client.createTable(self.tableName,
                                [name,foo])
    
    def put(self,key,name,foo):
        name = Mutation(column="name:v", value=name)
        foo = Mutation(column="foo:v",value=foo)
        
        self.client.mutateRow(self.tablename,key,[name,foo])
    
    def scanner(self,column):
        scanner = client.scannerOpen(self.tablename,"",[column])
				r = client.scannerGet(scanner)
				result= []
        while r:
          print r[0]
          result.append(r[0])
          r = client.scannerGet(scanner)
        print "Scanner finished"
        return result
     
    
        
        
        
          
class TestHBaseTester(TestCase):
    
    def setUp(self):
        self.writer = HBaseTester("localhost", 9090)

    def tearDown(self):
        name = self.writer.tableName
        client = self.writer.client
        client.disableTable(name)
        client.deleteTable(name)


    def testCreate(self):
        tableName = self.writer.tableName
        client = self.writer.client
        self.assertTrue(self.writer.tableName in client.getTableNames())
        columns =['name:','foo:']
        for i in client.getColumnDescriptors(tableName):
            self.assertTrue(i in columns)
            
    def testPut(self):
        self.writer.put("r1","n1","f1")
        self.writer.put("r2","n2","f2")
        self.writer.put("r3","n3","")
        self.writer.scanner("name:") 
       
if __name__ == "__main__":
    main()





0
0
分享到:
评论

相关推荐

    python 调用HBase的简单实例

    新来的一个工程师不懂HBase,java不熟,python还行,我建议他那可以考虑用HBase的thrift调用,完成目前的工作。 首先,安装thrift 下载thrift,这里,我用的是thrift-0.7.0-dev.tar.gz 这个版本 tar xzf thrift-...

    hbase thrift python

    4. **编写Python客户端**:导入`gen-py`目录中的生成代码,实例化HBase服务的客户端,连接到运行Thrift服务的HBase节点。然后,你可以调用定义在IDL文件中的方法进行数据操作。 5. **配置HBase和Thrift**:在HBase...

    hbase用于查询客户端工具

    它不支持复杂的查询,但对于快速检查和监控HBase实例非常有用。 7. **HBase MapReduce**:MapReduce是Hadoop处理大数据的主要工具,HBase与MapReduce结合可以进行批量数据处理和分析。通过编写MapReduce作业,可以...

    python hbase读取数据发送kafka的方法

    from hbase1 import Hbase # 调用Hbase Thrift接口 from hbase1.ttypes import * from kafka import KafkaConsumer, KafkaProducer from kafka.errors import KafkaError ``` 2. **创建HbaseOpreator类**: ...

    hbase-client

    例如,通过HTable实例,我们可以创建Put对象,设置行键、列族、列和值,然后调用put方法将数据写入HBase。 四、多语言客户端 除了Java,HBase还提供了其他语言的客户端,如Python的happybase库,Ruby的hbase-ruby ...

    java 通过thrift-0.9.1读取hbase表数据

    3. **编写Java代码**:使用生成的Java客户端代码,创建HBase连接,实例化Thrift客户端,然后调用其提供的方法来访问HBase表。通常包括以下步骤: - 连接Thrift服务器:通过`TSocket`或`TFramedTransport`建立与...

    Spark python API 函数调用学习

    Spark Python API,通常被称为PySpark,是Apache Spark与Python编程语言的接口,使得开发者能够利用Python的简洁性和Spark的强大计算能力处理大规模数据。PySpark在大数据处理领域具有广泛的应用,尤其适合于数据...

    Python大数据处理与分析PPT.zip

    1. **Python基础**:了解Python的基本语法,包括变量、数据类型(如列表、元组、字典和集合)、控制流(如if-else、for、while循环)以及函数定义和调用,是进一步学习Python大数据处理的前提。 2. **Numpy**:...

    Python网络爬虫分享会1

    数据存储时,可以选择文件(如JSON、CSV、TXT)或数据库(如MySQL、MongoDB、HBase),Python的csv、json、pandas、pymysql和pymongo库提供了相应的支持。 作为一个实例,代码示例展示了如何爬取豆瓣网的书籍标签并...

    django访问janusgraph,计算路径积累权重

    1. 设置JanusGraph实例,根据你的环境配置数据库后端(例如,Cassandra或HBase)和 Gremlin Server。 2. 创建一个配置文件(例如,`janusgraph.properties`),其中包含连接信息,如主机名、端口、认证等。 3. 启动...

    百度研发笔试题

    例如,当C++代码需要调用C库中的函数时,就需要用extern "C"来声明。 2. 设计模式 设计模式是软件开发中经过验证的解决方案模板,可以解决常见的设计问题。题目要求给出两种设计模式及其使用场景。例如: - 工厂...

    JVM基础及微服务基础知识大数据技术全栈及面试指南.pdf

    - **堆内存**:所有线程共享的内存区域,用于存放对象实例以及数组。 - **方法区**:用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。 - **栈**:线程私有的内存区域,用于存放局部...

    后端架构工程师技术图谱

    RPC(远程过程调用)允许一台计算机上的程序调用另一台计算机上的程序,并且而不需要了解底层网络细节。 在软件设计思路方面,后端架构师需要了解和应用各种设计模式,比如工厂模式、单例模式、策略模式、观察者...

    基于spark的大数据过滤引擎推荐系统.zip

    这个项目不仅可以作为毕业设计或课程设计的实例,对于学习Spark和推荐系统的人来说,也是一个很好的实践平台,有助于提升对大数据处理和推荐算法的实际应用能力。通过这个项目,开发者可以深入理解如何在实践中运用...

Global site tag (gtag.js) - Google Analytics