一,前言

二,HBaseDDL

三,HBaseDML

正文

一,前言

  一般情况下不会直接在Shell对Hbase进行操作,而是通过提高的API,我们先对Java的API进行介绍。

二,HBaseDDL

  如下所示就是HBaseDDL的简单操作:

package cn.edu360.hbase.demo;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.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.regionserver.BloomType;
import org.junit.Before;
import org.junit.Test;/***  *  1、构建连接*  2、从连接中取到一个表DDL操作工具admin*  3、admin.createTable(表描述对象);*  4、admin.disableTable(表名);5、admin.deleteTable(表名);6、admin.modifyTable(表名,表描述对象);    *  * @author hunter.d**/
public class HbaseClientDDL {Connection conn = null;@Beforepublic void getConn() throws Exception{// 构建一个连接对象Configuration conf = HBaseConfiguration.create(); // 会自动加载hbase-site.xmlconf.set("hbase.zookeeper.quorum", "hdp-01:2181,hdp-02:2181,hdp-03:2181");conn = ConnectionFactory.createConnection(conf);}/*** DDL* @throws Exception */@Testpublic void testCreateTable() throws Exception{// 从连接中构造一个DDL操作器Admin admin = conn.getAdmin();// 创建一个表定义描述对象HTableDescriptor hTableDescriptor = new HTableDescriptor(TableName.valueOf("user_info"));// 创建列族定义描述对象HColumnDescriptor hColumnDescriptor_1 = new HColumnDescriptor("base_info");hColumnDescriptor_1.setMaxVersions(3); // 设置该列族中存储数据的最大版本数,默认是1
        HColumnDescriptor hColumnDescriptor_2 = new HColumnDescriptor("extra_info");// 将列族定义信息对象放入表定义对象中
        hTableDescriptor.addFamily(hColumnDescriptor_1);hTableDescriptor.addFamily(hColumnDescriptor_2);// 用ddl操作器对象:admin 来建表
        admin.createTable(hTableDescriptor);// 关闭连接
        admin.close();conn.close();}/*** 删除表* @throws Exception */@Testpublic void testDropTable() throws Exception{Admin admin = conn.getAdmin();// 停用表admin.disableTable(TableName.valueOf("user_info"));// 删除表admin.deleteTable(TableName.valueOf("user_info"));admin.close();conn.close();}// 修改表定义--添加一个列族
    @Testpublic void testAlterTable() throws Exception{Admin admin = conn.getAdmin();// 取出旧的表定义信息HTableDescriptor tableDescriptor = admin.getTableDescriptor(TableName.valueOf("user_info"));// 新构造一个列族定义HColumnDescriptor hColumnDescriptor = new HColumnDescriptor("other_info");hColumnDescriptor.setBloomFilterType(BloomType.ROWCOL); // 设置该列族的布隆过滤器类型// 将列族定义添加到表定义对象中
        tableDescriptor.addFamily(hColumnDescriptor);// 将修改过的表定义交给admin去提交admin.modifyTable(TableName.valueOf("user_info"), tableDescriptor);admin.close();conn.close();}}

三,HBaseDML

  如下所示就是HbaseDML的简单操作:

package cn.edu360.hbase.demo;import java.util.ArrayList;
import java.util.Iterator;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellScanner;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Get;
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.client.Table;
import org.apache.hadoop.hbase.util.Bytes;
import org.junit.Before;
import org.junit.Test;public class HbaseClientDML {Connection conn = null;@Beforepublic void getConn() throws Exception{// 构建一个连接对象Configuration conf = HBaseConfiguration.create(); // 会自动加载hbase-site.xmlconf.set("hbase.zookeeper.quorum", "hdp-01:2181,hdp-02:2181,hdp-03:2181");conn = ConnectionFactory.createConnection(conf);}/*** 增* 改:put来覆盖* @throws Exception */@Testpublic void testPut() throws Exception{// 获取一个操作指定表的table对象,进行DML操作Table table = conn.getTable(TableName.valueOf("user_info"));// 构造要插入的数据为一个Put类型(一个put对象只能对应一个rowkey)的对象Put put = new Put(Bytes.toBytes("001"));put.addColumn(Bytes.toBytes("base_info"), Bytes.toBytes("username"), Bytes.toBytes("张三"));put.addColumn(Bytes.toBytes("base_info"), Bytes.toBytes("age"), Bytes.toBytes("18"));put.addColumn(Bytes.toBytes("extra_info"), Bytes.toBytes("addr"), Bytes.toBytes("北京"));Put put2 = new Put(Bytes.toBytes("002"));put2.addColumn(Bytes.toBytes("base_info"), Bytes.toBytes("username"), Bytes.toBytes("李四"));put2.addColumn(Bytes.toBytes("base_info"), Bytes.toBytes("age"), Bytes.toBytes("28"));put2.addColumn(Bytes.toBytes("extra_info"), Bytes.toBytes("addr"), Bytes.toBytes("上海"));ArrayList<Put> puts = new ArrayList<>();puts.add(put);puts.add(put2);// 插进去
        table.put(puts);table.close();conn.close();}/*** 循环插入大量数据* @throws Exception */@Testpublic void testManyPuts() throws Exception{Table table = conn.getTable(TableName.valueOf("user_info"));ArrayList<Put> puts = new ArrayList<>();for(int i=0;i<100000;i++){Put put = new Put(Bytes.toBytes(""+i));put.addColumn(Bytes.toBytes("base_info"), Bytes.toBytes("username"), Bytes.toBytes("张三"+i));put.addColumn(Bytes.toBytes("base_info"), Bytes.toBytes("age"), Bytes.toBytes((18+i)+""));put.addColumn(Bytes.toBytes("extra_info"), Bytes.toBytes("addr"), Bytes.toBytes("北京"));puts.add(put);}table.put(puts);}/*** 删* @throws Exception */@Testpublic void testDelete() throws Exception{Table table = conn.getTable(TableName.valueOf("user_info"));// 构造一个对象封装要删除的数据信息Delete delete1 = new Delete(Bytes.toBytes("001"));Delete delete2 = new Delete(Bytes.toBytes("002"));delete2.addColumn(Bytes.toBytes("extra_info"), Bytes.toBytes("addr"));ArrayList<Delete> dels = new ArrayList<>();dels.add(delete1);dels.add(delete2);table.delete(dels);table.close();conn.close();}/*** 查* @throws Exception */@Testpublic void testGet() throws Exception{Table table = conn.getTable(TableName.valueOf("user_info"));Get get = new Get("002".getBytes());Result result = table.get(get);// 从结果中取用户指定的某个key的valuebyte[] value = result.getValue("base_info".getBytes(), "age".getBytes());System.out.println(new String(value));System.out.println("-------------------------");// 遍历整行结果中的所有kv单元格CellScanner cellScanner = result.cellScanner();while(cellScanner.advance()){Cell cell = cellScanner.current();byte[] rowArray = cell.getRowArray();  //本kv所属的行键的字节数组byte[] familyArray = cell.getFamilyArray();  //列族名的字节数组byte[] qualifierArray = cell.getQualifierArray();  //列名的字节数据byte[] valueArray = cell.getValueArray(); // value的字节数组
            System.out.println("行键: "+new String(rowArray,cell.getRowOffset(),cell.getRowLength()));System.out.println("列族名: "+new String(familyArray,cell.getFamilyOffset(),cell.getFamilyLength()));System.out.println("列名: "+new String(qualifierArray,cell.getQualifierOffset(),cell.getQualifierLength()));System.out.println("value: "+new String(valueArray,cell.getValueOffset(),cell.getValueLength()));}table.close();conn.close();}/*** 按行键范围查询数据* @throws Exception */@Testpublic void testScan() throws Exception{Table table = conn.getTable(TableName.valueOf("user_info"));// 包含起始行键,不包含结束行键,但是如果真的想查询出末尾的那个行键,那么,可以在末尾行键上拼接一个不可见的字节(\000)Scan scan = new Scan("10".getBytes(), "10000\001".getBytes());ResultScanner scanner = table.getScanner(scan);Iterator<Result> iterator = scanner.iterator();while(iterator.hasNext()){Result result = iterator.next();// 遍历整行结果中的所有kv单元格CellScanner cellScanner = result.cellScanner();while(cellScanner.advance()){Cell cell = cellScanner.current();byte[] rowArray = cell.getRowArray();  //本kv所属的行键的字节数组byte[] familyArray = cell.getFamilyArray();  //列族名的字节数组byte[] qualifierArray = cell.getQualifierArray();  //列名的字节数据byte[] valueArray = cell.getValueArray(); // value的字节数组
                System.out.println("行键: "+new String(rowArray,cell.getRowOffset(),cell.getRowLength()));System.out.println("列族名: "+new String(familyArray,cell.getFamilyOffset(),cell.getFamilyLength()));System.out.println("列名: "+new String(qualifierArray,cell.getQualifierOffset(),cell.getQualifierLength()));System.out.println("value: "+new String(valueArray,cell.getValueOffset(),cell.getValueLength()));}System.out.println("----------------------");}}}

转载于:https://www.cnblogs.com/tashanzhishi/p/10917920.html

HBase 学习(三) JavaAPI的使用相关推荐

  1. 2021年大数据HBase(三):HBase数据模型!!!【建议收藏】

    全网最详细的大数据HBase文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 前言 Hbase数据模型 术语: 系列历史文章 2021年大 ...

  2. AJPFX学习笔记JavaAPI之String类

    学习笔记JavaAPI之String类 [size=10.5000pt]一.所属包java.lang.String,没有子类.特点:一旦被初始化就不可以被改变. 创建类对象的两种方式: String ...

  3. Hbase学习笔记(概念和搭建)

    Hbase学习笔记 1.hbase的基本介绍 简介 hbase是bigtable的开源java版本,是建立在hdfs之上,提供给高可靠性,高性能,列存储,可伸缩,实时读写的nosql的数据库系统,它介 ...

  4. 【HBase学习笔记-尚硅谷-Java API shell命令 谷粒微博案例】

    HBase学习笔记 HBase 一.HBase简介 1.HBase介绍 2.HBase的逻辑结构和物理结构 3.数据模型 4.基本架构 二.快速入门 1.配置HBase 2.命令 三.API 1.获取 ...

  5. HBase学习01--Hbase的安装

    HBase学习01–Hbase的安装 一.单机模式: 1.1 解压软件包 tar -zxvf hbase-1.1.3-bin.tar.gz 1.2 配置JAVA_HOME环境变量 cd /usr/lo ...

  6. Hbase学习文档(超详细单机安装)

    Hbase学习文档(超详细单机安装) 一.前言 1.1简述 本文分为五个部分:linux主机名的设置.jdk的安装.hadoop的安装.单机模式下hbase的安装.hbase的shell常用命令及ja ...

  7. 统计学习三要素 模型+策略+算法

    统计学习方法都是由模型. 策略和算法构成的. 即统计学习方法由三要素构成, 可以简单地表示为:方法=模型+策略+算法 模型 统计学习首要考虑的问题是学习什么样的模型. 在监督学习过程中, 模型就是所要 ...

  8. 深度学习三巨头也成了大眼萌,这个一键转换动画电影形象的网站竟因「太火」而下线...

    机器之心报道 作者:魔王.杜伟 想不想在动画电影中拥有自己的角色?这个网站一键满足你的需求,不过竟因流量太大成本过高而下线. 近期热映的电影<花木兰>总是让人回想起 1998 年上映的同名 ...

  9. 2020届 AAAI Fellow名单新鲜出炉!!!深度学习三巨头终于齐聚

    点击上方"深度学习技术前沿",选择"星标"公众号 资源干货,第一时间送达 AAAI 是国际人工智能领域最权威的学术组织,Fellow 是该学会给予会员的最高荣誉 ...

  10. HBase学习指南之HBase原理和Shell使用

    HBase学习指南之HBase原理和Shell使用 参考资料: 1.https://www.cnblogs.com/nexiyi/p/hbase_shell.html,hbase shell 转载于: ...

最新文章

  1. 枚举--遍历搜索空间的例子:熄灯问题
  2. Xshell 6 提示 要继续使用此程序,您必须应用最新的更新
  3. linux通过ftp自动上传文件到服务器,Linux系统通过FTP上传文件到云服务器
  4. 四十三、Scrapy 爬取前程无忧51jobs
  5. postman进阶之Newman,从安装到使用到填坑,不废话
  6. [js] 请写一个性能最好的深度克隆对象的方法
  7. jetty xml解析
  8. 【LeetCode笔记】263. 丑数(Java、迭代)
  9. 戏说前端 JavaScript 之『防抖节流』基础知识
  10. 前景检测算法(十三)--KDE2000
  11. 中电信总工:我国将在2011底出现IP短缺
  12. Lenovo y50-70 1080P 10.15.2 修改驱动 更新驱动
  13. Windows Server 2003 AGP纹理加速无法打开问题可行的解决方案
  14. 在 Ubuntu 中安装 Firefox
  15. Shake Shack上海第7家门店开业
  16. Python基础篇(九)-- 正则表达式
  17. 在家远程控制(远程桌面)到公司的电脑
  18. 演练VC中的common一族
  19. 【midomi】Android下最强音乐搜索工具
  20. java派单系统平台源码完整版 带说明

热门文章

  1. grub2配置原理分析
  2. 学计算机学的想死,“我不是学习机器,真的好想死”
  3. ssm 新建拦截器_拦截器在springboot项目和ssm架构项目的应用
  4. pytorch torch.rand
  5. Spark RDD Action
  6. Oracle日期操作函数
  7. vhdl语言入门_初学Chisel语言,看这篇就够了:最方便简洁的入门资料整理
  8. vue路由1.0_【Vue】路由
  9. vSphere 7.0 GA正式版发布
  10. Java基础学习总结(38)——Lombok(消除冗长的 java 代码)的使用和原理及安装、入门使用