为了完成本关任务,你需要掌握:1.如何使用Java连接HBase数据库,2.如何使用Java代码在HBase中创建表。
如何使用Java连接HBase数据库
Java连接HBase需要两个类:
- HBaseConfiguration
- ConnectionFactory
HBaseConfiguration
要连接HBase我们首先需要创建Configuration对象,这个对象我们需要通过HBaseConfiguration(HBase配置)对象来进行创建,HBaseConfiguration看名字我们就能猜到它的用途:读取指定路径下hbase-site.xml和hbase-default.xml的配置信息。
具体用法:
Configuration config = HBaseConfiguration.create(); //使用create()静态方法就可以得到Configuration对象
ConnectionFactory
获取到连接对象Connextion我们就算连接上了HBase了,怎么获取呢?
通过ConnectionFactory(连接工厂)的方法我们就能获取到Connection(连接对象)了。
具体用法:
Connection connection = ConnectionFactory.createConnection(config); //config为前文的配置对象
使用这两个步骤就能完成连接HBase了。
注意:在1.0之前的版本HBase是使用HBaseAdmin和HTable等来操作HBase的,但是在1.0之后的版本中这些被弃用了,新的客户端API更加干净简洁,本文使用的HBase是2.1.1版本(18年10月发布)的,
创建表
要创建表我们需要首先创建一个Admin对象,然后让它来创建一张表:
Admin admin = connection.getAdmin(); //使用连接对象获取Admin对象 TableName tableName = TableName.valueOf("test");//定义表名 HTableDescriptor htd = new HTableDescriptor(tableName);//定义表对象 HColumnDescriptor hcd = new HColumnDescriptor("data");//定义列族对象 htd.addFamily(hcd); //添加 admin.createTable(htd);//创建表
HBase2.X创建表
上述创建表的方法是HBase1.X版本的方式,而在HBase2.X的版本中创建表使用了新的API,创建表关键代码如下:
TableName tableName = TableName.valueOf("test");//定义表名 //TableDescriptor对象通过TableDescriptorBuilder构建; TableDescriptorBuilder tableDescriptor = TableDescriptorBuilder.newBuilder(tableName); ColumnFamilyDescriptor family = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("data")).build();//构建列族对象 tableDescriptor.setColumnFamily(family);//设置列族 admin.createTable(tableDescriptor.build());//创建表
在2.X版本中主要是HTableDescriptor对象被弃用,取而代之的是TableDescriptor对象,TableDescriptor对象通过TableDescriptorBuilder构建;
TableName tableName = TableName.valueOf("test"); TableDescriptorBuilder tableDescriptor = TableDescriptorBuilder.newBuilder(tableName);
然后添加列簇方法变更:
ColumnFamilyDescriptor family = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("data")).build();//构建列族对象 tableDescriptor.setColumnFamily(family); //设置列族
最后由Admin对象进行创建表操作:
admin.createTable(tableDescriptor.build());
值得咱们注意的是,如果你的HBase环境是1.X的那么你只能使用第一种方式来创建表,如果是2.X的版本,那么两种方式你都可以使用(本实训使用的 HBase是2.1.1版本,所以两种都可用)。
编程要求
好了,到你啦,使用本关知识,在右侧编辑器begin-end处补充代码,请你编写一个Java程序,在HBase中创建表dept,emp,列都为:data。
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; /** * HBase 1.0 version of ExampleClient that uses {@code Connection}, * {@code Admin} and {@code Table}. */ public class Task{ public void createTable()throws Exception{ /********* Begin *********/ Configuration config = HBaseConfiguration.create(); Connection connection = ConnectionFactory.createConnection(config); try { // Create table Admin admin = connection.getAdmin(); try { TableName tableName = TableName.valueOf("dept"); // 新 API 构建表 // TableDescriptor 对象通过 TableDescriptorBuilder 构建; TableDescriptorBuilder tableDescriptor = TableDescriptorBuilder.newBuilder(tableName); ColumnFamilyDescriptor family = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("data")).build();// 构建列族对象 tableDescriptor.setColumnFamily(family); // 设置列族 admin.createTable(tableDescriptor.build()); // 创建表 TableName emp = TableName.valueOf("emp"); // 新 API 构建表 // TableDescriptor 对象通过 TableDescriptorBuilder 构建; TableDescriptorBuilder empDescriptor = TableDescriptorBuilder.newBuilder(emp); ColumnFamilyDescriptor empfamily = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("data")).build();// 构建列族对象 empDescriptor.setColumnFamily(empfamily); // 设置列族 admin.createTable(empDescriptor.build()); // 创建表 } finally { admin.close(); } } finally { connection.close(); } /********* End *********/ } }
测试说明
注意:
点击测评之前,请先开启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 hadoop fs -ls /hbase
猜你喜欢
网友评论
- 搜索
- 最新文章
- 热门文章