Hbase API 学习1——实现建表、增、删、查等操作

1、代码如下

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.regionserver.ScanOptions;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.yarn.webapp.view.Html;

import java.io.IOException;
import java.util.Scanner;

public class test {
    public static void main(String[] args) throws IOException {
        System.out.println("开始进行连接Hbase数据库");
        //System.setProperty("hadoop.home.dir", "/home/hadoop001/app/hadoop-2.6.0-cdh5.7.0");
        Configuration conf = HBaseConfiguration.create();
        Connection connection = ConnectionFactory.createConnection(conf);
        Admin admin = connection.getAdmin();
        System.out.println("已经连接上了Hbase数据库");

        try {
            System.out.println("正在获取命名空间Myschool,如果获取不到,就会执行创建...");
            admin.getNamespaceDescriptor("Myschool");
        } catch (Exception ex){    // 所有异常的父类,处理所有异常的
            System.out.println("没有获取命名空间Myschool,开始进行创建...");
            NamespaceDescriptor myschool = NamespaceDescriptor.create("Myschool").build();
            admin.createNamespace(myschool);
            System.out.println("创建命名空间Myschool成功");
        }

        //创建数据表
        TableName tableName = TableName.valueOf("Myschool:stuinfo");   //表需要建立在命名空间里面, tablename,拿到表名
        boolean b = admin.tableExists(tableName);
        System.out.println("正在检测Myschool中是否有stuinfo表");
        // 如果表存在
        if(b==true)
        {
            System.out.println("Myschool中有stuinfo表,开始提取数据【1001】");
            String rowkey = "1001";   // 按条件提取
            Get get = new Get(Bytes.toBytes(rowkey));
            Result result = connection.getTable(tableName).get(get);    //提取到的所有数据用result 变量接受
            if (result.isEmpty())    // 如果结果如空
            {
                System.out.println("Myschool中有stuinfo表,目前没有提取到数据【1001】");
                System.out.println("开始执行插入1001这条数据");
                // 如果没有存在1001的数据
                //插入一条新的数据
                Put put = new Put(Bytes.toBytes(rowkey));    //默认,给一个行键1002,  注意!要转类型
                String family = "info";        // 列族
                String columnname = "name";    // 列名
                String value = "张三";           // 值
                put.addColumn(Bytes.toBytes(family), Bytes.toBytes(columnname), Bytes.toBytes(value));
                connection.getTable(tableName).put(put);
                System.out.println("【1001】这条数据插入成功!");
            } else {
                System.out.println("Myschool中有stuinfo表,已经提取到数据【1001,开始输出");
                // 提取1001的数据, 并输出(对结果进行遍历)
                for (Cell cell : result.rawCells()) {
                    System.out.println("rowkey:" + Bytes.toString(CellUtil.cloneRow(cell)));
                    System.out.println("Family:" + Bytes.toString(CellUtil.cloneFamily(cell)));
                    System.out.println("columnName:" + Bytes.toString(CellUtil.cloneQualifier(cell)));
                    System.out.println("value:" + Bytes.toString(CellUtil.cloneValue(cell)));
                }
                System.out.println("输出完毕!!");
            }
        }
        else{
            HTableDescriptor hTableDescriptor = new HTableDescriptor(tableName);    // 建表, 将表名放在括号里,作为参数传入
            HColumnDescriptor hColumnDescriptor = new HColumnDescriptor("info");   // 创建列组
            hTableDescriptor.addFamily(hColumnDescriptor);
            admin.createTable(hTableDescriptor);
        }
    }
}

2、查看hbase

查看命名空间:
list_namespace

查看命名空间‘Myshool’下的表‘stuinfo’
scan'Myschool:stuinfo'

查看的数据(带中文)
scan'Myschool:stuinfo',{FORMATTER=>'toString'}

查看行键为1001的数据(带中文)
get'Myschool:stuinfo','1001',{FORMATTER=>'toString'}

 

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值