hbase的Java基本操作

建表,建列簇操作

  1. private static Connection connection;
  2. private static Admin admin;
  3.  
  4. public static void createTable(String tableName, String[] fields) throws IOException {
  5. if(admin.tableExists(TableName.valueOf(tableName)))
  6. {
  7. deleteTable(tableName);
  8. }
  9. //2.TableDescriptorBuilder.newBuilder构建表描述构建器
  10. TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName));
  11. for (int i=0;i<fields.length;i++)
  12. {
  13. //3.创建列簇构造描述器
  14. ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(fields[i]));
  15. //4.构建列簇描述
  16. ColumnFamilyDescriptor cfDes = columnFamilyDescriptorBuilder.build();
  17. //建立表与列簇的关联关系
  18. tableDescriptorBuilder.setColumnFamily(cfDes);
  19. }
  20. TableDescriptor tableDescriptor = tableDescriptorBuilder.build();
  21. admin.createTable(tableDescriptor);
  22. }
  23. public static void main(String[] args) throws IOException {
  24. //用HBaseConfiguration.create();创建HBase的配置
  25. Configuration configuration = HBaseConfiguration.create();
  26. //用ConnectionFactory.createConnection创建HBase()连接
  27. connection = ConnectionFactory.createConnection(configuration);
  28. // 创建表,要给予HBase获取Admin对象
  29. admin = connection.getAdmin();
  30. String tablename = "WATER_BILL";
  31. //1.创建表和列
  32. String[] filed = {"H1", "H2", "H3"};
  33. createTable(tablename, filed);
  34. }

添加数据,指定表名,列簇列名,以及rowkey和对应的value

  1. //添加数据
  2. public static void addRecord(String tableName, String row, String[] fields, String[] values) throws IOException {
  3. Table table = connection.getTable(TableName.valueOf(tableName));
  4. String []column=new String[110];
  5. String columnFamily="";
  6. for(int i=0;i<fields.length;i++)
  7. {
  8. String []split=fields[i].split(":");
  9. column[i]=split[1];
  10. columnFamily=split[0];
  11. }
  12. Put put = new Put(Bytes.toBytes(row));
  13. for(int i=0;i<values.length;i++)
  14. {
  15. put.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(column[i]),Bytes.toBytes(values[i]));
  16. }
  17. //5.使用htable表执行put操作
  18. table.put(put);
  19. //关闭htable表对象
  20. table.close();
  21. }
  22.  
  23. public static void main(String[] args) throws IOException {
  24. //用HBaseConfiguration.create();创建HBase的配置
  25. Configuration configuration = HBaseConfiguration.create();
  26. //用ConnectionFactory.createConnection创建HBase()连接
  27. connection = ConnectionFactory.createConnection(configuration);
  28. // 创建表,要给予HBase获取Admin对象
  29. admin = connection.getAdmin();
  30. String tablename = "WATER_BILL";
  31. //1.创建表和列
  32. // String[] filed = {"H1", "H2", "H3"};
  33. // createTable(tablename, filed);
  34.  
  35. //2.向表tableName、行row(用S_Name表示)和字符串数组fields指定的单元格中添加对应的数据values。
  36. // 其中,fields中每个元素如果对应的列族下还有相应的列限定符的话,用“columnFamily:column”表示。
  37. // 例如,同时向“Math”、“Computer Science”、“English”三列添加成绩时,
  38. // 字符串数组fields为{“Score:Math”, ”Score:Computer Science”, ”Score:English”},数组values存储这三门课的成绩。
  39. String[] fields = {"H1:S_NO", "H1:S_Name", "H1:S_Sex", "H1:S_Age"};
  40. String[] values = {"2015001", "Zhangsan", "male", "23"};
  41. String row = "Zhangsan";
  42. addRecord(tablename, row, fields, values);
  43. }

查看表中某rowkey的列簇下的所有值,或者单个列簇:列名的值

  1. public static void scanColumn(String tableName,String rowKey, String column) throws IOException {
  2. Table table = connection.getTable(TableName.valueOf(tableName));
  3. Get get = new Get(rowKey.getBytes());
  4. if(column.contains(":"))
  5. {
  6. //查询指定rowkey和列簇下的指定列名
  7. String[] split = column.split(":");
  8. get.addColumn(Bytes.toBytes(split[0]),Bytes.toBytes(split[1]));
  9. Result result = table.get(get);
  10. byte[] value = result.getValue(Bytes.toBytes(split[0]), Bytes.toBytes(split[1]));
  11. if(Bytes.toString(value)!=null)
  12. System.out.println(Bytes.toString(value));
  13. else
  14. System.out.println("null");
  15. }
  16. else
  17. {
  18. //查询指定rowkey和列簇下的所有数据
  19. get.addFamily(column.getBytes());
  20. Result result = table.get(get);
  21. Cell[] cells = result.rawCells();
  22. for (Cell cell:cells)
  23. {
  24. //获取列簇名称
  25. String cf = Bytes.toString(cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength());
  26. //获取列的名称
  27. String colunmName = Bytes.toString(cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength());
  28. //获取值
  29. String value = Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());
  30. if(value!=null)
  31. System.out.println(cf+":"+colunmName+"=>"+value);
  32. else
  33. System.out.println(cf+":"+colunmName+"=>"+"null");
  34. }
  35. }
  36. table.close();
  37. }
  38.  
  39. public static void main(String[] args) throws IOException {
  40. //用HBaseConfiguration.create();创建HBase的配置
  41. Configuration configuration = HBaseConfiguration.create();
  42. //用ConnectionFactory.createConnection创建HBase()连接
  43. connection = ConnectionFactory.createConnection(configuration);
  44. // 创建表,要给予HBase获取Admin对象
  45. admin = connection.getAdmin();
  46. String tablename = "WATER_BILL";
  47. //1.创建表和列
  48. // String[] filed = {"H1", "H2", "H3"};
  49. // createTable(tablename, filed);
  50.  
  51. //2.向表tableName、行row(用S_Name表示)和字符串数组fields指定的单元格中添加对应的数据values。
  52. // 其中,fields中每个元素如果对应的列族下还有相应的列限定符的话,用“columnFamily:column”表示。
  53. // 例如,同时向“Math”、“Computer Science”、“English”三列添加成绩时,
  54. // 字符串数组fields为{“Score:Math”, ”Score:Computer Science”, ”Score:English”},数组values存储这三门课的成绩。
  55. // String[] fields = {"H1:S_NO", "H1:S_Name", "H1:S_Sex", "H1:S_Age"};
  56. // String[] values = {"2015001", "Zhangsan", "male", "23"};
  57. // String row = "Zhangsan";
  58. // addRecord(tablename, row, fields, values);
  59.  
  60. //3.浏览表tableName某一列的数据,如果某一行记录中该列数据不存在,则返回null。
  61. // 要求当参数column为某一列族名称时,如果底下有若干个列限定符,则要列出每个列限定符代表的列的数据;
  62. // 当参数column为某一列具体名称(例如“Score:Math”)时,只需要列出该列的数据。
  63. String column = "H1:S_Name";
  64. String rowkey = "Zhangsan";
  65. scanColumn(tablename, rowkey, column);
  66. }

修改rowkey下的对应的单独的列簇:列名的值

  1. public static void modifyData(String tableName,String rowkey,String column,String value) throws IOException {
  2. Table table = connection.getTable(TableName.valueOf(tableName));
  3. //修改操作
  4. Put put = new Put(Bytes.toBytes(rowkey));
  5. String[] split = column.split(":");
  6. String columnFamily=split[0];
  7. String columnName=split[1];
  8. put.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(columnName),Bytes.toBytes(value));
  9. table.put(put);
  10. //查看修改后的数据
  11. Get get = new Get(rowkey.getBytes());
  12. get.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(columnName));
  13. Result result = table.get(get);
  14. byte[] value2 = result.getValue(Bytes.toBytes(columnFamily),Bytes.toBytes(columnName));
  15. if(Bytes.toString(value2)!=null)
  16. System.out.println(columnFamily+":"+columnName+"=>"+Bytes.toString(value2));
  17. else
  18. System.out.println("null");
  19. System.out.println("修改成功!!");
  20. table.close();
  21. }
  22.  
  23. public static void main(String[] args) throws IOException {
  24. //用HBaseConfiguration.create();创建HBase的配置
  25. Configuration configuration = HBaseConfiguration.create();
  26. //用ConnectionFactory.createConnection创建HBase()连接
  27. connection = ConnectionFactory.createConnection(configuration);
  28. // 创建表,要给予HBase获取Admin对象
  29. admin = connection.getAdmin();
  30. String tablename = "WATER_BILL";
  31. //1.创建表和列
  32. // String[] filed = {"H1", "H2", "H3"};
  33. // createTable(tablename, filed);
  34.  
  35. //2.向表tableName、行row(用S_Name表示)和字符串数组fields指定的单元格中添加对应的数据values。
  36. // 其中,fields中每个元素如果对应的列族下还有相应的列限定符的话,用“columnFamily:column”表示。
  37. // 例如,同时向“Math”、“Computer Science”、“English”三列添加成绩时,
  38. // 字符串数组fields为{“Score:Math”, ”Score:Computer Science”, ”Score:English”},数组values存储这三门课的成绩。
  39. // String[] fields = {"H1:S_NO", "H1:S_Name", "H1:S_Sex", "H1:S_Age"};
  40. // String[] values = {"2015001", "Zhangsan", "male", "23"};
  41. // String row = "Zhangsan";
  42. // addRecord(tablename, row, fields, values);
  43.  
  44. //3.浏览表tableName某一列的数据,如果某一行记录中该列数据不存在,则返回null。
  45. // 要求当参数column为某一列族名称时,如果底下有若干个列限定符,则要列出每个列限定符代表的列的数据;
  46. // 当参数column为某一列具体名称(例如“Score:Math”)时,只需要列出该列的数据。
  47. // String column = "H1:S_Name";
  48. // String rowkey = "Zhangsan";
  49. // scanColumn(tablename, rowkey, column);
  50.  
  51. //4.modifyData(S修改表tableName,行row(可以用学生姓名S_Name表示),
  52. // 列column指定的单元格的数据tring tableName, String row, String column)
  53. String colum = "H1:S_Name";
  54. String rowkey = "Zhangsan";
  55. String value = "XiaoFengZai";
  56. modifyData(tablename, rowkey, colum, value);
  57. }

删除指定的rowkey内容

  1. public static void deleteRow(String tableName, String row) throws IOException {
  2. Table table = connection.getTable(TableName.valueOf(tableName));
  3. //删除一条rowkey记录
  4. Delete delete = new Delete(Bytes.toBytes(row));
  5. table.delete(delete);
  6. table.close();
  7. }
  8.  
  9. public static void main(String[] args) throws IOException {
  10. //用HBaseConfiguration.create();创建HBase的配置
  11. Configuration configuration = HBaseConfiguration.create();
  12. //用ConnectionFactory.createConnection创建HBase()连接
  13. connection = ConnectionFactory.createConnection(configuration);
  14. // 创建表,要给予HBase获取Admin对象
  15. admin = connection.getAdmin();
  16. String tablename = "WATER_BILL";
  17. //1.创建表和列
  18. // String[] filed = {"H1", "H2", "H3"};
  19. // createTable(tablename, filed);
  20.  
  21. //2.向表tableName、行row(用S_Name表示)和字符串数组fields指定的单元格中添加对应的数据values。
  22. // 其中,fields中每个元素如果对应的列族下还有相应的列限定符的话,用“columnFamily:column”表示。
  23. // 例如,同时向“Math”、“Computer Science”、“English”三列添加成绩时,
  24. // 字符串数组fields为{“Score:Math”, ”Score:Computer Science”, ”Score:English”},数组values存储这三门课的成绩。
  25. // String[] fields = {"H1:S_NO", "H1:S_Name", "H1:S_Sex", "H1:S_Age"};
  26. // String[] values = {"2015001", "Zhangsan", "male", "23"};
  27. // String row = "Zhangsan";
  28. // addRecord(tablename, row, fields, values);
  29.  
  30. //3.浏览表tableName某一列的数据,如果某一行记录中该列数据不存在,则返回null。
  31. // 要求当参数column为某一列族名称时,如果底下有若干个列限定符,则要列出每个列限定符代表的列的数据;
  32. // 当参数column为某一列具体名称(例如“Score:Math”)时,只需要列出该列的数据。
  33. // String column = "H1:S_Name";
  34. // String rowkey = "Zhangsan";
  35. // scanColumn(tablename, rowkey, column);
  36.  
  37. //4.modifyData(S修改表tableName,行row(可以用学生姓名S_Name表示),
  38. // 列column指定的单元格的数据tring tableName, String row, String column)
  39. // String colum = "H1:S_Name";
  40. // String rowkey = "Zhangsan";
  41. // String value = "XiaoFengZai";
  42. // modifyData(tablename, rowkey, colum, value);
  43.  
  44. //5.删除指定的rowkey内容
  45. String rowkey="Zhangsan";
  46. deleteRow(tablename,rowkey);
  47.  
  48. admin.close();
  49. connection.close();
  50. }

删除指定的表

  1. public void deleteTable(String tablename)throws IOException
  2. {
  3. TableName tableName=TableName.valueOf("WATER_BILL");
  4. if(admin.tableExists(tableName))
  5. {
  6. admin.disableTable(tableName);
  7. admin.deleteTable(tableName);
  8. }
  9. }

hbase的Java基本操作的更多相关文章

  1. hbase使用-java操作

      .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courie ...

  2. Hbase配置java客户端

    1.修改windows配置文件 C:\WINDOWS\system32\drivers\etc\hosts 将远程hbase和zookeeper主机的IP地址加进去 54.0.88.53      H ...

  3. 大数据学习路线分享-Hbase shell的基本操作完整流程

    HBase的命令行工具,最简单的接口,适合HBase管理使用,可以使用shell命令来查询HBase中数据的详细情况.安装完HBase之后,启动hadoop集群(利用hdfs存储),启动zookeep ...

  4. Hbase框架原理及相关的知识点理解、Hbase访问MapReduce、Hbase访问Java API、Hbase shell及Hbase性能优化总结

    转自:http://blog.csdn.net/zhongwen7710/article/details/39577431 本blog的内容包含: 第一部分:Hbase框架原理理解 第二部分:Hbas ...

  5. 5 hbase-shell + hbase的java api

    本博文的主要内容有 .HBase的单机模式(1节点)安装 .HBase的单机模式(1节点)的启动 .HBase的伪分布模式(1节点)安装  .HBase的伪分布模式(1节点)的启动    .HBase ...

  6. HBase的Java Api连接失败的问题及解决方法

    分布式方式部署的HBase,启动正常,Shell操作正常,使用HBase的Java Api操作时总是连接失败,信息如下: This server is in the failed servers li ...

  7. hbase-shell + hbase的java api

    本博文的主要内容有 .HBase的单机模式(1节点)安装 .HBase的单机模式(1节点)的启动 .HBase的伪分布模式(1节点)安装   .HBase的伪分布模式(1节点)的启动    .HBas ...

  8. HBase的java操作,最新API。(查询指定行、列、插入数据等)

    关于HBase环境搭建和HBase的原理架构,请见笔者相关博客. 1.HBase对java有着较优秀的支持,本文将介绍如何使用java操作Hbase. 首先是pom依赖: <dependency ...

  9. Hbase关于Java常用API举例

    1. HBase相关对Admin操作的的API封装在HBaseAdmin中,封装了HBase常用操作的API 使用方法: pom.xml <!-- https://mvnrepository.c ...

随机推荐

  1. WebSphere MQ常用命令及配置

    WebSphere MQ常用命令及配置 (2012-06-23 23:09:16) 标签: mq命令 杂谈 分类: MQ [导读]WebSphere MQ常用命令及配置 一,队列管理命令 1,创建队列 ...

  2. 深度神经网络conda环境下载

    介绍 因为使用conda下载数据有时候因为网络问题下载非常慢,因此我把conda的环境备份好,到时可以直接使用conda的conda create -n 新环境名字 –clone 环境的路径 , 直接 ...

  3. Spring boot +Thymeleaf 搭建springweb

    对接天猫精灵的时候需要有网关服务器方提供几个页面,服务器已经有了,spring boot的 纯后台的,就加了Thymeleaf   jar包添加几个页面跳转 maven配置 <!-- 引入thy ...

  4. 6.Exchanger-交换机

  5. [BJDCTF 2nd]文件探测

    [BJDCTF 2nd]文件探测 这两天刷题碰到了一道稍微有难度的题,记录一下,有一些点是未被掌握到的. home.php: <?php setcookie("y1ng", ...

  6. JS节流与防抖

    节流 节流,走字面上理解就是节约流量.比作水就话就是让水流的少一点,节约一点.对应到JS当中,就是在scroll事件和mousemove事件的时候,浏览器会很频繁的被触发,会导致对应的事件也会被很频繁 ...

  7. CentOS 8 安装 VirtualBox 增强功能

    环境介绍 Machine: NUC8i5BEK OS: macOS Catalina 10.15.6 VirtualBox: 6.1.12 r139181 (Qt5.6.3) CentOS: 8.2. ...

  8. MySQL手注之盲注(布尔)

    布尔注入: 当我们在注入的过程中输入的语句在页面没有数据返回点,这就需要利用布尔型盲注一步步来猜取想要的数据.(盲注分为布尔盲注和时间盲注) 盲注常用函数: length()  返回字符串的长度, 可 ...

  9. PHP_加密解密字符串

    PHP_加密解密字符串.php <?php //加解密字符串函数,可以加密中文 /* //加密 echo $encode = authcode('爱迪生', 'ENCODE', '3'); // ...

  10. Python-在不在判断 in 和 in判断协议- in __contains__

    in 判断元素是否在序列中, 可以查看 in == is 区别 __contians__ 如果是对象则调用对象中的 __contains__方法 class BeiMenChuiXue: def __ ...