专栏首页生如夏花的个人博客Hbase(五) JavaApi操作Hbase

Hbase(五) JavaApi操作Hbase

Hbase(五): JavaApi操作Hbase

依赖

<dependencies>
    <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-client</artifactId>
        <version>0.98.17-hadoop2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-server</artifactId>
        <version>0.98.17-hadoop2</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.1</version>
        <scope>test</scope>
    </dependency>
</dependencies>

依赖的版本应该和Hbase版本一致

Hbase版本可以通过连接Hbase client使用version命令查看

定义静态配置变量

public static Configuration conf;
static{
    conf = HBaseConfiguration.create();
    conf.set("hbase.zookeeper.quorum","hadoop1:2181");
}

由于配置变量都是一样的,可以定义成静态变量方便使用

需要注意的是需要在本地做主机ip映射,mac的hostname文件在etc目录下

创建表

//创建表
@Test
public void createTable() throws IOException {
    HBaseAdmin admin = new HBaseAdmin(conf);
    HTableDescriptor htd = new HTableDescriptor(TableName.valueOf("users"));
    HColumnDescriptor c1 = new HColumnDescriptor("c1");
    c1.setMaxVersions(3);
    //HColumnDescriptor c2 = new HColumnDescriptor("c2");
    htd.addFamily(c1);
    //htd.addFamily(c2);
    admin.createTable(htd);
    admin.close();
}

插入数据

/**
 * 插入数据
 */
@Test
public void insertData() throws IOException {
    HTable table = new HTable(conf,"table");
    Put put = new Put(Bytes.toBytes("key_1"));
    put.add(Bytes.toBytes("c1"),Bytes.toBytes("name"),Bytes.toBytes("zhangsan"));
    table.put(put);
    table.close();
}

单例模式插入大量数据

/**
 * 单例模式插入大量数据
 * @throws IOException
 */
@Test
public void insertDatas() throws IOException {
    Long state = System.currentTimeMillis();
    HTable table = new HTable(conf, "table2");
    List<Put> puts = new ArrayList<Put>();
    for (int i = 1;i <= 1000000; i++){
        Put put = new Put(Bytes.toBytes("key_" + i));
        put.add(Bytes.toBytes("c1"),Bytes.toBytes("name"+i),Bytes.toBytes("zhangsan"+i));
        puts.add(put);
        if ( i % 10000 == 0){
            table.put(puts);
            puts = new ArrayList<Put>();
        }
    }
    table.put(puts);
    table.close();
    Long over = System.currentTimeMillis();
    System.out.println("用时"+(over-state)/1000+"秒");
}

获取数据

/**
 * 获取数据
 */
@Test
public void selectData() throws IOException {
    HTable table = new HTable(conf, "table");
    Get get = new Get(Bytes.toBytes("key_1"));
    Result result = table.get(get);
    byte[] bytes = result.getValue(Bytes.toBytes("c1"),Bytes.toBytes("name"));
    String str = Bytes.toString(bytes);
    System.out.println(str);
    table.close();
}

获取数据集

/**
 * 获取数据集
 */
@Test
public void selectDatas() throws IOException {
    int i=1;
    HTable table = new HTable(conf, "table");

        Scan scan = new Scan(Bytes.toBytes("key_1"));
        ResultScanner scanner = table.getScanner(scan);
        Iterator it = scanner.iterator();
        while (it.hasNext()){
            Result result = (Result) it.next();
            byte[] value = result.getValue(Bytes.toBytes("c1"), Bytes.toBytes("name"));
            String str = Bytes.toString(value);
            System.out.println(str);
            i++;
        }

    table.close();
}

删除数据

/**
 * 删除表数据
 * @throws IOException
 */
@Test
public void removeData() throws IOException {
    HTable table = new HTable(conf, "table");
    Delete key_1 = new Delete(Bytes.toBytes("key_1"));
    table.delete(key_1);
    table.close();
}

删除表

/**
 * 删除表
 * @throws IOException
 */
@Test
public void deleteTable() throws IOException{
    HBaseAdmin admin = new HBaseAdmin(conf);
    admin.disableTable(Bytes.toBytes("table1"));
    admin.deleteTable(Bytes.toBytes("table1"));
    admin.close();


}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • java和node.js使用md5算法实现对数据的加密与加盐操作

    密码在数据库当中是如何存储的?明文还是密文? 很显然做为一家负责人的公司密码应该采用密文在数据库中存储 这样做即使数据库被攻破密码采用了加密也不会得到泄露

    许喜朝
  • mybatis-plus自定义sql注入器

    虽然mybats-plus的BaseMapper提供了非常好用,非常多的方法,但是如果我们需要扩充BaseMapper中的方法又该如何实现呢

    许喜朝
  • linux常用操作(基于centos7编写)

    /bin 所有用户可以使用的运行脚本 /sbin 只能root用户使用的运行脚本 /lib 二进制的包 /lib64 64bit二进制包 /dev 设备...

    许喜朝
  • 三位数的排列组合

    题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列...

    猿人谷
  • 减少上班通勤的时间

    2020 年的工作正式开启,大多数开发者的开工方式是云办公。对开发者来说,云办公意味着什么?如何开始云办公?云办公的发展趋势会怎样?基于此,云加社区联手知乎科技...

    云加社区
  • electron-store在webpack打包中的Cannot find module "." 问题

    之前项目中遇到一个问题,使用了脚手架,并且引入了electron-store这个包。在开发模式下是能正常运行的,但是打包后却会包Cannot find modu...

    flytam
  • Python捕获所有异常

    老生常谈了,但是在Pyflake检查出E722错误时有时候又犯老毛病。人年纪大了越来越有老年痴呆倾向 -_- …..

    happy123.me
  • GTA 5真香!哦不,我在用深度学习做自动驾驶

    用深度学习当「外挂」,本文将教你如何用 PyTorch 在GTA 5 中训练自动驾驶模型。

    Amusi
  • Kubernetes 经典命令

    如果想玩玩单机版、集群版 k8s,可参见:基础设施服务k8s快速部署之HA篇,快速助力部署 k8s,还没毕业的都可以部署哟!

    程序猿Damon
  • 中国高校领跑新兴经济体大学排行榜,北大清华蝉联前两名

    WZEARW

扫码关注云+社区

领取腾讯云代金券