表描述

  1. 该命令返回表的说明。它的语法如下:
  1. hbase> describe 'table name'


下面给出的是对emp表的 describe 命令的输出。

  1. hbase(main):006:0> describe 'emp'
  2. DESCRIPTION
  3. ENABLED
  4. 'emp', {NAME => 'READONLY', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER
  5. => 'ROW', REPLICATION_SCOPE => '0', COMPRESSION => 'NONE', VERSIONS =>
  6. '1', TTL true
  7. => 'FOREVER', MIN_VERSIONS => '0', KEEP_DELETED_CELLS => 'false',
  8. BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}, {NAME
  9. => 'personal
  10. data', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW',
  11. REPLICATION_SCOPE => '0', VERSIONS => '5', COMPRESSION => 'NONE',
  12. MIN_VERSIONS => '0', TTL
  13. => 'FOREVER', KEEP_DELETED_CELLS => 'false', BLOCKSIZE => '65536',
  14. IN_MEMORY => 'false', BLOCKCACHE => 'true'}, {NAME => 'professional
  15. data', DATA_BLO
  16. CK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0',
  17. VERSIONS => '1', COMPRESSION => 'NONE', MIN_VERSIONS => '0', TTL =>
  18. 'FOREVER', K
  19. EEP_DELETED_CELLS => 'false', BLOCKSIZE => '65536', IN_MEMORY =>
  20. 'false', BLOCKCACHE => 'true'}, {NAME => 'table_att_unset',
  21. DATA_BLOCK_ENCODING => 'NO
  22. NE', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', COMPRESSION =>
  23. 'NONE', VERSIONS => '1', TTL => 'FOREVER', MIN_VERSIONS => '0',
  24. KEEP_DELETED_CELLS
  25. => 'false', BLOCKSIZE => '6


修改

  1. alter用于更改现有表的命令。使用此命令可以更改列族的单元,设定最大数量和删除表范围运算符,并从表中删除列家族。

更改列族单元格的最大数目

  1. 下面给出的语法来改变列家族单元的最大数目。
  1. hbase> alter 't1', NAME => 'f1', VERSIONS => 5


在下面的例子中,单元的最大数目设置为5。

  1. hbase(main):003:0> alter 'emp', NAME => 'personal data', VERSIONS => 5
  2. Updating all regions with the new schema...
  3. 0/1 regions updated.
  4. 1/1 regions updated.
  5. Done.
  6. 0 row(s) in 2.3050 seconds


表范围运算符

  1. 使用alter,可以设置和删除表范围,运算符,如MAX_FILESIZEREADONLYMEMSTORE_FLUSHSIZEDEFERRED_LOG_FLUSH等。

设置只读

  1. 下面给出的是语法,是用以设置表为只读。
  1. hbase>alter 't1', READONLY(option)


在下面的例子中,我们已经设置表emp为只读。

  1. hbase(main):006:0> alter 'emp', READONLY
  2. Updating all regions with the new schema...
  3. 0/1 regions updated.
  4. 1/1 regions updated.
  5. Done.
  6. 0 row(s) in 2.2140 seconds


删除表范围运算符

  1. 也可以删除表范围运算。下面给出的是语法,从emp表中删除“MAX_FILESIZE”。
  1. hbase> alter 't1', METHOD => 'table_att_unset', NAME => 'MAX_FILESIZE'

删除列族

  1. 使用alter,也可以删除列族。下面给出的是使用alter删除列族的语法。
  1. hbase> alter table name ’, delete => column family


下面给出的是一个例子,从“emp”表中删除列族。
假设在HBase中有一个employee表。它包含以下数据:

  1. hbase(main):006:0> scan 'employee'
  2. ROW COLUMN+CELL
  3. row1 column=personal:city, timestamp=1418193767, value=hyderabad
  4. row1 column=personal:name, timestamp=1418193806767, value=raju
  5. row1 column=professional:designation, timestamp=1418193767, value=manager
  6. row1 column=professional:salary, timestamp=1418193806767, value=50000
  7. 1 row(s) in 0.0160 seconds



现在使用alter命令删除指定的 professional 列族。

  1. hbase(main):007:0> alter 'employee','delete'=>'professional'
  2. Updating all regions with the new schema...
  3. 0/1 regions updated.
  4. 1/1 regions updated.
  5. Done.
  6. 0 row(s) in 2.2380 seconds



现在验证该表中变更后的数据。观察列族“professional”也没有了,因为前面已经被删除了。

  1. hbase(main):003:0> scan 'employee'
  2. ROW COLUMN+CELL
  3. row1 column=personal:city, timestamp=14181936767, value=hyderabad
  4. row1 column=personal:name, timestamp=1418193806767, value=raju
  5. 1 row(s) in 0.0830 seconds


使用Java API添加一列族

  1. 可以使用HBAseAdmin类的addColumn方法添加一列家族的表。按照下面给出的步骤将一个列族添加到表中。

第1步

  1. 实例化HBaseAdmin类。
  1. // Instantiating configuration object
  2. Configuration conf = HBaseConfiguration.create();
  3. // Instantiating HBaseAdmin class
  4. HBaseAdmin admin = new HBaseAdmin(conf);


第2步

  1. addColumn()方法需要一个表名和一个HColumnDescriptorclass对象。因此需要实例化HColumnDescriptor类。 HColumnDescriptor依次构造函数需要一个列族名称用于添加。在这里加入了一个名为“contactDetails”到“employee”表的列族。
  1. // Instantiating columnDescriptor object
  2. HColumnDescriptor columnDescriptor = new
  3. HColumnDescriptor("contactDetails");


第3步

  1. 使用addColumn方法添加列族。通过表名和HColumnDescriptor类对象作为这个方法的参数。
  1. // Adding column family
  2. admin.addColumn("employee", new HColumnDescriptor("columnDescriptor"));
  1. 下面给出的是一个完整的程序,用于添加一列族到现有的表。
  1. import java.io.IOException;
  2. import org.apache.hadoop.conf.Configuration;
  3. import org.apache.hadoop.hbase.HBaseConfiguration;
  4. import org.apache.hadoop.hbase.HColumnDescriptor;
  5. import org.apache.hadoop.hbase.MasterNotRunningException;
  6. import org.apache.hadoop.hbase.client.HBaseAdmin;
  7. public class AddColoumn{
  8. public static void main(String args[]) throws MasterNotRunningException, IOException{
  9. // Instantiating configuration class.
  10. Configuration conf = HBaseConfiguration.create();
  11. // Instantiating HBaseAdmin class.
  12. HBaseAdmin admin = new HBaseAdmin(conf);
  13. // Instantiating columnDescriptor class
  14. HColumnDescriptor columnDescriptor = new HColumnDescriptor("contactDetails");
  15. // Adding column family
  16. admin.addColumn("employee", columnDescriptor);
  17. System.out.println("coloumn added");
  18. }
  19. }
  1. 编译和执行上述程序,如下所示
  1. $javac AddColumn.java
  2. $java AddColumn
  1. 上述编译只有已经设置“.bashrc”中的类路径。如果还没有,请按照下面编译给出.java文件的程序。
  1. //if "/home/home/hadoop/hbase " is your Hbase home folder then.
  2. $javac -cp /home/hadoop/hbase/lib/*: Demo.java
  1. 如果一切顺利,它会生成以下的输出:
  1. column added

使用Java API删除列族

  1. 可以使用HBAseAdmin类的deleteColumn()方法删除列族。按照下面给出的步骤添加一个列族到表中。

第1步

实例化HBaseAdmin类。

  1. // Instantiating configuration object
  2. Configuration conf = HBaseConfiguration.create();
  3. // Instantiating HBaseAdmin class
  4. HBaseAdmin admin = new HBaseAdmin(conf);


第2步

  1. 使用deleteColumn()方法添加列族。传递表名和列族名作为这个方法的参数。
  1. // Deleting column family
  2. admin.deleteColumn("employee", "contactDetails");
  1. 下面给出的是从现有表中删除列族的完整的程序。
  1. import java.io.IOException;
  2. import org.apache.hadoop.conf.Configuration;
  3. import org.apache.hadoop.hbase.HBaseConfiguration;
  4. import org.apache.hadoop.hbase.MasterNotRunningException;
  5. import org.apache.hadoop.hbase.client.HBaseAdmin;
  6. public class DeleteColoumn{
  7. public static void main(String args[]) throws MasterNotRunningException, IOException{
  8. // Instantiating configuration class.
  9. Configuration conf = HBaseConfiguration.create();
  10. // Instantiating HBaseAdmin class.
  11. HBaseAdmin admin = new HBaseAdmin(conf);
  12. // Deleting a column family
  13. admin.deleteColumn("employee","contactDetails");
  14. System.out.println("coloumn deleted");
  15. }
  16. }
  1. 编译和执行上述程序如下所示。
  1. $javac DeleteColumn.java
  2. $java DeleteColumn
  1. 下面列出的是输出:
  1. column deleted