HBase入门之四HBase JAVA WEB客户端

实现一个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要查询的表

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值