头歌 HBase 开发:使用Java操作HBase

头歌 HBase 开发:使用Java操作HBase

第1关:创建表

本关任务:使用Java代码在HBase中创建表。

测试说明

注意:

点击测评之前,请先开启Hadoop(start-dfs.sh)和HBase(start-hbase.sh),并且需要等待HBase初始化完成(20秒左右),否则无法在HBase中创建表。

怎么查看HBase初始化成功了呢?

输入hadoop fs -ls /hbase有如下结果即可:

如果启动过程中出现: datanode running as process 214. Stop it first.说明Hadoop的进程还没有被杀死。

需要我们重新stop-dfs.sh 和stop-hbase.sh,然后在重启就可以了。

代码命令行:

start-dfs.sh
start-hbase.sh
package step1;

import java.io.IOException;
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.ColumnFamilyDescriptor;
import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
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.client.TableDescriptor;
import org.apache.hadoop.hbase.client.TableDescriptorBuilder;
import org.apache.hadoop.hbase.util.Bytes;


public class Task{
	
	public void createTable()throws Exception{
		/********* Begin *********/
         Configuration config = HBaseConfiguration.create(); //使用create()静态方法就可以得到Configuration对象
        Connection connection = ConnectionFactory.createConnection(config); //config为前文的配置对象

		Admin admin = connection.getAdmin(); //使用连接对象获取Admin对象
        TableName tableName = TableName.valueOf("dept");//定义表名
//TableDescriptor对象通过TableDescriptorBuilder构建;
        TableDescriptorBuilder tableDescriptor = TableDescriptorBuilder.newBuilder(tableName);
        ColumnFamilyDescriptor family = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("data")).build();//构建列族对象
        tableDescriptor.setColumnFamily(family);//设置列族
        admin.createTable(tableDescriptor.build());//创建表


        tableName = TableName.valueOf("emp");//定义表名
//TableDescriptor对象通过TableDescriptorBuilder构建;
        tableDescriptor = TableDescriptorBuilder.newBuilder(tableName);
        family = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("data")).build();//构建列族对象
        tableDescriptor.setColumnFamily(family);//设置列族
        admin.createTable(tableDescriptor.build());//创建表

		/********* End *********/
	}
}

第2关:添加数据
题目本关任务:使用Java代码向HBase集群中创建表并添加数据。

代码命令行:

start-dfs.sh
start-hbase.sh
package step2;

import java.io.IOException;
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.ColumnFamilyDescriptor;
import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
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.client.TableDescriptor;
import org.apache.hadoop.hbase.client.TableDescriptorBuilder;
import org.apache.hadoop.hbase.util.Bytes;

public class Task {

	public void insertInfo()throws Exception{
		/********* Begin *********/
        Configuration config = HBaseConfiguration.create(); //使用create()静态方法就可以得到Configuration对象
        Connection connection = ConnectionFactory.createConnection(config); //config为前文的配置对象

		Admin admin = connection.getAdmin(); //使用连接对象获取Admin对象
        TableName tableName = TableName.valueOf("tb_step2");//定义表名
//TableDescriptor对象通过TableDescriptorBuilder构建;
        TableDescriptorBuilder tableDescriptor = TableDescriptorBuilder.newBuilder(tableName);
        ColumnFamilyDescriptor family = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("data")).build();//构建列族对象
        tableDescriptor.setColumnFamily(family);//设置列族
        admin.createTable(tableDescriptor.build());//创建表


        Table table = connection.getTable(tableName);//获取Table对象
        try {
            byte[] row = Bytes.toBytes("row1");    //定义行
            Put put = new Put(row);                //创建Put对象
            byte[] columnFamily = Bytes.toBytes("data");    //列簇
            byte[] qualifier = Bytes.toBytes(String.valueOf(1)); //列
            byte[] value = Bytes.toBytes("张三丰");    //值
            put.addColumn(columnFamily, qualifier, value);
            table.put(put);        //向表中添加数据

            row = Bytes.toBytes("row2");    //定义行
            put = new Put(row);                //创建Put对象
            columnFamily = Bytes.toBytes("data");    //列簇
            qualifier = Bytes.toBytes(String.valueOf(2)); //列
            value = Bytes.toBytes("张无忌");    //值
            put.addColumn(columnFamily, qualifier, value);
            table.put(put);        //向表中添加数据
        } finally {
            //使用完了要释放资源
            table.close();
        }

		/********* End *********/
	}
}
创作不易,如果能解决您的问题,麻烦您点个赞,一键三连!!!

第3关:获取数据

代码命令行:

start-dfs.sh
start-hbase.sh
package step3;

import java.io.IOException;
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.ColumnFamilyDescriptor;
import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
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.client.TableDescriptor;
import org.apache.hadoop.hbase.client.TableDescriptorBuilder;
import org.apache.hadoop.hbase.util.Bytes;


public class Task {

	public void queryTableInfo()throws Exception{
		/********* Begin *********/
        Configuration config = HBaseConfiguration.create(); //使用create()静态方法就可以得到Configuration对象
        Connection connection = ConnectionFactory.createConnection(config); //config为前文的配置对象

		Admin admin = connection.getAdmin(); //使用连接对象获取Admin对象
        TableName tableName = TableName.valueOf("t_step3");//定义表名


        Table table = connection.getTable(tableName);//获取Table对象

        //获取数据
        Get get = new Get(Bytes.toBytes("row1"));    //定义get对象
        Result result = table.get(get);            //通过table对象获取数据
        // System.out.println("Result: " + result);
        //很多时候我们只需要获取“值” 这里表示获取 data:1 列族的值
        byte[] valueBytes = result.getValue(Bytes.toBytes("data"), Bytes.toBytes("1")); //获取到的是字节数组
        //将字节转成字符串
        String valueStr = new String(valueBytes,"utf-8");
        System.out.println("value:" + valueStr);




        /**
            这里是批量显示,换表了
        */
        tableName = TableName.valueOf("table_step3");//定义表名
        table = connection.getTable(tableName);//获取Table对象

        Scan scan = new Scan();
        ResultScanner scanner = table.getScanner(scan);
        try {
            for (Result scannerResult: scanner) {
                // System.out.println("Scan: " + scannerResult);
                byte[] row = scannerResult.getRow();
                System.out.println("rowName:" + new String(row,"utf-8"));
            }
        } finally {
            scanner.close();
        }		
		
		
		
		/********* End *********/
	}
	
}

第4关:删除表

代码命令行:

start-dfs.sh
start-hbase.sh
package step4;

import java.io.IOException;
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.ColumnFamilyDescriptor;
import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
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.client.TableDescriptor;
import org.apache.hadoop.hbase.client.TableDescriptorBuilder;
import org.apache.hadoop.hbase.util.Bytes;


public class Task {
	
	
	public void deleteTable()throws Exception{
		/********* Begin *********/
        Configuration config = HBaseConfiguration.create(); //使用create()静态方法就可以得到Configuration对象
        Connection connection = ConnectionFactory.createConnection(config); //config为前文的配置对象
		Admin admin = connection.getAdmin(); //使用连接对象获取Admin对象
        

		TableName tableName = TableName.valueOf("t_step4");
        admin.disableTable(tableName);    //禁用表
        admin.deleteTable(tableName);    //删除表
		
		/********* End *********/
	}
}
 创作不易,如果能解决您的问题,麻烦您点个赞,一键三连!!!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲代码的苦13

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值