如何通过JAVA客户端访问Hbase
2016-07-14 11:11
302 查看
直接上代码
注意:代码没有什么特殊的地方,但是需要注意 修改程序运行的客户端的hosts文件.对应到hbase运行服务器的ip,比如:192.168.11.111 hbasemaster。
理由: HBase client 初始化连接流程
1.当使用HBase配置创建HTable对象时,最终会得到与RegionServer服务器的连接,使用该连接对RegionServer服务器上的数据操作
2.Client先随机选择连接一台zookeeper建立连接,如果连接建立失败,重新获取与其它zookeeper的连接
3.从zookeeper服务查询region-server主机名,zookeeper会根据RegionServer的负载、状态情况返回一台可用的RegionServer
4.Client端使用该主机名与RegionServer建立连接,如果连接失败,会进行重试,直接到超过重试次数或连接建立成功
代码块
package com.raiyi.app.dao; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.HColumnDescriptor; import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.KeyValue; import org.apache.hadoop.hbase.MasterNotRunningException; import org.apache.hadoop.hbase.ZooKeeperConnectionException; import org.apache.hadoop.hbase.client.Delete; import org.apache.hadoop.hbase.client.Get; import org.apache.hadoop.hbase.client.HBaseAdmin; import org.apache.hadoop.hbase.client.HTable; import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.ResultScanner; import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.util.Bytes; /** * @author Administrator * */ public class BaseOperation { private static final String TABLE_NAME = "userInfo"; public static Configuration conf = null; public HTable table = null; public HBaseAdmin admin = null; static { conf = HBaseConfiguration.create(); conf.set("hbase.zookeeper.quorum","localhost"); conf.set("hbase.zookeeper.property.clientPort", "2181"); conf.set("zookeeper.session.timeout", "2000"); } /** * 创建表 */ public static void creatTable(String tableName, String[] familys) throws Exception { HBaseAdmin admin = new HBaseAdmin(conf); if (admin.tableExists(tableName)) { System.out.println("table already exists!"); } else { HTableDescriptor tableDesc = new HTableDescriptor(tableName); for (int i = 0; i < familys.length; i++) { tableDesc.addFamily(new HColumnDescriptor(familys[i])); } admin.createTable(tableDesc); System.out.println("create table " + tableName + " ok."); } } /** * 删除表 */ public static void deleteTable(String tableName) throws Exception { try { HBaseAdmin admin = new HBaseAdmin(conf); admin.disableTable(tableName); admin.deleteTable(tableName); System.out.println("delete table " + tableName + " ok."); } catch (MasterNotRunningException e) { e.printStackTrace(); } catch (ZooKeeperConnectionException e) { e.printStackTrace(); } } /** * 添加记录 */ public static void addRecord(String tableName, String rowKey, String family, String qualifier, String value) throws Exception { try { HTable table = new HTable(conf, tableName); Put put = new Put(Bytes.toBytes(rowKey)); put.add(Bytes.toBytes(family), Bytes.toBytes(qualifier), Bytes.toBytes(value)); table.put(put); System.out.println("insert recored " + rowKey + " to table " + tableName + " ok."); } catch (IOException e) { e.printStackTrace(); } } /** * 删除记录 */ public static void delRecord(String tableName, String rowKey) throws IOException { HTable table = new HTable(conf, tableName); List list = new ArrayList(); Delete del = new Delete(rowKey.getBytes()); list.add(del); table.delete(list); System.out.println("del recored " + rowKey + " ok."); } /** * 获取某条记录 */ public static void getOneRecord(String tableName, String rowKey) throws IOException { HTable table = new HTable(conf, tableName); Get get = new Get(rowKey.getBytes()); Result rs = table.get(get); for (KeyValue kv : rs.raw()) { System.out.print(new String(kv.getRow()) + " "); System.out.print(new String(kv.getFamily()) + ":"); System.out.print(new String(kv.getQualifier()) + " "); System.out.print(kv.getTimestamp() + " "); System.out.println(new String(kv.getValue())); } } /** * 获取所有记录 */ public static void getAllRecord(String tableName) { try { HTable table = new HTable(conf, tableName); Scan s = new Scan(); ResultScanner ss = table.getScanner(s); for (Result r : ss) { for (KeyValue kv : r.raw()) { System.out.print(new String(kv.getRow()) + " "); System.out.print(new String(kv.getFamily()) + ":"); System.out.print(new String(kv.getQualifier()) + " "); System.out.print(kv.getTimestamp() + " "); System.out.println(new String(kv.getValue())); } } } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] agrs) { try { String tablename = "scores"; String[] familys = { "grade", "course" }; Long start = System.currentTimeMillis(); // BaseOperation.creatTable(tablename, familys); BaseOperation.getOneRecord(tablename, "155226015632015-11"); // // System.out.println("===========show all record========"); // BaseOperation.getAllRecord(tablename); // // System.out.println("===========del one record========"); // BaseOperation.delRecord(tablename, "baoniu"); // BaseOperation.getAllRecord(tablename); // // System.out.println("===========show all record========"); // BaseOperation.getAllRecord(tablename); System.out.println(System.currentTimeMillis()-start); } catch (Exception e) { e.printStackTrace(); } } }
注意:代码没有什么特殊的地方,但是需要注意 修改程序运行的客户端的hosts文件.对应到hbase运行服务器的ip,比如:192.168.11.111 hbasemaster。
理由: HBase client 初始化连接流程
1.当使用HBase配置创建HTable对象时,最终会得到与RegionServer服务器的连接,使用该连接对RegionServer服务器上的数据操作
2.Client先随机选择连接一台zookeeper建立连接,如果连接建立失败,重新获取与其它zookeeper的连接
3.从zookeeper服务查询region-server主机名,zookeeper会根据RegionServer的负载、状态情况返回一台可用的RegionServer
4.Client端使用该主机名与RegionServer建立连接,如果连接失败,会进行重试,直接到超过重试次数或连接建立成功
相关文章推荐
- java获取本地的ip地址
- Java并发原理谈谈
- JAVA正则表达式
- jxl实例
- JavaWeb学习总结(一)——JavaWeb开发入门
- Java并发编程:深入剖析ThreadLocal
- 【Java】大数类BigDecimal及八种舍入模式研究
- Spring整合Mybatis关键配置详解
- Spring Boot 集成Swagger
- Java类的加载、链接和初始化
- java mail 实现邮件发送功能
- Eclipse中的项目导入到Studio中,保留原签名
- spring -boot 搭建学习
- Java之定时任务
- Spring及相关框架知识小汇
- 在java源文件中指定TextView文本显示内容
- 递归删除树形结构的所有子节点(java和mysql实现)
- SpringAOP拦截Controller,Service实现日志管理(自定义注解的方式)
- 【java学习】正则表达式的应用
- Windows Eclipse远程调试hadoop:ExitCodeException exitCode=-1073741515