第1关:JavaAPI获取表的列

本关任务:列出HBase中所有表的名字,输出表是否存在,表是否可用。

代码部分

package step1;

import java.util.ArrayList;

import java.util.List;

import org.apache.hadoop.conf.*;

import org.apache.hadoop.hbase.*;

import org.apache.hadoop.hbase.client.*;

import org.apache.hadoop.hbase.util.*;

public class Task {

 public void showTableList() throws Exception {

        /********* Begin *********/

        Configuration conf=HBaseConfiguration.create();

        Connection conn=ConnectionFactory.createConnection(conf);

        Admin admin=conn.getAdmin();

        List<TableDescriptor> tableDescriptors = admin.listTableDescriptors();

        for(TableDescriptor tableDescriptor:tableDescriptors){

            System.out.println("Table:"+tableDescriptor.getTableName());

            System.out.println("\texists:" + admin.tableExists(tableDescriptor.getTableName()));

            System.out.println("\tenabled:" + admin.isTableEnabled(tableDescriptor.getTableName()));

        }

        /********* End *********/

    }

}

第2关:修改表

本关任务:修改指定表的结构。

代码部分

package step2;

import java.io.IOException;

import org.apache.hadoop.conf.*;

import org.apache.hadoop.hbase.*;

import org.apache.hadoop.hbase.client.*;

import org.apache.hadoop.hbase.io.compress.Compression;

import org.apache.hadoop.hbase.util.*;

public class Task {

    public void updateTables()throws Exception{

        /********* Begin *********/

        Configuration conf=HBaseConfiguration.create();

        Connection conn=ConnectionFactory.createConnection(conf);

        Admin admin=conn.getAdmin();

        TableName tablename1=TableName.valueOf("t_emp2");

        ColumnFamilyDescriptorBuilder buildFamily1 = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("data"));//构建Builder对象

        buildFamily1.setBlocksize(1024*1024); //修改列族的bolcksize为1M

        buildFamily1.setBlockCacheEnabled(false); //关闭缓存

        buildFamily1.setCompressionType(Compression.Algorithm.GZ); //设置列族的压缩格式为GZ

        TableName tablename2=TableName.valueOf("t_dept2");

        ColumnFamilyDescriptorBuilder buildFamily2 = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("data1"));//构建Builder对象

        buildFamily2.setMinVersions(2);//设置列族data1的最小单元时间版本为2

        buildFamily2.setMaxVersions(5);//最大时间版本为5

        buildFamily2.setInMemory(true); //开启列族data1的激进缓存策略

        buildFamily2.setTimeToLive(60*60*24);//设置列族data1的生存时间为一天

        ColumnFamilyDescriptor family1 = buildFamily1.build();//构建Family对象

        admin.modifyColumnFamily(tablename1, family1);//调用修改方法,方法接收两个参数:TableName,ColumnFamilyDescriptor

        admin.deleteColumnFamily(tablename1, Bytes.toBytes("data1"));//删除表t_dept2的列族data

        ColumnFamilyDescriptor family2 = buildFamily2.build();//构建Family对象

        admin.modifyColumnFamily(tablename2, family2);//调用修改方法,方法接收两个参数:TableName,ColumnFamilyDescriptor

        admin.deleteColumnFamily(tablename2, Bytes.toBytes("data"));//删除表t_emp2的列族data1

        /********* End *********/

    }

}

第3关:禁用表、启用表、删除表

本关任务:使用Java代码禁用表、启用表、删除表。

代码部分

package step3;

import java.io.IOException;

import org.apache.hadoop.conf.*;

import org.apache.hadoop.hbase.*;

import org.apache.hadoop.hbase.client.*;

import org.apache.hadoop.hbase.util.*;

public class Task {

    /**

     * 刪除表

     * @param tableName 表名

     * @throws Exception

     */

    public void deleteTable(String tableName)throws Exception{

        /********* Begin *********/

        Configuration config = new Configuration();

        Connection conn = ConnectionFactory.createConnection(config);

        Admin admin = conn.getAdmin();

        TableName tablename = TableName.valueOf(tableName);

        admin.disableTable(tablename);

        admin.deleteTable(tablename);

        /********* End *********/

    }

   

    /**

     * 创建表

     * @param tableName  表名

     * @param columnNames 列族的动态数组

     * @throws Exception

     */

    public void createTable(String tableName,String... columnNames)throws Exception{

        /********* Begin *********/

        Configuration conf = HBaseConfiguration.create(); //使用create()静态方法就可以得到Configuration对象

        Connection conn = ConnectionFactory.createConnection(conf); //config为前文的配置对象

        Admin admin = conn.getAdmin(); //使用连接对象获取Admin对象

        TableDescriptorBuilder test_teacher_info = TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName));

        for(String s: columnNames){

            ColumnFamilyDescriptor of = ColumnFamilyDescriptorBuilder.of(s);

            test_teacher_info.setColumnFamily(of);

        }

        //构建

        TableDescriptor build = test_teacher_info.build();

        admin.createTable(build);

        /********* End *********/

    }

   

    /**

     * 启用表

     * @param tableName

     * @throws Exception

     */

    public void enableTable(String tableName) throws Exception{

        /********* Begin *********/

        Configuration conf = HBaseConfiguration.create(); //使用create()静态方法就可以得到Configuration对象

        Connection conn = ConnectionFactory.createConnection(conf); //config为前文的配置对象

        Admin admin = conn.getAdmin(); //使用连接对象获取Admin对象

        TableName demoName = TableName.valueOf(Bytes.toBytes(tableName));

        admin.enableTable(demoName);

        /********* End *********/

    }

   

    /**

     * 禁用表

     * @param tableName

     */

    public void disableTable(String tableName)throws Exception{

        /********* Begin *********/

        Configuration conf = HBaseConfiguration.create(); //使用create()静态方法就可以得到Configuration对象

        Connection conn = ConnectionFactory.createConnection(conf); //config为前文的配置对象

        Admin admin = conn.getAdmin(); //使用连接对象获取Admin对象

        TableName testName = TableName.valueOf(Bytes.toBytes(tableName));

        admin.disableTable(testName);

        /********* End *********/

    }

}

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐