hbase shell和php通过thrift操作hbase数据

一、通过hbase  shell操作:
http://www.cnblogs.com/linjiqin/archive/2013/03/08/2949339.html

hbase shell 进入命令行交互模式,通过help查看各种help xx的用法。

命令行下不能直接用delete退格,解决:

方法1:
按住Ctrl+backspace 即可删除
方法2:
[回话选项]->[终端]->[仿真]->[映射键]下
其他映射:
打勾Backspace发送delete和delete发送Backspace

表名 列族名
create ‘test’, ‘cf’
list ‘test’

表名 行键 列键(必须以’列族名:’起) 值
put ‘test’, ‘row1′, ‘cf:a’, ‘value1′
put ‘test’, ‘row2′, ‘cf:b’, ‘value2′
scan ‘test’
get ‘test’, ‘row2′
disable ‘test’
enable ‘test’
drop ‘test’
quit

增加列族: 默认值保存一个版本
alter ‘tabxx’,{NAME =>’col4′}

保存3个版本
alter ‘tabxx’,{NAME =>’col5′,VERSIONS => 3}

查看表描述
t.describe

给xiaoming这一行的数据的列族course添加一列<math,97>
put’scores’,'xiaoming’,'course:math’,’99′

scan ‘scores’,{COLUMNS => ‘course’}
scan ‘scores’,{COLUMNS => ‘course:art’}

//alter 的时候参数是 NAME,不是COLUMN

alter ‘scores’,{NAME => ‘course:math’, VERSIONS => 3} //错误
alter ‘scores’,{NAME => ‘course’, VERSIONS => 3}

get ‘scores’,'xiaoming’,{COLUMN => ‘course:math’, VERSIONS => 10}
get ‘scores’,'xiaoming’,{COLUMN => ‘age’, VERSIONS => 10}

正如介绍的hbase数据结构为 :row-columnFamily-修饰符-version => data,在hbase shell种get某rowkey时看到的数据总是最新版本的值。可以通过get时 带versions 参数取得多个版本的数据。
因为有多维结构,可以灵活的设计出多种存储方案,如行少列多,行多列少等形式。这个需要参考hbase关于行健的设计等。

二、通过thrift生成的php 相关类库操作

http://blog.csdn.net/hguisu/article/details/7298456

因为系统内核版本比较低,看到官方文档说的是centos6.5的实例,要升级好多东西,后来尝试安装boost一直没有成功。改用的0.8.0版本,又碰到make不过去的情况,百度上千篇一律,没有人说到那个问题,后来google才找到答案,是5.4以上 有个文件的方法function_entry添加了zend_,难道是网上的文章发表时那时候php还没到5.4版本?

./bin/hbase-daemon.sh start thrift [--port=xx]启动thrift服务
git branch -r 查看远程分支

官方高版本碰到的问题:

yum install libboost-dev libboost-test-dev libboost-program-options-dev libevent-dev automake libtool flex bison pkg-config g++ libssl-dev

./configure –without-php –without-ruby –without-haskell –without-python –without-perl
官方安装文档

http://thrift.apache.org/docs/install/centos

yum install automake libtool flex bison pkgconfig gcc-c++ boost-devel libevent-devel zlib-devel python-devel ruby-devel

sudo gem install bundler
[root@chenlong thrift]# ./bootstrap.sh

configure.ac:104: error: possibly undefined macro: AM_EXTRA_RECURSIVE_TARGETS
If this token and others are legitimate, please use m4_pattern_allow.

安装automaker 1.13以上
configure.ac:90: error: possibly undefined macro: AC_PROG_LIBTOOL
If this token and others are legitimate, please use m4_pattern_allow.
See the Autoconf documentation.

出现这个问题的原因主要有两个:
1.没有安装aclocal
解决方法:安装libtool
2.没有配置正确aclocal的库LIBTOOL.m4的路径

解决方法:
—-查看aclocal的路径 aclocal –print-ac-dir
—-如果相应的*.m4文件不在这个目录下,则重新配置路径,或是将相应的*.m4文件复制到这个路径下 (aclocal -I DIR)
ll /usr/local/share/aclocal
ll /usr/share/aclocal
automake 默认装到 /usr/local 之前系统的各种xx.m4在 /usr/share/aclocal
Installation directories:
–prefix=PREFIX install architecture-independent files in PREFIX

0.8.0碰到问题

…failed updating 8 targets…
…skipped 6 targets…
…updated 2571 targets…
yum install automake libtool flex bison pkgconfig gcc-c++ \
boost-devel libevent-devel zlib-devel python-devel
make[4]: *** [php_thrift_protocol.lo] Error 1
make[4]: Leaving directory `/root/thrift-0.8.0/lib/php/src/ext/thrift_protocol’
make[3]: *** [src/ext/thrift_protocol/modules/thrift_protocol.so] Error 2
make[3]: Leaving directory `/root/thrift-0.8.0/lib/php’
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/root/thrift-0.8.0/lib’
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/root/thrift-0.8.0′
make: *** [all] Error 2

解决方案:一定要多看configure时提示的 各种yes 或者no
升级re2c
configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.
wget http://sourceforge.net/projects/re2c/files/re2c/0.13.5/re2c-0.13.5.tar.gz/download
tar -zxvf re2c-0.13.5.tar.gz

安装libevent
checking for libevent >= 1.0… no

安装了才有下面的yes
Building TNonblockingServer .. : yes

因为这个thrift/ext/thrift_protocol/php_thrift_protocol.cpp:95:8: error: ‘function_entry’ does not name a type导致又出‘thrift_protocol_functions’ was not declared in this scope。

google搜索“function_entry” 搜索到了https://groups.google.com/forum/#!topic/phpcassa/Oxaeqi6HAfQ提到了解决方案

A change in php 5.4 is what’s causing this. I’ve created https://issues.apache.org/jira/browse/THRIFT-1602. It should be pretty easy to resolve.

https://issues.apache.org/jira/browse/THRIFT-1602

https://bugs.php.net

搜索 function_entry

hbase svn版本库:http://svn.apache.org/viewvc/hbase/trunk/

编译通过后

mkdir -p php_thrift/lib
cp thrift-0.8.0/lib/php/src/* php_thrift/lib
/usr/local/hbase/hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift2/hbase.thrift

mkdir hbase0.94.27-thrift
cp -r /usr/local/hbase-0.94.27/src/main/resources/org/apache/hadoop/hbase/
thrift/Hbase.thrift
thrift2/hbase.thrift
.
|– thrift
| `– Hbase.thrift
`– thrift2
`– hbase.thrift

mkdir -p php_thrift/lib/packages

使用版本1
/usr/local/thrift/bin/thrift -gen php hbase0.94.27-thrift/thrift/Hbase.thrift
使用新版本2
/usr/local/thrift/bin/thrift -gen php hbase0.94.27-thrift/thrift2/hbase.thrift
ll gen_php
hbase Hbase
mv Hbase thrift1
mv hbase thrift2
cp gen-php/* php_thrift/lib/packages
/usr/local/hbase/bin/hbase-daemon.sh start thrift
/usr/local/hbase/bin/hbase-daemon.sh start thrift –port=9999

web页面:

http://192.168.110.21:9095/

还可以生成php扩展:
cd thrift-0.8.0/lib/php/src/ext/thrift_protocol/
/configure –with-php-config=/usr/local/php/bin/php-config –enable-thrift_protocol
php-config 和php 命令都在安装目录的bin目录下
make
[root@node1 thrift_protocol]# make install
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/

extension_dir=/usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/
先打印phpinfo.php 确定加载的php.ini位置再添加extension=thrift_protocol.so

关于 Administrator

爱拼才会赢!
此条目发表在 hbase 分类目录,贴了 , 标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>