-
Notifications
You must be signed in to change notification settings - Fork 80
上手实例
本文将简要介绍如何快速部署Wasp及使用JDBC的方式连接和操作Wasp
1.一个分布式部署的hbase集群,hbase已经启动
2.编译代码的机器上已经安装好Maven和JDK6
1.使用如下命令从github克隆最新代码
git clone https://github.com/alibaba/wasp.git
2.进入wasp目录,并确保当前目录为JDK6
~/workspace/java$: cd wasp/
~/workspace/java/wasp$: java -version
java version "1.6.0_51"
Java(TM) SE Runtime Environment (build 1.6.0_51-b11-457-11M4509)
Java HotSpot(TM) 64-Bit Server VM (build 20.51-b01-457, mixed mode)
3.执行如下命令进行编译
mvn -DskipTests assembly:assembly
4.编译完成后,target
目录下的wasp-0.10-bin.tar.gz
就是我们稍后将会用的压缩包
1.将wasp-0.10-bin.tar.gz
上传到服务器指定的目录
~/workspace/java/wasp$: scp target/wasp-0.10-bin.tar.gz [email protected]:develop/soft/
2.登录服务器后,解压wasp-0.10-bin.tar.gz
并进入解压后的目录
~/develop/soft$: tar -zxvf wasp-0.10-bin.tar.gz
3.编辑conf
目录下的wasp-site.xml
,加上如下配置:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<!-- 设置wasp在zk中的父目录 -->
<name>zookeeper.wasp.znode.parent</name>
<value>/wasp</value>
</property>
<property>
<!-- 设置wasp使用的zk地址,该地址必须是依赖的存储引擎hbase使用的zk地址 -->
<name>wasp.zookeeper.quorum</name>
<value>10.232.98.94,10.232.98.72,10.232.98.40</value>
</property>
<property>
<!-- 设置wasp使用的zk端口号 -->
<name>wasp.zookeeper.property.clientPort</name>
<value>40060</value>
</property>
<property>
<!-- 设置hbase在zk中的父目录 -->
<name>zookeeper.znode.parent</name>
<value>/hbase-cdh4</value>
</property>
<property>
<!-- 设置hbase使用的zk地址 -->
<name>hbase.zookeeper.quorum</name>
<value>10.232.98.94,10.232.98.72,10.232.98.40</value>
</property>
<property>
<!-- 设置hbase使用的zk端口号 -->
<name>hbase.zookeeper.property.clientPort</name>
<value>40060</value>
</property>
<property>
<!-- 设置系统为分布式模式 -->
<name>wasp.cluster.distributed</name>
<value>true</value>
</property>
<property>
<!-- master节点的服务端口 -->
<name>wasp.master.port</name>
<value>45050</value>
</property>
<property>
<!-- master的web页面的服务端口 -->
<name>wasp.master.info.port</name>
<value>45051</value>
</property>
<property>
<!-- 数据服务节点的服务端口 -->
<name>wasp.fserver.port</name>
<value>45052</value>
</property>
<property>
<!-- 数据服务节点的web页面的服务端口 -->
<name>wasp.fserver.info.port</name>
<value>45053</value>
</property>
</configuration>
4.编辑conf
目录下的wasp-env.sh
,禁用Wasp自动启动zookeeper集群:
export WASP_MANAGES_ZK=false
5.编辑conf
目录下的fservers
,加上fservers的地址,需确保已经配置fservers的免认证登录
10.232.98.60
10.232.98.61
10.232.98.62
1.完成配置后,将wasp-0.10
同步到所有fservers服务器上,注意保持一样访问结构
2.使用如下命令启动Wasp
~/develop/soft$: ./wasp-0.10/bin/start-wasp.sh
3.启动Wasp Shell,使用status
命令检查是否成功启动,若出现如下的提示信息,则表明已成功启动Wasp:
~/develop/soft$: ./wasp-0.10/bin/wasp shell
wasp(main):061:0> status
3 servers, 0 dead, 0.3333 average load
经过前面那么多的准备步骤后,我们现在终于可以使用Wasp来存储我们的数据了。而Wasp提供了我们非常熟悉的JDBC连接方式,下面将介绍如何以JDBC连接和操作Wasp。
1.在代码中需配置Wasp的zookeeper相关信息
Properties props = new Properties();
/*
* 配置wasp对应的zookeeper属性
*/
props.setProperty("wasp.zookeeper.quorum",
"10.232.98.94,10.232.98.72,10.232.98.40");
props.setProperty("wasp.zookeeper.property.clientPort", "40060");
2.载入Wasp的JDBC驱动
/*
* 载入wasp的jdbc和初始化相关对象
*/
com.alibaba.wasp.jdbc.Driver.load();
Connection conn = DriverManager.getConnection("jdbc:wasp:", props);
Statement stat = conn.createStatement();
OK,下面我们就可以通过直接执行SQL语句来操作Wasp,比如
1.创建表
/*
* 创建user表,主键为user_id
*/
String sql = "CREATE TABLE user {REQUIRED INT64 user_id;"
+ " REQUIRED STRING name; }"
+ " PRIMARY KEY(user_id),"
+ " ENTITY GROUP ROOT,"
+ " ENTITY GROUP KEY(user_id);";
stat.execute(sql);
2.插入记录
/*
* 插入id为1,name为'test'的记录
*/
sql = "INSERT INTO user(user_id,name) values(1,'test');";
stat.execute(sql);
3.查询记录
/*
* 查询user_id为1的记录信息
* 最终控制台结果为:1,test
*/
sql = "SELECT * FROM user WHERE user_id=1;";
ResultSet rs = stat.executeQuery(sql);
for (; rs.next(); ) {
System.out.println(rs.getString("user_id") + "," + rs.getString("name"));
}
整个完整的代码为:
package me.haosdent.test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class WaspExample {
public static void main(String[] args) {
Properties props = new Properties();
/*
* 配置wasp对应的zookeeper属性
*/
props.setProperty("wasp.zookeeper.quorum", "10.232.98.94,10.232.98.72,10.232.98.40");
props.setProperty("wasp.zookeeper.property.clientPort", "40060");
/*
* 载入wasp的jdbc
*/
com.alibaba.wasp.jdbc.Driver.load();
Connection conn = null;
Statement stat = null;
try {
conn = DriverManager.getConnection("jdbc:wasp:", props);
stat = conn.createStatement();
/*
* 创建user表,主键为user_id
*/
String sql = "CREATE TABLE user {REQUIRED INT64 user_id;"
+ " REQUIRED STRING name; }"
+ " PRIMARY KEY(user_id),"
+ " ENTITY GROUP ROOT,"
+ " ENTITY GROUP KEY(user_id);";
stat.execute(sql);
Thread.sleep(2000);
/*
* 插入id为1,name为'test'的记录
*/
sql = "INSERT INTO user(user_id,name) values(1,'test');";
stat.execute(sql);
/*
* 查询user_id为1的记录信息
* 控制台结果:1,test
*/
sql = "SELECT * FROM user WHERE user_id=1;";
ResultSet rs = stat.executeQuery(sql);
for (; rs.next(); ) {
System.out.println(rs.getString("user_id") + "," + rs.getString("name"));
}
} catch (SQLException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
try {
stat.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
写好代码导出为jar包后,使用如下命令运行程序,运行时需将之前解压wasp-0.10-bin.tar.gz
中lib
目录加到CLASSPATH中:
java -cp /tmp/wasp-0.10/lib/*:/tmp/WaspExample.jar me.haosdent.test.WaspExample
控制台结果如下,说明已经成功插入记录到Wasp并查询到相关数据:
1,test
而登录上服务器后,进入Wasp Shell,也可以查询到之前创建的user表信息
## 显示所有表
wasp(main):062:0> show_tables
TABLE
user
1 row(s) in 0.0130 seconds
## 查看user表的结构
wasp(main):065:0> describe_table 'user'
+---------------------------+----------+----------+-----+-----+
| Field | Type | REQUIRED | Key | EGK |
+---------------------------+----------+----------+-----+-----+
| user_id | INT64 | REQUIRED | PRI | EGK |
| name | STRING | REQUIRED | | |
+---------------------------+----------+----------+-----+-----+
1 row(s) in 0.0050 seconds
上手示例到这里已经结束,关于Wasp更多有趣的功能你可以从此wiki的其他文章中更进一步了解。若操作过程中有任何疑问或需求,欢迎到此处提issue。