关闭

HBase JAVA WEB客户端

标签: hbasejavawebstringexceptioninsert
4811人阅读 评论(13) 收藏 举报

实现一个Hbase的java版本的客户端

1、目的:实现URL get传入数据或者Post方式传输数据,进而操作Hbase

2、实现客户端是引子,我们要实现的是如果通过这种方式,从而避开Thrift或者Rest 来对Hbase进行操作

步骤:

     1、可以建一个web工程,方便在应用服务器加载,并方便使用

可以建一个jsp 或者servlet 来接受传入的数据,我本地实现了一个servlet 来处理请求的数据

仅列出doGet方法的内容:

public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  response.setContentType("text/html");
  request.setCharacterEncoding("GBK");
  response.setCharacterEncoding("GBK");
  PrintWriter out = response.getWriter();
  bodyBefore(out);//body前面的页面展示
  HbaseBase base = new HbaseBase();
  String method = request.getParameter("method");
  String tableName = null;
  //create table
  if (method != null && !method.equals("") && method.equals(CommonUtils.TABLE_CREATE)) {
   tableName = request.getParameter("tablename");
   String tmpColumns = request.getParameter("columns");
   if (tmpColumns != null && !tmpColumns.equals("")) {
    boolean isTrue = base.createTable(tableName, tmpColumns.split(","));
    out.print("create table is "+isTrue);
   } else
    out.print("please input columns 1 least");
// isnert data
  } else if (method != null && !method.equals("")&& method.equals(CommonUtils.TABLE_INSERT)) {
   tableName = request.getParameter("tablename");
   String rowkey = request.getParameter("rowkey");
   String column = request.getParameter("column");
   String qualifiers = request.getParameter("qualifiers");
   String values = request.getParameter("values");
   try {
    base.insertData(tableName, rowkey, column,
      qualifiers.split(","), values.split(","));
   } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   out.print("insert tabledata success!");
  //drop table
  } else if (method != null && !method.equals("")&& method.equals(CommonUtils.TABLE_DROP)) {
   tableName = request.getParameter("tablename");
   base.dropTable(tableName);
   out.print("drop table " + tableName + " success!");
  //delete data
  } else if (method != null && !method.equals("")&& method.equals(CommonUtils.TABLE_DELETE)) {
   tableName = request.getParameter("tablename");
   String rowKey = request.getParameter("rowkey");
   base.deleteRow(tableName, rowKey);
   out.print("delete table  data " + tableName + " success!");
 } else if (method != null && !method.equals("")&& method.equals(CommonUtils.TABLE_QUERY)) {
  tableName = request.getParameter("tablename");
  HashMap<String, String> map = base.QueryAll(tableName);
  Iterator<Entry<String, String>> iter = map.entrySet().iterator();
  System.out.println("size========"+map.size());
  out.print("<table>");
  out.print("<tr><td>column</td><td>value</td></tr>");
  while(iter.hasNext()){
   Entry<String, String> entry = iter.next();
   out.print("<tr>");
   out.print("<td>");
   out.print(entry.getKey());
   out.print("</td>");
   out.print("<td>");
   out.print(new String(entry.getValue().getBytes(),"GBK"));
   out.print("</td>");
   out.print("</tr>");
  }
  out.print("</table>");
  out.print("query table  data " + tableName + " success!");
 }
  bodyFollow(out);//body 后面的html展示

 }

 

上面用到了具体的操作 也就是我们分的另外一层,也仅仅列出了简单的操作方法

  /**
     * create table
  * @param tableName
     */ 
    public  boolean createTable(String tableName,String[] columns) { 
        System.out.println("create table ...start..."); 
        try { 
            HBaseAdmin hBaseAdmin = new HBaseAdmin(configuration); 
            if (hBaseAdmin.tableExists(tableName)) {// 如果存在要创建的表,那么先删除,再创建 
                hBaseAdmin.disableTable(tableName); 
                hBaseAdmin.deleteTable(tableName); 
                System.out.println(tableName + " is exist,detele...."); 
            } 
            HTableDescriptor tableDescriptor = new HTableDescriptor(tableName); 
            for(String family:columns){
             tableDescriptor.addFamily(new HColumnDescriptor(family));//base on we need how many families
            }
            hBaseAdmin.createTable(tableDescriptor); 
        } catch (MasterNotRunningException e) { 
            e.printStackTrace(); 
        } catch (ZooKeeperConnectionException e) { 
            e.printStackTrace(); 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } 
        System.out.println("create table ...end..."); 
        return true;
    } 
 
    /**
     * insert data
     * @param tableName
  * @throws Exception
     */ 
    public boolean insertData(String tableName,String rowkey,String column,String[] qualifiers,String[] values) throws Exception { 
        System.out.println("insert data ...start..."); 
        if(qualifiers.length==0||values.length==0){
          throw new Exception("array length is not right!,please check");
        }
         if(qualifiers.length!=values.length){
          throw new Exception("qualifiers's length must equal values's length!,please check");
         }
        HTablePool pool = new HTablePool(configuration, 1000); 
        HTable table = (HTable) pool.getTable(tableName); 
        Put put = new Put(rowkey.getBytes());// 一个PUT代表一行数据,再NEW一个PUT表示第二行数据,每行一个唯一的ROWKEY,此处rowkey为put构造方法中传入的值 
        for(int i=0;i<qualifiers.length;i++){
        put.add(column.getBytes(), qualifiers[i].getBytes(), values[i].getBytes());// 本行数据的第一列 
            }
        try { 
            table.put(put); 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } 
        System.out.println("insert data ...end..."); 
        return true;
    } 
 
    /**
     * 删除一张表
      * @param tableName
      */ 
     public boolean dropTable(String tableName) { 
         try { 
             HBaseAdmin admin = new HBaseAdmin(configuration); 
             admin.disableTable(tableName); 
             admin.deleteTable(tableName); 
         } catch (MasterNotRunningException e) { 
             e.printStackTrace(); 
         } catch (ZooKeeperConnectionException e) { 
             e.printStackTrace(); 
         } catch (IOException e) { 
             e.printStackTrace(); 
         } 
        return true;
     } 
     /**
      * 根据 rowkey删除一条记录
      * @param tablename
      * @param rowkey
      */ 
      public boolean deleteRow(String tablename, String rowkey)  { 
         try { 
             HTable table = new HTable(configuration, tablename); 
             List<Delete> list = new ArrayList<Delete>(); 
             Delete d1 = new Delete(rowkey.getBytes()); 
             list.add(d1); 
              
             table.delete(list); 
             System.out.println("删除行成功!"); 
              
         } catch (IOException e) { 
             e.printStackTrace(); 
         } 
           return true;
  
     } 

为此几个方法,具体用法参考如下API

具体访问路径

http://192.168.*.*:8380/HbasePrj/servlet/HbaseHandler

目前仅支持post或者get 方法传递参数

后期或考虑传递json串。

可传参数代表可以以何种方式操作Hbase

method=create|insert|drop|delete|query表示通过何种方式操作hbase 需传上述5中操作中的一种

create: 创建表方法,必须含有的参数

1、  tablename=tablename 表示要创建的表名称

2、  columns = family1,family2… 至少有一个family如果有多个,中间必须用,隔开

drop: 删除表方法,必须含有的参数

1、  tablename=tablename 表示要删除的表名称

insert: 新增数据方法,必须含有的参数

1、  tablename = tablename 表示要添加数据的表

2、  rowkey=rowkey 表示此数据的rowkey

3、  column = family 表示添加数据的列族注意此处仅支持单列族添加一条或多条数据

4、  qualifiers = qualifier1, qualifier2 此处是此列族中要添加的具体列数据,多个列用,隔开

5、  values = value1,value2 具体对应qualifiers数据必须和qualifiers 数据一一对应,如果不一致,无法添加数据

delete: 删除一条数据目前仅支持删除单条数据

1、  tablename = tablename 要删除数据的表明

2、  rowkey = rowkey 要删除数据的行号

query: 查询一个表所有数据

1tablename=tablename要查询的表

 

示例:

http://192.168.*.*:8380/HbasePrj/servlet/HbaseHandler?method=create&tablename=new_table&columns=info,col

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:190015次
    • 积分:2177
    • 等级:
    • 排名:第18025名
    • 原创:32篇
    • 转载:12篇
    • 译文:0篇
    • 评论:35条
    最新评论