`
usezhou
  • 浏览: 12852 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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要查询的表

示例:

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

分享到:
评论

相关推荐

    hbase用于查询客户端工具

    这使得Web应用、Python、Ruby等其他语言的客户端可以轻松地与HBase集成。REST Gateway是基于JAX-RS(Java API for RESTful Web Services)实现的,提供了标准的CRUD(Create, Read, Update, Delete)操作。 3. **...

    nosql-实验三HBase管理工具和客户端.docx

    常见的 HBase 客户端有 Java 客户端、Python 客户端等。 在 Java 中,可以使用 HBase 的 Java API 来访问和操作 HBase 数据库。例如,用户可以使用 HConnection 对象来连接 HBase 数据库,然后使用 HTable 对象来...

    最新版linux hbase-2.3.3-client-bin.tar.gz

    首先,HBase 2.3.3客户端提供了丰富的API,支持Java、Python、C++等多种编程语言,使得开发者可以方便地在各种应用中集成HBase功能。在Linux环境下,通常使用Java API进行开发,因为其具有完善的文档支持和强大的...

    HbaseJavaWeb实例

    在本项目中,“HbaseJavaWeb实例”是一个基于Java Web技术实现的HBase数据库操作应用。这个项目旨在提供一个交互式的平台,用户可以通过Web界面执行HBase中的基本操作,包括添加数据、删除数据、更新数据以及查询...

    【Java毕业设计】可视化毕业设计:数据处理(MapReduce)+数据展示(hbase+java+echarts).zip

    在本项目中,Java将作为实现MapReduce作业的主要编程语言,同时也用于编写与HBase交互的客户端程序,以及可能的服务器端逻辑。通过Java,开发者可以灵活地构建各种数据处理和展示功能。 4. **ECharts**: ECharts...

    基于springboot集成hbase过程解析

    SpringBoot则是一个基于Java的现代Web框架,提供了简洁、灵活、模块化的开发体验。将SpringBoot与HBase集成,可以实现高效、可扩展的数据存储和处理解决方案。 知识点1:HBase的特点 HBase是一种基于Hadoop的...

    使用客户端squirrel client连接phoenix查询HBase数据

    ### 使用客户端 Squirrel Client 连接 Phoenix 查询 HBase 数据 #### 概述 在大数据处理领域,Apache HBase 是一种分布式的、面向列的开源数据库系统,它建立在Hadoop之上,提供了高可靠性、高性能、面向列的数据...

    HBase配置

    配置`hbase.regionserver.heapsize`和`hbase.master.heapsize`以设定RegionServer和Master的Java堆大小,根据集群规模适当调整。 7. **Region分裂策略** `hbase.hregion.max.filesize`定义一个Region的最大大小,...

    HBase配置属性

    HBase是一种开源的非关系型分布式数据库(NoSQL),它建立在Hadoop文件系统之上,使用Java编写,主要为了处理大量的稀疏数据集设计。HBase具有良好的水平扩展性,能够支持海量数据的存储和快速访问。HBase的配置属性...

    hbase-1.2.6-bin.tar.gz

    HBase通常用于实时数据分析,如Web日志分析、用户行为追踪、物联网(IoT)数据存储、搜索引擎索引等场景,尤其适合那些对读写性能要求高、数据量庞大的应用。 总之,HBase 1.2.6是一个经过时间验证的稳定版本,为大...

    apache_hbase_reference_guide.pdf

    HBase的安全配置部分指导用户如何确保HBase的安全性,如使用HTTPS为Web UI提供安全连接,使用Kerberos进行认证,以及如何为Apache HBase配置安全客户端访问。 ### 总结 整个Apache HBase参考指南是HBase用户不可或...

    可视化毕业设计:数据处理(MapReduce)+数据展示(hbase+java+echarts).zip

    此外,Java也可以用来编写HBase的客户端程序,进行数据的增删查改操作。 4. **ECharts**: ECharts是由百度开发的一个基于JavaScript的数据可视化库,支持丰富的图表类型,如柱状图、折线图、饼图等,提供交互式的...

    springboot集成phoenix+hbase

    你可以通过`phoenix-queryserver`启动Query Server,然后使用Phoenix的SQL客户端(如Phoenix SQL shell)验证连接和查询功能。 总结,Spring Boot集成Phoenix和HBase可以提供一个高效且易于管理的NoSQL数据库访问...

    经过测试,总结出可运行成功的C#For HBase示例代码

    HBase的REST接口允许非Java客户端(如C#)通过HTTP协议与HBase通信,这对于跨平台的开发非常方便。开发者可以预期示例代码会涵盖如何设置HBase REST服务器,建立HTTP请求,执行CRUD操作(Create, Read, Update, ...

    hbase权威指南源码

    - **HBase客户端**:提供了Java API和命令行接口(HBase Shell),用于与HBase交互,包括创建表、插入数据、查询数据等操作。 - **Scan**:用于扫描表中的多行数据,可设置过滤器以筛选出特定结果。 - **Get**和*...

    spring-boot-starter-hbase自定义的spring-boot的hbasestarter

    在Java开发中,Spring Boot以其简洁、高效的特性,已经成为Web开发框架的首选之一。它通过自动配置和启动器(starter)来简化应用的搭建与运行。而当我们涉及到大数据存储与处理时,Apache HBase作为NoSQL数据库的一...

    08 安装配置hbase0.94.9

    - 修改 `hbase-env.sh` 文件,设置 `JAVA_HOME` 为你的Java安装路径,例如 `/usr/java/jdk1.6.0_45`,并添加 `HBASE_CLASSPATH` 以包含Hadoop的配置文件。 - 在 `hbase-site.xml` 中配置HBase的相关属性,如: - ...

    apache_hbase_reference_guide(官网).pdf

    - **HBase客户端安全访问**,包括访问控制列表(ACLs)、安全用户认证和授权等。 ### 6. HBase的架构和高级特性 - **区域服务器(RegionServer)的大小**,提供了调整RegionServer大小的建议和准则。 - **列族数量...

Global site tag (gtag.js) - Google Analytics