Skip to content

上手实例

haosdent edited this page Sep 15, 2013 · 5 revisions

本文将简要介绍如何快速部署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

使用JDBC操作数据库

经过前面那么多的准备步骤后,我们现在终于可以使用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.gzlib目录加到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

Clone this wiki locally