栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

HBase学习-----javaAPI详细教程

HBase学习-----javaAPI详细教程

这里进入Hbase的javaAPI章节进行学习,这里我会非常详细的讲述如何创建连接和基础的使用,以及一个小项目的学习。跟随着我往下看

Hbase的javaAPI 一、API

几个主要的Hbase API类和数据模型之间的的对应的关系:

    HbaseConfiguration:最简单的一个饿类,可以在进行连接的时候,指定一些简单的配置,比如URL地址,在哪里找Hbase或者Hbase 的一些配置等等HbaseAdmin类,如果想对Hbase 的表进行一些操作,比如DDL操作(数据定义语言,比如create,drop等),但是hbase没有sql语句,所以这里类比于DDL。修改表结构、创建表、删除表。HTable:和Hbase表进行联系。HTableDescriptor:描述表的结构,表的结构就是列簇。
1.1HbaseAdmin

类:org.apache.hadoop.hbase.client.HbaseAdmin作用:提供一个接口来管理Hbase数据库的恶表信息。它提供的方法包括:创建表,删除 表,列出表项,使表有效或者无效,以及添加或删除表列簇成员等。

1.2HTablleDescriptor

*类:org.apache.hadoop.hbase.HTableDescriptor
*作用;包含了表的名及其对应表的列簇

1.3HColumnDescriptor

*类: org.apache.hadoop.hbase.HCoiumnDescriptoor
*作用:维护着关于列簇的信息,例如版本号,压缩设置等 。他通常在创建表或者 为表添加列簇的时候使用。列簇被创建之后不能直接修改,只能通过删除然后来重新创建的方式。
列簇被删除的时候,列簇里面的数据 也会同时被删除。

1.4HTable

*org.apache.hadoop.hbase.client.Htable
*作用:可以用来和Hbase表直接通信。此方法对于更新

1.5 Result类

*类:org.apache.hadoop.hbase.client.Result
*作用:存储Get或者Scan操作后获取的单行值。使用此类提供的方法可以直接获取值或者各种Map结构(key-value对)。

二、Java代码

看代码详细讲解

public static void main(String[] args) throws Exception{
	//1.创建配置文件,设置Hbase的连接地址
	Configuration cconf=HbaseConfiguration.create()
	conf.set("hbase.zookeeper.quorum", "192.168.3.67:2181,192.168.3.68:2181,192.168.3.69:2181")
	//2.创建连接
	Connection connection = ConnectionFactory.ceateConnection(conf);
	
         Admin admin = connection.getAdmin();

        Table stu = connection.getTable(TableName.valueOf("stu"));
        
        connection.close();

	
}

这里只是简单的进行讲解,下面来看详细的讲解

这里的创建连接就不说了,就是把这里的局部变量变成全局变量即可
 Connection connection;
    Admin admin;
    @BeforeTest
    public void beforeTest() throws Exception{
        //1.创建Hbase配置,使用HbaseConfiguration.create();来进行创建
        Configuration conf = HbaseConfiguration.create();
        conf.set("hbase.zookeeper.quorum", "192.168.3.67:2181,192.168.3.68:2181,192.168.3.69:2181");
        //2.使用 ConnectionFactory.createConnection创建Hbase链接
        connection = ConnectionFactory.createConnection(conf);
        //3.要创建表,需要基于Hbase链接获取admin管理对象
        //要创建表、删除表需要和HMaster进行链接,所以需要有一个admin对象
        admin = connection.getAdmin();
    }

//创建表
//首先我们需要判断表是否存在
    //在Hbase中,需要创建表,需要构建TableDescriptor(表描述器)、
    // ColumnFamilyDescriptor(列蔟描述器),这两个对象不是直接new出来,
    // 是通过builder来创建的

@Test
public void creatTable() throws Exception{
	//首先要get一个admin对象,但是我们在创建连接的时候,已经get过了,这里可以忽略
	//构建表,使用HtableDescriptor,没有我们需要先new一个
	HTableDescirptor testAPI = new HTableDescriptor(TableName.valueOf("TestAPI"));
	//表创建完成以后,这里需要创建表结构,
	//首先创建列簇
	HColumnDescriptor info =  new HColumnDescriptor("info");
	//如果想对列簇进行配置的话,可以使用add】方法
	info.setMaxVerdsion(3);/
	//加入列簇, 给testAPI表添加一个列簇
	testAPI.addFamily(info);
	
	//使用areatTable方法,、把参数传进去
	this.admin.creatTable(testAPI);
}

@Test
//查看表 
public void listTable() throws Exception {
	 TableName[] tableNames = admin.listTableNames();

        for (TableName tableName : tableNames) {
            System.out.println(tableName.getNameAsString());
        }
}

上面查询的只是表的查询,这里来看看表结构的查询

 @Test
    //查看表结构,使用desc方法进行查看
public void descList() throws  Exception{
	//如何判断是getmian还是gettable呢,就看是否和数据有关系。
        // 如果和数据没有关系的话,就用getAdmin()
}

批量写入
    @Test
    
    public void PutAllStu() throws Exception{
        //可能会被多次使用,所以要提取出来
        TableName stu = TableName.valueOf("stu");

        //创建表
        Admin admin = connection.getAdmin();

        //首先要判断这张表
        if(admin.tableExists(stu)){
            //先放一个表结构进去,表结构需要表名,先穿进去表名
            //然后添加一个列簇,列簇又要new一个列簇的结构
            //这里利用的是匿名对象的方式调用
            admin.createTable(new HTableDescriptor(stu)
                    .addFamily(new HColumnDescriptor("info")));

        }
        //对表进行链接
        Table stuTable = connection.getTable(stu);

        ArrayList puts = new ArrayList<>();
        //读取文件,使用BufferedReader来读取
        BufferedReader bufferedReader = new BufferedReader(new FileReader("ddata/students.txt"));

        int clt = 0;
        String line;
        while ((line = bufferedReader.readLine())!=null){
            //把每一列切分
            String[] split = line.split(",");
            String id = split[0];
            String name = split[1];
            String age = split[2];
            String gender = split[3];
            String clazz = split[4];

            Put put = new Put(id.getBytes());
            put.addColumn("info".getBytes(),"name".getBytes(),name.getBytes());
            put.addColumn("info".getBytes(),"age".getBytes(),age.getBytes());
            put.addColumn("info".getBytes(),"gender".getBytes(),gender.getBytes());
            put.addColumn("info".getBytes(),"clazz".getBytes(),clazz.getBytes());

            puts.add(put);
            //这里put了1000次
            // 逐条插入,效率较低
            //    stuTable.put(put);
        }

        //调用put,把put的list传进去
        stuTable.put(puts);
        clt+=1;
        if(clt == 100){
            stuTable.put(puts);
            puts.clear();//清空
            clt = 0;
        }

        bufferedReader.close();


    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/751053.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号