HBase java API 使用实例(一)——增加、修改、删除
2016-11-23 16:56
579 查看
HBase java API 使用实例(一)——增加、修改、删除
上一篇文章(http://blog.csdn.net/wild46cat/article/details/53288537)已经能够使用java api对HBase进行增加、删除、修改了,那么这篇文章主要是讲的是什么呢?这篇文章主要是对上一篇文章中的代码的重构,首先把一些已经废弃的方法进行了替换,然后是对生产环境的一个测试,最后在返回数据时,已经把数据转换成类似JSON的格式了。这样重构之后,在使用时非常方便。但是对于特殊的一些业务可能需要再次重构(读者可以在这个基础上修改,最后我会附上代码)。注意:
1、这篇文章是第一部分,讲述的是增加、修改、删除。对于表的查询,等到下一篇文章再和大家分享。
2、因为已经有前一篇文章的铺垫,所以这里略过了使用java api访问HBase的条件(需要哪些jar包,配置文件等),如果多余这些前提条件还不清楚,建议看一下这篇文章:http://blog.csdn.net/wild46cat/article/details/53288537。
好啦,下面上货:
1、HBaseUtils.java
package com.xueyoucto.hbasett; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.*; import org.apache.hadoop.hbase.client.*; import org.apache.hadoop.hbase.util.Bytes; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * Created by Administrator on 2016-11-23. */ public class HBaseUtils { static Configuration cfg; static Connection connection; static { cfg = HBaseConfiguration.create(); try { connection = ConnectionFactory.createConnection(cfg); } catch (IOException e) { e.printStackTrace(); } System.out.println(cfg.get("hbase.master")); } //新建表 public static boolean create(String tableName, String columnFamily) throws Exception { HBaseAdmin admin = (HBaseAdmin) connection.getAdmin(); if (admin.tableExists(tableName)) { System.out.println(tableName + " exists!"); return false; } else { String[] columnFamilyArray = columnFamily.split(","); HColumnDescriptor[] hColumnDescriptor = new HColumnDescriptor[columnFamilyArray.length]; for (int i = 0; i < hColumnDescriptor.length; i++) { hColumnDescriptor[i] = new HColumnDescriptor(columnFamilyArray[i]); } HTableDescriptor familyDesc = new HTableDescriptor(TableName.valueOf(tableName)); for (HColumnDescriptor columnDescriptor : hColumnDescriptor) { familyDesc.addFamily(columnDescriptor); } HTableDescriptor tableDesc = new HTableDescriptor(TableName.valueOf(tableName), familyDesc); admin.createTable(tableDesc); System.out.println(tableName + " create successfully!"); return true; } } //插入数据 public static boolean put(String tablename, String row, String columnFamily, String qualifier, String data) throws Exception { Table table = connection.getTable(TableName.valueOf(tablename)); Put put = new Put(Bytes.toBytes(row)); put.addColumn(Bytes.toBytes(columnFamily), Bytes.toBytes(qualifier), Bytes.toBytes(data)); table.put(put); System.out.println("put '" + row + "', '" + columnFamily + ":" + qualifier + "', '" + data + "'"); return true; } //把result转换成map,方便返回json数据 public static Map<String, Object> resultToMap(Result result) { Map<String, Object> resMap = new HashMap<String, Object>(); List<Cell> listCell = result.listCells(); Map<String, Object> tempMap = new HashMap<String, Object>(); String rowname = ""; List<String> familynamelist = new ArrayList<String>(); for (Cell cell : listCell) { byte[] rowArray = cell.getRowArray(); byte[] familyArray = cell.getFamilyArray(); byte[] qualifierArray = cell.getQualifierArray(); byte[] valueArray = cell.getValueArray(); int rowoffset = cell.getRowOffset(); int familyoffset = cell.getFamilyOffset(); int qualifieroffset = cell.getQualifierOffset(); int valueoffset = cell.getValueOffset(); int rowlength = cell.getRowLength(); int familylength = cell.getFamilyLength(); int qualifierlength = cell.getQualifierLength(); int valuelength = cell.getValueLength(); byte[] temprowarray = new byte[rowlength]; System.arraycopy(rowArray, rowoffset, temprowarray, 0, rowlength); String temprow= Bytes.toString(temprowarray); // System.out.println(Bytes.toString(temprowarray)); byte[] tempqulifierarray = new byte[qualifierlength]; System.arraycopy(qualifierArray, qualifieroffset, tempqulifierarray, 0, qualifierlength); String tempqulifier= Bytes.toString(tempqulifierarray); // System.out.println(Bytes.toString(tempqulifierarray)); byte[] tempfamilyarray = new byte[familylength]; System.arraycopy(familyArray, familyoffset, tempfamilyarray, 0, familylength); String tempfamily= Bytes.toString(tempfamilyarray); // System.out.println(Bytes.toString(tempfamilyarray)); byte[] tempvaluearray = new byte[valuelength]; System.arraycopy(valueArray, valueoffset, tempvaluearray, 0, valuelength); String tempvalue= Bytes.toString(tempvaluearray); // System.out.println(Bytes.toString(tempvaluearray)); tempMap.put(tempfamily + ":" + tempqulifier, tempvalue); // long t= cell.getTimestamp(); // tempMap.put("timestamp",t); rowname = temprow; String familyname = tempfamily; if (familynamelist.indexOf(familyname) < 0) { familynamelist.add(familyname); } } resMap.put("rowname", rowname); for (String familyname : familynamelist) { HashMap<String,Object> tempFilterMap = new HashMap<String,Object>(); for (String key : tempMap.keySet()) { String[] keyArray = key.split(":"); if(keyArray[0].equals(familyname)){ tempFilterMap.put(keyArray[1],tempMap.get(key)); } } resMap.put(familyname, tempFilterMap); } return resMap; } //查看某行 public static String get(String tablename, String row) throws Exception { Table table = connection.getTable(TableName.valueOf(tablename)); Get get = new Get(Bytes.toBytes(row)); Result result = table.get(get); System.out.println("Get: " + result); return resultToMap(result).toString(); } //查看全表 public static String scan(String tablename) throws Exception { Table table = connection.getTable(TableName.valueOf(tablename)); Scan s = new Scan(); ResultScanner rs = table.getScanner(s); List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>(); for (Result r : rs) { Map<String, Object> tempmap = resultToMap(r); resList.add(tempmap); } return resList.toString(); } //删除表 public static boolean delete(String tableName) throws IOException { HBaseAdmin admin = (HBaseAdmin) connection.getAdmin(); if (admin.tableExists(tableName)) { try { admin.disableTable(tableName); admin.deleteTable(tableName); } catch (Exception e) { e.printStackTrace(); return false; } } return true; } //删除ColumnFamily public static boolean deleteColumnFamily(String tableName,String columnFamilyName) throws IOException { HBaseAdmin admin = (HBaseAdmin) connection.getAdmin(); if (admin.tableExists(tableName)) { try { admin.deleteColumn(tableName,columnFamilyName); } catch (Exception e) { e.printStackTrace(); return false; } } return true; } //删除row public static boolean deleteRow(String tableName,String rowName) throws IOException { HBaseAdmin admin = (HBaseAdmin) connection.getAdmin(); Table table = connection.getTable(TableName.valueOf(tableName)); if (admin.tableExists(tableName)) { try { Delete delete = new Delete(rowName.getBytes()); table.delete(delete); } catch (Exception e) { e.printStackTrace(); return false; } } return true; } //删除qualifier public static boolean deleteQualifier(String tableName,String rowName,String columnFamilyName,String qualifierName) throws IOException { HBaseAdmin admin = (HBaseAdmin) connection.getAdmin(); Table table = connection.getTable(TableName.valueOf(tableName)); if (admin.tableExists(tableName)) { try { Delete delete = new Delete(rowName.getBytes()); delete.addColumns(columnFamilyName.getBytes(),qualifierName.getBytes()); table.delete(delete); } catch (Exception e) { e.printStackTrace(); return false; } } return true; } }
注释中已经写得比较清楚了,这个类可以用作工具类。下面的servlet是这个工具类的测试。
2、ServletCreate.java ==>测试新建表
package com.xueyoucto.hbasett; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; /** * Created by Administrator on 2016-11-23. */ @WebServlet(name = "ServletCreate",urlPatterns = "/HbaseServletCreate") public class ServletCreate extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ String tname = request.getParameter("tablename"); //多个familyName 用逗号分隔 String familyName = request.getParameter("familyname"); String msg = "-"; try{ if(HBaseUtils.create(tname,familyName)){ msg="success"; }else{ msg="error"; } }catch (Exception e){ e.printStackTrace(); } response.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); out.println(msg); out.flush(); out.close(); } }
下面是测试截图:
查看表是否存在:
3、ServletPut.java ==>测试插入数据
package com.xueyoucto.hbasett; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; /** * Created by Administrator on 2016-11-23. */ @WebServlet(name = "ServletPut",urlPatterns = "/HbaseServletPut") public class ServletPut extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String tname = request.getParameter("tablename"); String row = request.getParameter("row"); String familyName = request.getParameter("familyname"); String qualifier = request.getParameter("qualifier"); String data = request.getParameter("data"); String msg = "-"; try{ if(HBaseUtils.put(tname,row,familyName,qualifier,data)){ msg="success"; }else{ msg="error"; } }catch (Exception e){ e.printStackTrace(); } response.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); out.println(msg); out.flush(); out.close(); } }
4、ServletGet.java ==>测试查看数据(get方式)
package com.xueyoucto.hbasett; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; /** * Created by Administrator on 2016-11-23. */ @WebServlet(name = "ServletGet",urlPatterns = "/HBaseServletGet") public class ServletGet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String tname = request.getParameter("tablename"); String row = request.getParameter("row"); String msg = "-"; try{ msg=HBaseUtils.get(tname,row); }catch (Exception e){ e.printStackTrace(); } response.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); out.println(msg); out.flush(); out.close(); } }
5、ServletScan.java ==>测试查看数据(scan方式)
package com.xueyoucto.hbasett; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; /** * Created by Administrator on 2016-11-23. */ @WebServlet(name = "ServletScan",urlPatterns = "/HBaseServletScan") public class ServletScan extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String tname = request.getParameter("tablename"); String msg = "-"; try{ msg = HBaseUtils.scan(tname); }catch (Exception e){ e.printStackTrace(); } response.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); out.println(msg); out.flush(); out.close(); } }
这三个方法一起测试:
首先添加:
下面测试查询(get方式):
测试查询(scan方式):
6、ServletDeleteQualifier.java ==>测试删除修饰符
package com.xueyoucto.hbasett; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; /** * Created by Administrator on 2016-11-23. */ @WebServlet(name = "ServletDeleteQualifier",urlPatterns = "/HBaseServlertDeleteQualifier") public class ServletDeleteQualifier extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String tname = request.getParameter("tablename"); String rowName = request.getParameter("rowname"); String columnfamilynameName = request.getParameter("columnfamilyname"); String qualifierName = request.getParameter("qualifiername"); String msg = "-"; if(HBaseUtils.deleteQualifier(tname,rowName,columnfamilynameName,qualifierName)){ msg = "success"; }else{ msg = "error"; } response.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); out.println(msg); out.flush(); out.close(); } }
测试删除article 中的content
删除后再次查询:
7、ServletDeleteRow.java ==>测试删除row
package com.xueyoucto.hbasett; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; /** * Created by Administrator on 2016-11-23. */ @WebServlet(name = "ServletDeleteRow",urlPatterns = "/HbaseServletDeleteRow") public class ServletDeleteRow extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String tname = request.getParameter("tablename"); String rowName = request.getParameter("rowname"); String msg = "-"; if(HBaseUtils.deleteRow(tname, rowName)){ msg = "success"; }else{ msg = "error"; } response.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); out.println(msg); out.flush(); out.close(); } }
测试删除test表中的r1行
再次查看表test
8、ServletDeleteColumn.java ==>测试删除columnfamily
package com.xueyoucto.hbasett; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; /** * Created by Administrator on 2016-11-23. */ @WebServlet(name = "ServletDeleteColumn",urlPatterns = "/HbaseServletDeleteColumn") public class ServletDeleteColumn extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String tname = request.getParameter("tablename"); String columnName = request.getParameter("columnname"); String msg = "-"; if(HBaseUtils.deleteColumnFamily(tname, columnName)){ msg = "success"; }else{ msg = "error"; } response.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); out.println(msg); out.flush(); out.close(); } }
测试删除test表中的article(article是创建表时的columnfamily)。
查看表的结构:
9、ServletDelete.java ==>测试删除表
package com.xueyoucto.hbasett; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; /** * Created by Administrator on 2016-11-23. */ @WebServlet(name = "ServletDelete",urlPatterns = "/HbaseServletDelete") public class ServletDelete extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String tname = request.getParameter("tablename"); String msg = "-"; if(HBaseUtils.delete(tname)){ msg = "success"; }else{ msg = "error"; } response.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); out.println(msg); out.flush(); out.close(); } }
测试删除test表:
查看表是否存在:
这样,基本的添加、修改、删除就能够使用了。
下面附上源码,不要你的积分噢!!!: http://download.csdn.net/detail/wild46cat/9691298
下面是HBase java API 查询和分页的文章地址:
HBase java API 使用实例(二)——查询、分页
相关文章推荐
- HBase java API 使用实例(一)——增加、修改、删除
- C#使用XmlDocument操作XML进行查询、增加、修改、删除、保存应用的实例
- C#使用XmlDocument操作XML进行查询、增加、修改、删除、保存应用的实例(转载)
- C#使用XmlDocument操作XML进行查询、增加、修改、删除、保存应用的实例(转载)
- HBase java API 使用实例(二)——查询、分页
- C#使用XmlDocument操作XML进行查询、增加、修改、删除、保存应用的实例
- C#使用XmlDocument操作XML进行查询、增加、修改、删除、保存应用的实例
- 使用XmlDocument操作XML进行查询、增加、修改、删除、保存应用的实例(转载)
- java 解析/操作 xml 几种常用方式 xml的增加/删除/修改
- DataList分页、增加、删除、修改实例
- ASP.NET MVC3 实例(六) 增加、修改和删除操作(二)
- ASP.NET MVC3 实例(六) 增加、修改和删除操作(二)
- 使用Revit API增加/删除Ribbon控件
- csdn 在c++ builder中,使用treeview实现对xml文档增加删除修改和查询等基本操作
- 使用JAVA代码来模拟线性链表的相关操作(增加,删除,插入及查找等)
- libmemcached1.0.2 C/C++ API使用实例、测试及修改
- 6个Linux chkconfig命令实例 - 增加,删除,查看和修改services的自动启动选项
- ASP.NET MVC3 实例(六) 增加、修改和删除操作(一)
- oracle中使用alter table来增加、删除、修改列的语法
- ASP.NET MVC3 实例(六) 增加、修改和删除操作(一)