当前位置:   article > 正文

HBase 开发:使用Java操作HBase 第1关:创建表_第1关:创建表

第1关:创建表

为了完成本关任务,你需要掌握:1.如何使用Java连接HBase数据库,2.如何使用Java代码在HBase中创建表。

如何使用Java连接HBase数据库

Java连接HBase需要两个类:

  • HBaseConfiguration
  • ConnectionFactory

HBaseConfiguration

要连接HBase我们首先需要创建Configuration对象,这个对象我们需要通过HBaseConfigurationHBase配置)对象来进行创建,HBaseConfiguration看名字我们就能猜到它的用途:读取指定路径下hbase-site.xmlhbase-default.xml的配置信息

具体用法:

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

ConnectionFactory

获取到连接对象Connextion我们就算连接上了HBase了,怎么获取呢?

通过ConnectionFactory(连接工厂)的方法我们就能获取到Connection(连接对象)了。

具体用法:

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

使用这两个步骤就能完成连接HBase了。

注意:在1.0之前的版本HBase是使用HBaseAdminHTable等来操作HBase的,但是在1.0之后的版本中这些被弃用了,新的客户端API更加干净简洁,本文使用的HBase2.1.1版本(18年10月发布)的,

创建表

要创建表我们需要首先创建一个Admin对象,然后让它来创建一张表:

  1. Admin admin = connection.getAdmin(); //使用连接对象获取Admin对象
  2. TableName tableName = TableName.valueOf("test");//定义表名
  3. HTableDescriptor htd = new HTableDescriptor(tableName);//定义表对象
  4. HColumnDescriptor hcd = new HColumnDescriptor("data");//定义列族对象
  5. htd.addFamily(hcd); //添加
  6. admin.createTable(htd);//创建表

HBase2.X创建表

上述创建表的方法是HBase1.X版本的方式,而在HBase2.X的版本中创建表使用了新的API,创建表关键代码如下:

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

2.X版本中主要是HTableDescriptor对象被弃用,取而代之的是TableDescriptor对象,TableDescriptor对象通过TableDescriptorBuilder构建;

  1. TableName tableName = TableName.valueOf("test");
  2. TableDescriptorBuilder tableDescriptor = TableDescriptorBuilder.newBuilder(tableName);

然后添加列簇方法变更:

  1. ColumnFamilyDescriptor family = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("data")).build();//构建列族对象
  2. tableDescriptor.setColumnFamily(family); //设置列族

最后由Admin对象进行创建表操作:

admin.createTable(tableDescriptor.build());

值得咱们注意的是,如果你的HBase环境是1.X的那么你只能使用第一种方式来创建表,如果是2.X的版本,那么两种方式你都可以使用(本实训使用的 HBase2.1.1版本,所以两种都可用)。

编程要求

好了,到你啦,使用本关知识,在右侧编辑器begin-end处补充代码,请你编写一个Java程序,在HBase中创建表dept,emp,列都为:data

  1. package step1;
  2. import java.io.IOException;
  3. import org.apache.hadoop.conf.Configuration;
  4. import org.apache.hadoop.hbase.HBaseConfiguration;
  5. import org.apache.hadoop.hbase.HColumnDescriptor;
  6. import org.apache.hadoop.hbase.HTableDescriptor;
  7. import org.apache.hadoop.hbase.TableName;
  8. import org.apache.hadoop.hbase.client.Admin;
  9. import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;
  10. import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;
  11. import org.apache.hadoop.hbase.client.Connection;
  12. import org.apache.hadoop.hbase.client.ConnectionFactory;
  13. import org.apache.hadoop.hbase.client.Get;
  14. import org.apache.hadoop.hbase.client.Put;
  15. import org.apache.hadoop.hbase.client.Result;
  16. import org.apache.hadoop.hbase.client.ResultScanner;
  17. import org.apache.hadoop.hbase.client.Scan;
  18. import org.apache.hadoop.hbase.client.Table;
  19. import org.apache.hadoop.hbase.client.TableDescriptor;
  20. import org.apache.hadoop.hbase.client.TableDescriptorBuilder;
  21. import org.apache.hadoop.hbase.util.Bytes;
  22. /**
  23. * HBase 1.0 version of ExampleClient that uses {@code Connection},
  24. * {@code Admin} and {@code Table}.
  25. */
  26. public class Task{
  27. public void createTable()throws Exception{
  28. /********* Begin *********/
  29. Configuration config = HBaseConfiguration.create();
  30. Connection connection = ConnectionFactory.createConnection(config);
  31. try {
  32. // Create table
  33. Admin admin = connection.getAdmin();
  34. try {
  35. TableName tableName = TableName.valueOf("dept");
  36. // 新 API 构建表
  37. // TableDescriptor 对象通过 TableDescriptorBuilder 构建;
  38. TableDescriptorBuilder tableDescriptor =
  39. TableDescriptorBuilder.newBuilder(tableName);
  40. ColumnFamilyDescriptor family =
  41. ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("data")).build();// 构建列族对象
  42. tableDescriptor.setColumnFamily(family); // 设置列族
  43. admin.createTable(tableDescriptor.build()); // 创建表
  44. TableName emp = TableName.valueOf("emp");
  45. // 新 API 构建表
  46. // TableDescriptor 对象通过 TableDescriptorBuilder 构建;
  47. TableDescriptorBuilder empDescriptor =
  48. TableDescriptorBuilder.newBuilder(emp);
  49. ColumnFamilyDescriptor empfamily =
  50. ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("data")).build();// 构建列族对象
  51. empDescriptor.setColumnFamily(empfamily); // 设置列族
  52. admin.createTable(empDescriptor.build()); // 创建表
  53. } finally {
  54. admin.close();
  55. }
  56. } finally {
  57. connection.close();
  58. }
  59. /********* End *********/
  60. }
  61. }

测试说明

注意:

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

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

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

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

需要我们重新stop-dfs.shstop-hbase.sh,然后在重启。

  1. start-dfs.sh
  2. start-hbase.sh
  3. hadoop fs -ls /hbase

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/772026
推荐阅读
相关标签
  

闽ICP备14008679号