HBase是一个开源的NoSQL产品,该技术来源于Chang et al所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库.另一个不同的是HBase基于列的而不是基于行的模式。
Hbase依赖于Hadoop来运行,它有两种配置方式,一种是比较简单的单实例方式,它已经内置了0.20版本的Hadoop包和一个本地Zookeeper,它们运行在同一个JVM之下,可以用本地文件系统而不用HDFS。另外一种比较复杂的分布式部署,需要在每一个节点替换自带的Hadoop包以免有版本问题,而且必须有一个HDFS实例,同时需要独立的ZooKeeper集群。为简单起见,我们选择单实例部署的方式,启动Hbase进程:
[root@localhost hbase-0.90.3]# bin/start-hbase.sh
starting master, logging to /home/banping/hbase/hbase-0.90.3/bin/../logs/hbase-root-master-localhost.localdomain.out
可以通过自带的shell命令来进行基本的操作:
[root@localhost hbase-0.90.3]# bin/hbase shell
hbase(main):002:0> create ‘test’,'cf’
0 row(s) in 0.9940 seconds
hbase(main):019:0> list
TABLE
test
1 row(s) in 0.0290 seconds
如果使用PHP操作Hbase,推荐使用Facebook开源出来的thrift,官网是:http://thrift.apache.org/ ,它是一个类似ice的中间件,用于不同系统语言间信息交换。
启动hbase和thrift进程:
[root@localhost hbase-0.90.3]# ./bin/start-hbase.sh
[root@localhost hbase-0.90.3]# ./bin/hbase-daemon.sh start thrift
starting thrift, logging to /home/banping/hbase/hbase-0.90.3/bin/../logs/hbase-root-thrift-localhost.localdomain.out
thrift默认监听的端口是9090
写一个PHP文件来测试:
<?php
$GLOBALS['THRIFT_ROOT'] = 'thrift';
require_once($GLOBALS['THRIFT_ROOT'].'/Thrift.php');
require_once($GLOBALS['THRIFT_ROOT'].'/transport/TSocket.php');
require_once($GLOBALS['THRIFT_ROOT'].'/transport/TBufferedTransport.php');
require_once($GLOBALS['THRIFT_ROOT'].'/protocol/TBinaryProtocol.php');
require_once($GLOBALS['THRIFT_ROOT'].'/packages/Hbase/Hbase.php');
define("HBASEHOST", "192.168.6.7");
define("HBASEPORT", 9090);
$socket = new TSocket(HBASEHOST, HBASEPORT);
$socket -> setSendTimeout(10000); // Ten seconds
$socket -> setRecvTimeout(20000); // Twenty seconds
$transport = new TBufferedTransport($socket);
$protocol = new TBinaryProtocol($transport);
$hbaseClient = new HbaseClient($protocol);
$transport->open();
//获取实例中的所有表
$table = $hbaseClient -> getTableNames();
foreach($table as $name){
echo(“found:{$name}\n”);
}
$transport->close();
?>
通过浏览器查看看到项目中的所有表,证明PHP可以通过thrift访问HBase了。