文章目录
  1. 1. 环境准备
  2. 2. 集成过程
  3. 3. 参考资料

用thrift做中间件,nodejs做客户端,操作hbase

thrift是一种中间件,百度上有很多介绍,跟protobuf有些像。

环境准备

  • node安装配置 (百度搜索“nodejs linux 安装”)
  • thrift安装
  • hadoop安装配置
  • hbase安装配置

注:hadoop和hbase的安装配置,我的blog里有介绍,感兴趣的同学可以翻阅一下。thrift安装就比较麻烦了,这里有个官网连接
还有不同操作系统安装之前的依赖

thrift安装好后,可以查看一下版本

1
2
xiaolongyuan@xiaolongdeMacBook-Air conf$ thrift -version
Thrift version 0.9.1

集成过程

1.先对nodejs进行安装thrift的依赖包,设置NODE_PATH

1
2
3
4
xiaolongyuan@xiaolongdeMacBook-Air thrift_work$ npm install -g thrift
thrift@0.9.1 /usr/local/lib/node_modules/thrift
├── node-int64@0.3.1
└── nodeunit@0.8.8 (tap@0.4.12)
1
2
#node
export NODE_PATH=/usr/local/lib/node_modules/

2.启动hadoop,启动hbase及hbase thrift服务

hadoop/bin
1
sh ./start-all.sh
hbase/bin
1
2
sh ./start-hbase.sh
hbase-daemon.sh start thrift -f

通过jps可以查看到进程(我用的是hadoop hbase伪分布式)

1
2
3
4
5
6
7
8
9
10
11
xiaolongyuan@xiaolongdeMacBook-Air bin$ jps
440 JobTracker
238 DataNode
974 ThriftServer
801 HMaster
754 HQuorumPeer
915 HRegionServer
361 SecondaryNameNode
538 TaskTracker
120 NameNode
1031 Jps

3.下载hbase源码,当前版本 hbase-0.98.5-src.tar.gz ,在路径 hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift 下有个 Hbase.thrift 的文件,建议先新建一个文件夹,以便存放生成的内容,进入文件夹,执行命令

1
thrift -r --gen js:node /Users/xiaolongyuan/Documents/src-code/src-hbase-0.98.5/hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift

可以看到在此路径下有文件生成,提供给客户端语言使用的API接口。
node

4.在gen-nodejs同级目录下,新建客户端js文件(如果不想在同级目录,需要修改js里的require路径)

node4hbase.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var thrift = require('thrift'),
HBase = require('./gen-nodejs/HBase.js'),
HBaseTypes = require('./gen-nodejs/HBase_types.js'),
connection = thrift.createConnection('localhost', 9090, {
transport: thrift.TFramedTransport,
protocol: thrift.TBinaryProtocol
});

connection.on('connect', function() {
var client = thrift.createClient(HBase,connection);
client.getTableNames(function(err,data) {
if (err) {
console.log('gettablenames error:', err);
} else {
console.log('hbase tables:', data);
}
connection.end();
});
});

connection.on('error', function(err){
console.log('error', err);
});

5.node执行js文件,验证。

1
2
xiaolongyuan@xiaolongdeMacBook-Air thrift_work$ node node4hbase.js
hbase tables: [ 'student' ]

查看hbase里的表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
xiaolongyuan@xiaolongdeMacBook-Air bin$ hbase shell

HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 0.98.4-hadoop1, r890e852ce1c51b71ad180f626b71a2a1009246da, Mon Jul 14 18:54:31 PDT 2014

hbase(main):001:0> list
TABLE
2014-08-21 23:01:08.459 java[1038:1903] Unable to load realm info from SCDynamicStore
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/Users/xiaolongyuan/Documents/hbase-0.98.4-hadoop1/lib/slf4j-log4j12-1.6.4.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/Users/xiaolongyuan/Documents/hadoop-1.2.1/lib/slf4j-log4j12-1.4.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
student
1 row(s) in 1.9050 seconds

=> ["student"]
hbase(main):002:0> exit

参考资料

  1. thrift官方教程 地址
  2. nodejs操作hbase 地址