python如何thrift框架操作hbase数据库及shell操作

以前都是用mongodb的,但是量大了,mongodb显得不那么靠谱,改成hbase撑起一个量级。

HBase是Apache Hadoop的数据库,能够对大型数据提供随机、实时的读写访问。HBase的目标是存储并处理大型的数据。HBase是一个开源的,分布式的,多版本的,面向列的存储模型。它存储的是松散型数据。

HBase提供了丰富的访问接口。

HBase Shell
Java clietn API
Jython、Groovy DSL、Scala
REST
Thrift(Ruby、Python、Perl、C++…)
MapReduce
Hive/Pig

hbase(main):001:0>

#创建表

hbase(main):002:0* create 'blog','info','content'

0 row(s) in 2.0290 seconds

#查看表

hbase(main):003:0> list

TABLE                                                                          

blog                                                                           

test_standalone                                                                

2 row(s) in 0.0270 seconds

#增添数据

hbase(main):004:0> put 'blog','1','info:editor','liudehua'

0 row(s) in 0.1340 seconds

hbase(main):005:0> put 'blog','1','info:address','bj'

0 row(s) in 0.0070 seconds

hbase(main):006:0> put 'blog','1','content:header','this is header'

0 row(s) in 0.0070 seconds

hbase(main):007:0>

hbase(main):008:0*

hbase(main):009:0* get 'blog','1'

COLUMN                CELL                                                     

 content:header       timestamp=1407464302384, value=this is header            

 info:address         timestamp=1407464281942, value=bj                        

 info:editor          timestamp=1407464270098, value=liudehua                  

3 row(s) in 0.0360 seconds

hbase(main):010:0> get 'blog','1','info'

COLUMN                                                 CELL                                                                                                                                                        
 info:address                                          timestamp=1407464281942, value=bj                                                                                                                           
 info:editor                                           timestamp=1407464270098, value=liudehua                                                                                                                     
2 row(s) in 0.0120 seconds

#这里是可以按照条件查询的。

hbase(main):012:0* scan 'blog'

ROW                                                    COLUMN+CELL                                                                         

 1                                                     column=content:header, timestamp=1407464302384, value=this is header                                                                                        
 1                                                     column=info:address, timestamp=1407464281942, value=bj                                                                                                      
 1                                                     column=info:editor, timestamp=1407464270098, value=liudehua                                                                                                 
1 row(s) in 0.0490 seconds

hbase(main):013:0>

hbase(main):014:0* put 'blog','1','content:header','this is header2'

0 row(s) in 0.0080 seconds

hbase(main):015:0>

hbase(main):016:0*

hbase(main):017:0* put 'blog','1','content:header','this is header3'

0 row(s) in 0.0050 seconds

hbase(main):018:0> scan 'blog'

ROW                                                    COLUMN+CELL                                                                                                                                                 
 1                                                     column=content:header, timestamp=1407464457128, value=this is header3                                                                                       
 1                                                     column=info:address, timestamp=1407464281942, value=bj                                                                                                      
 1                                                     column=info:editor, timestamp=1407464270098, value=liudehua                                                                                                 
1 row(s) in 0.0180 seconds

hbase(main):020:0> get 'blog','1','content:header'

COLUMN                                                 CELL                                                                                                                                                        
 content:header                                        timestamp=1407464457128, value=this is header3                                                                                                              
1 row(s) in 0.0090 seconds

hbase(main):021:0>

#可以看到历史版本记录

hbase(main):022:0* get 'blog','1',{COLUMN => 'content:header',VERSIONS => 2}

COLUMN                                                 CELL                                                                                

 content:header                                        timestamp=1407464457128, value=this is header3                                                                                                              
 content:header                                        timestamp=1407464454648, value=this is header2                                                                                                              
2 row(s) in 0.0100 seconds

#可以看到历史版本记录

hbase(main):023:0> get 'blog','1',{COLUMN => 'content:header',VERSIONS => 3}

COLUMN                                                 CELL                                                                                

 content:header                                        timestamp=1407464457128, value=this is header3                                                                                                              
 content:header                                        timestamp=1407464454648, value=this is header2                                                                                                              
 content:header                                        timestamp=1407464302384, value=this is header                                                                                                               
3 row(s) in 0.0490 seconds

hbase(main):024:0>

base用java来操作是最方便,也效率最高的方式。但java并非轻量级,不方便在任何环境下调试。而且不同的开发人员熟悉的语言不一样,开发效率也不一样。hbase 通过thrift,还可以用python,ruby,cpp,perl等语言来操作。

thrift是facebook开发开源的类似google的protobuf的远程调用组件。但protobuf只有数据的序列化,且只支持二进制协议,没有远程调用部分。protobuf原生支持cpp,python,java,另外还有第三方实现的objectc,ruby等语言。而thrift是实现了序列化,传输,协议定义,远程调用等功能,跨语言能力更多。某些方面二者可以互相替代,但一些方面则各有适用范围。

thrift的安装及thrift python的相关模块 ~

 代码如下 复制代码
http://www.apache.org/dist//thrift/0.9.1/thrift-0.9.1.tar.gz
tar zxvf thrift-0.8.0.tar.gz
cd thrift-0.8.0
./configure -with-cpp=no
make
sudo make install
sudo pip install thrift


这里是可以生成python的thrift和hbase模块 ~

thrift -gen py /home/ubuntu/hbase-0.98.1/hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift

 代码如下 复制代码
from thrift.transport import TSocket
 
from thrift.protocol import TBinaryProtocol
 
from hbase import Hbase
 
transport=TSocket.TSocket('localhost',9090)
 
protocol=TBinaryProtocol.TBinaryProtocol(transport)
 
client=Hbase.Client(protocol)
 
transport.open()
 
client.getTableNames()

hbase 0.98的版本 貌似没有thrift的相关组建,我这里的用的是0.94版本搞定的。

 

时间: 2025-01-01 05:20:37

python如何thrift框架操作hbase数据库及shell操作的相关文章

shell 命令行中操作HBase数据库实例详解_Linux

 shell 命令行中操作HBase数据库 Shell控制 进入到shell命令行界面,执行hbase命令,并附加shell关键字:  [grid@hdnode3 ~]$ hbase shell HBase Shell; enter ¨help¨ for list of supported commands. Type "exit" to leave the HBase Shell Version 0.90.5, r1212209, Fri Dec 9 05:40:36 UTC 201

Yii框架实现多数据库配置和操作的方法

本文实例讲述了Yii框架实现多数据库配置和操作的方法.分享给大家供大家参考,具体如下: Yii的默认配置为一个数据库,不过可以很容易的支持多个数据库的操作, 这为按业务分割数据库提供了基础设施.如下所示: //cms DB connection 'db' => (defined('DB_CONNECTION') ? array( 'connectionString' => DB_CONNECTION, 'username' => DB_USER, 'password' => DB_

混合框架中Oracle数据库的还原处理操作

在较早期的随笔<Oracle如何实现创建数据库.备份数据库及数据导出导入的一条龙操作>粗略介绍了Oracle数据库的备份还原操作,本文想从开发框架的基础上介绍Oracle数据库的脚本或者还原操作. 我们在Winform开发框架.混合式开发框架.Web开发框架等各种开发框架,底层都是支持多种数据库的,如MS SQLServer.Oracle.MySQL.SQLite.PostgreSQL等等,如下图所示. 其中SQLServer支持最为常用,而且也是最为方便备份还原的操作,而Oracle数据库这

Python的ORM框架中SQLAlchemy库的查询操作的教程_python

1. 返回列表和标量(Scalar) 前面我们注意到Query对象可以返回可迭代的值(iterator value),然后我们可以通过for in来查询.不过Query对象的all().one()以及first()方法将返回非迭代值(non-iterator value),比如说all()返回的是一个列表: >>> query = session.query(User).\ >>> filter(User.name.like('%ed')).order_by(User.

MyEclipes下执行Hive语句查询Hbase数据库数据

前几天有一个top100的案例分享,全程听了各个公司架构组的一些案例技术分享,发现大家都在大数据方面投入很大,相比当当,58,阿里巴巴,Facebook,Google这些公司.新浪的分享者比较保守,很多不算牵扯到细节都系都说不方便说,其实技术都是那些技术,只是业务不同产生很多不同的架构,感觉没必要. 闲话不多说,最近完成了在MyEclipes完成了hive操作Hbase数据库数据,直接上代码 定义枚举. public enum SqlType { ALLORDERNUMBER, DAYORDER

BETA2中操作SQL数据库

数据|数据库 在前面,我已经说了如何在BETA2的环境下,操作ACCESS数据库,这次我们来看看如何通过ADO.NET来操作SQL SERVER数据库! 首先我们要知道,在ADO.NET环境下,我们是通过System.Data.SqlClient这个名字空间来操作的,另外还有一个System.Data.SqlTypes名字空间描述了SQL SERVER的字段类型,但它并不直接参与数据库的操作,所以我们重点放在System.Data.SqlClient的使用上! 按照惯例,我还是先列出我的例程:这

iOS sqlite对数据库的各种操作(日常整理全)_IOS

在IOS中使用Sqlite来处理数据.如果你已经了解了SQL,那你可以很容易的掌握SQLite数据库的操作.iOS对于数据库的操作:增加.删除.查找.修改具体介绍如下所示: 首先需要创建一个数据库:本程序的数据库是在火狐浏览器里的插件里写的微量型数据库 火狐找查找SQLite Manager的步骤: 第一步:在工具栏找到附加组件,点击进入 第二步:搜索 SQP,找到并下载,安装完成之后需要重启浏览器 第三步:在工具只乐观找到SQLite Manager,点击打开 SQLite Manager界面

Mac环境下php操作mysql数据库的方法分享_php技巧

Mac本地环境搭建 在Mac系统,我们可以使用MAMP Pro 软件来搭建本地服务器.安装好这款软件,网站的目录在 /Applications/MAMP/htdocs 文件夹里,只需将文件放入该文件夹中,就可以通过http://localhost:8888来访问了,或者通过点击如下红色下划线按钮来快速访问站点. mac系统下安装php,两行即可. brew tap josegonzalez/homebrew-php brew install php54 安装完后配置一下,你就可以使用phpsto

PHP操作mysql数据库分表的方法_php实例

一般来说,当我们的数据库的数据超过了100w记录的时候就应该考虑分表或者分区了,这次我来详细说说分表的一些方法.首先,我们需要想好到底分多少个 表,前提当然是满足应用.这里我使用了一个比较简单的分表方法,就是根据自增id的尾数来分,也就是说分0-9一共10个表,其取值也很好做,就是对10 进行取模.另外,还可以根据某一字段的md5值取其中几位进行分表,这样的话,可以分的表就很多了. 好了,先来创建表吧,代码如下: CREATE TABLE `ttlsa_com`.`article_0` ( `i