新来的一个工程师不懂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()
分享到:
相关推荐
新来的一个工程师不懂HBase,java不熟,python还行,我建议他那可以考虑用HBase的thrift调用,完成目前的工作。 首先,安装thrift 下载thrift,这里,我用的是thrift-0.7.0-dev.tar.gz 这个版本 tar xzf thrift-...
4. **编写Python客户端**:导入`gen-py`目录中的生成代码,实例化HBase服务的客户端,连接到运行Thrift服务的HBase节点。然后,你可以调用定义在IDL文件中的方法进行数据操作。 5. **配置HBase和Thrift**:在HBase...
它不支持复杂的查询,但对于快速检查和监控HBase实例非常有用。 7. **HBase MapReduce**:MapReduce是Hadoop处理大数据的主要工具,HBase与MapReduce结合可以进行批量数据处理和分析。通过编写MapReduce作业,可以...
from hbase1 import Hbase # 调用Hbase Thrift接口 from hbase1.ttypes import * from kafka import KafkaConsumer, KafkaProducer from kafka.errors import KafkaError ``` 2. **创建HbaseOpreator类**: ...
例如,通过HTable实例,我们可以创建Put对象,设置行键、列族、列和值,然后调用put方法将数据写入HBase。 四、多语言客户端 除了Java,HBase还提供了其他语言的客户端,如Python的happybase库,Ruby的hbase-ruby ...
3. **编写Java代码**:使用生成的Java客户端代码,创建HBase连接,实例化Thrift客户端,然后调用其提供的方法来访问HBase表。通常包括以下步骤: - 连接Thrift服务器:通过`TSocket`或`TFramedTransport`建立与...
Spark Python API,通常被称为PySpark,是Apache Spark与Python编程语言的接口,使得开发者能够利用Python的简洁性和Spark的强大计算能力处理大规模数据。PySpark在大数据处理领域具有广泛的应用,尤其适合于数据...
1. **Python基础**:了解Python的基本语法,包括变量、数据类型(如列表、元组、字典和集合)、控制流(如if-else、for、while循环)以及函数定义和调用,是进一步学习Python大数据处理的前提。 2. **Numpy**:...
数据存储时,可以选择文件(如JSON、CSV、TXT)或数据库(如MySQL、MongoDB、HBase),Python的csv、json、pandas、pymysql和pymongo库提供了相应的支持。 作为一个实例,代码示例展示了如何爬取豆瓣网的书籍标签并...
1. 设置JanusGraph实例,根据你的环境配置数据库后端(例如,Cassandra或HBase)和 Gremlin Server。 2. 创建一个配置文件(例如,`janusgraph.properties`),其中包含连接信息,如主机名、端口、认证等。 3. 启动...
例如,当C++代码需要调用C库中的函数时,就需要用extern "C"来声明。 2. 设计模式 设计模式是软件开发中经过验证的解决方案模板,可以解决常见的设计问题。题目要求给出两种设计模式及其使用场景。例如: - 工厂...
- **堆内存**:所有线程共享的内存区域,用于存放对象实例以及数组。 - **方法区**:用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。 - **栈**:线程私有的内存区域,用于存放局部...
RPC(远程过程调用)允许一台计算机上的程序调用另一台计算机上的程序,并且而不需要了解底层网络细节。 在软件设计思路方面,后端架构师需要了解和应用各种设计模式,比如工厂模式、单例模式、策略模式、观察者...
这个项目不仅可以作为毕业设计或课程设计的实例,对于学习Spark和推荐系统的人来说,也是一个很好的实践平台,有助于提升对大数据处理和推荐算法的实际应用能力。通过这个项目,开发者可以深入理解如何在实践中运用...