新來的一個工程師不懂HBase,java不熟,python還行,我建議他那可以考慮用HBase的thrift調用,完成目前的工作。
首先,安裝thrift
下載thrift,這里,我用的是thrift-0.7.0-dev.tar.gz 這個版本
1
2
3
4
5
|
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版本可能有不同)
我這里寫了些調用的腳本,供大家參考
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
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() |
以上這篇python 調用HBase的簡單實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。