文档章节

Java hbase的DDL和DML操作

爱运动的小乌龟
 爱运动的小乌龟
发布于 2017/05/30 23:39
字数 655
阅读 64
收藏 0

说明:需要在项目里面添加要操作的hbase的hbase-site.xml配置文件,

项目所需要的jar或依赖下载链接:

http://mvnrepository.com/artifact/org.apache.hbase

winutils.xml下载链接:

http://pan.baidu.com/s/1gfQkCuB

一、代码:

package examples.cn.lct.offline4.hbase.common;

import java.io.IOException;
import java.util.Map.Entry;
import java.util.NavigableMap;

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.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.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class TableOperationApp {
    static Logger logger = LoggerFactory.getLogger(TableOperationApp.class);
    
    public static void main(String[] args) throws Exception {
        //消除命令行的error,该erro没什么影响
        System.setProperty("hadoop.home.dir", "G:\\lct\\mis\\bigdatatest\\lib");
        
        //新的api中,使用TableName对象表示表名称
        TableName tableName = TableName.valueOf("t5");
        //列族名称
        String familyName = "c1"; 
        
        
        //使用HBaseConfiguration.create()作用是加载配置文件,会加载hbase自带的hbase-default.xml和hbase-site.xml文件
        Configuration conf = HBaseConfiguration.create();

        //获得一个操作HBase的连接
        Connection connection = ConnectionFactory.createConnection(conf);
        
        //tableDDL(tableName, familyName, connection);
        
        //DML由类Table完成,原来用HTable类
        Table table = connection.getTable(tableName);
        byte[] rowkey = Bytes.toBytes("r1");
        
        //putData(table, rowkey);
        
        //getData(table, rowkey);
        
        //scanData(table);
        
        //deleteData(table, rowkey);
        
        
        //程序员记得要关闭table
        table.close();
        
        //程序员一定记得关闭连接
        connection.close();
    }

    public static void deleteData(Table table, byte[] rowkey) throws IOException {
        Delete delete = new Delete(rowkey);
        delete.addColumn(Bytes.toBytes("c1"), Bytes.toBytes("q1"));
        table.delete(delete);
    }

    public static void scanData(Table table) throws IOException {
        Scan scan = new Scan();
        //scan.setStartRow(Bytes.toBytes("r3"));
        //scan.setStopRow(Bytes.toBytes("r5"));
        scan.setTimeRange(1, 4);
        ResultScanner scanner = table.getScanner(scan);
        for (Result result : scanner) {
            printResult(result);
        }
    }

    /**
     * 使用get读取记录
     * @param table
     * @param rowkey
     * @throws IOException
     */
    public static void getData(Table table, byte[] rowkey) throws IOException {
        Get get = new Get(rowkey);
        Result result = table.get(get);
        System.out.println(result);
        
        //使用复杂的map迭代方式查看内容
        //printResult(result);

        //直接调用api取值
        //simpleGetValue(result);
    }

    public static void printResult(Result result) {
        //行键
        String rowkey = Bytes.toString(result.getRow());
        //三层嵌套map结构Map<family,Map<qualifier,Map<timestamp,value>>>
        NavigableMap<byte[], NavigableMap<byte[], NavigableMap<Long, byte[]>>> map1 = result.getMap();
        
        for (Entry<byte[], NavigableMap<byte[], NavigableMap<Long, byte[]>>> entry1 : map1.entrySet()) {
            //列族
            String family = Bytes.toString(entry1.getKey());
            for (Entry<byte[], NavigableMap<Long, byte[]>> entry2 : entry1.getValue().entrySet()) {
                //列限定符
                String qualifier = Bytes.toString(entry2.getKey());
                for(Entry<Long, byte[]> entry3 : entry2.getValue().entrySet()){
                    //时间戳
                    Long timestamp = entry3.getKey();
                    //值
                    String value = Bytes.toString(entry3.getValue());
                    System.out.println(rowkey+"\t"+family+"\t"+qualifier+"\t"+timestamp+"\t"+value);
                }
            }
        }
    }

    public static void simpleGetValue(Result result) {
        byte[] bytesValue = result.getValue(Bytes.toBytes("c1"), Bytes.toBytes("q1"));
        String v1 = new String(bytesValue);
        String v2 = Bytes.toString(bytesValue);
        System.out.println(v2);
    }

    public static void putData(Table table, byte[] rowkey) throws IOException {
        Put put = new Put(rowkey);
        byte[] family = Bytes.toBytes("c1");
        byte[] qualifier = Bytes.toBytes("q1");
        byte[] value = Bytes.toBytes("v1");
        put.addColumn(family, qualifier, value);
        table.put(put);
    }

    public static void tableDDL(TableName tableName, String familyName, Connection connection) throws IOException {
        //DDL由类Admin完成,原来用HBaseAdmin类
        Admin admin = connection.getAdmin();
        
        //td里面含有创建表所需要的各种信息
        HTableDescriptor td = new HTableDescriptor(tableName);
        //cd里面含有列族定义需要的各种信息
        HColumnDescriptor cd = new HColumnDescriptor(familyName);
        td.addFamily(cd);
        if (admin.tableExists(tableName)) {
            logger.info("开始disable表{}", tableName.getNameAsString());
            admin.disableTable(tableName);
            logger.info("开始delete表{}", tableName.getNameAsString());
            admin.deleteTable(tableName);
        }
        logger.info("开始create表{}", tableName.getNameAsString());
        admin.createTable(td);
        logger.info("开始truncate表{}", tableName.getNameAsString());
        admin.disableTable(tableName);
        admin.truncateTable(tableName, false);
        //程序员一定记得关闭admin
        admin.close();
    }
}
 

© 著作权归作者所有

爱运动的小乌龟
粉丝 3
博文 149
码字总数 43760
作品 0
朝阳
私信 提问
好程序员大数据分享:Hbase精解

好程序员大数据分享:Hbase精解,为什么有hbase?hbase是什么?Hbase的架构。   一、 为什么有hbase?   数据量越来越大,传统的关系型数据库不能满足存储和查询的需求。而hive虽然能满足存...

好程序员IT
05/27
16
0
hadoop hive hbase 入门学习 (二)

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// hadoop 自学系列 hado......

curiousby
2015/03/08
0
0
win环境下 hbase 数据库搭建流程

Hbase单机版安装使用教程 Hbase介绍请参考技术支持文档,这里只说明Hbase 的安装和使用 第一步:下载安装Hbase数据库 链接:链接:https://pan.baidu.com/s/1si6Nokvz8xkUsmefsRlntQ 密码:k...

lijiaweizuishuai
2018/05/28
0
0
HBase实践 | HBase ThriftServer Kerberos认证

1.前置 用户可以通过ThriftServer来访问HBase服务,它的特点如下: ThriftServer代理用户访问HBase服务返回操作结果,用户客户端不需要直接跟HBase进行通信 用户可以使用java/python/php/c++...

封神
2018/11/27
0
0
hbase无法启动

输入bin/start-hbase.sh后出现如下错误: /home/ted1orelee0308/hbase-1.2.6/bin/hbase: line 412: /usr/lib/jvm/java1.8.0_121/bin/java: No such file or directory /home/ted1orelee0308/......

hbbb
2017/09/27
166
1

没有更多内容

加载失败,请刷新页面

加载更多

哪些情况下适合使用云服务器?

我们一直在说云服务器价格适中,具备弹性扩展机制,适合部署中小规模的网站或应用。那么云服务器到底适用于哪些情况呢?如果您需要经常原始计算能力,那么使用独立服务器就能满足需求,因为他...

云漫网络Ruan
今天
5
0
Java 中的 String 有没有长度限制

转载: https://juejin.im/post/5d53653f5188257315539f9a String是Java中很重要的一个数据类型,除了基本数据类型以外,String是被使用的最广泛的了,但是,关于String,其实还是有很多东西...

低至一折起
今天
17
0
OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
昨天
11
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
昨天
9
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部