該命令返回表的說明。它的語法如下:
hbase> describe 'table name'
下面給出的是對emp表的 describe 命令的輸出。
hbase(main):006:0> describe 'emp' DESCRIPTION ENABLED 'emp', {NAME => 'READONLY', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', COMPRESSION => 'NONE', VERSIONS => '1', TTL true => 'FOREVER', MIN_VERSIONS => '0', KEEP_DELETED_CELLS => 'false', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}, {NAME => 'personal data', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', VERSIONS => '5', COMPRESSION => 'NONE', MIN_VERSIONS => '0', TTL => 'FOREVER', KEEP_DELETED_CELLS => 'false', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}, {NAME => 'professional data', DATA_BLO CK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', VERSIONS => '1', COMPRESSION => 'NONE', MIN_VERSIONS => '0', TTL => 'FOREVER', K EEP_DELETED_CELLS => 'false', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}, {NAME => 'table_att_unset', DATA_BLOCK_ENCODING => 'NO NE', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', COMPRESSION => 'NONE', VERSIONS => '1', TTL => 'FOREVER', MIN_VERSIONS => '0', KEEP_DELETED_CELLS => 'false', BLOCKSIZE => '6
alter用於更改現有表的命令。使用此命令可以更改列族的單元,設定最大數量和刪除表範圍運算子,並從表中刪除列家族。
下面給出的語法來改變列家族單元的最大數目。
hbase> alter 't1', NAME => 'f1', VERSIONS => 5
在下面的例子中,單元的最大數目設定為5。
hbase(main):003:0> alter 'emp', NAME => 'personal data', VERSIONS => 5 Updating all regions with the new schema... 0/1 regions updated. 1/1 regions updated. Done. 0 row(s) in 2.3050 seconds
使用alter,可以設定和刪除表範圍,運算子,如MAX_FILESIZE,READONLY,MEMSTORE_FLUSHSIZE,DEFERRED_LOG_FLUSH等。
下面給出的是語法,是用以設定表為唯讀。
hbase>alter 't1', READONLY(option)
在下面的例子中,我們已經設定表emp為唯讀。
hbase(main):006:0> alter 'emp', READONLY Updating all regions with the new schema... 0/1 regions updated. 1/1 regions updated. Done. 0 row(s) in 2.2140 seconds
也可以刪除表範圍運算。下面給出的是語法,從emp表中刪除“MAX_FILESIZE”。
hbase> alter 't1', METHOD => 'table_att_unset', NAME => 'MAX_FILESIZE'
使用alter,也可以刪除列族。下面給出的是使用alter刪除列族的語法。
hbase> alter ‘ table name ’, ‘delete’ => ‘ column family ’
下面給出的是一個例子,從“emp”表中刪除列族。
假設在HBase中有一個employee表。它包含以下資料:
hbase(main):006:0> scan 'employee' ROW COLUMN+CELL row1 column=personal:city, timestamp=1418193767, value=hyderabad row1 column=personal:name, timestamp=1418193806767, value=raju row1 column=professional:designation, timestamp=1418193767, value=manager row1 column=professional:salary, timestamp=1418193806767, value=50000 1 row(s) in 0.0160 seconds
現在使用alter命令刪除指定的 professional 列族。
hbase(main):007:0> alter 'employee','delete'=>'professional' Updating all regions with the new schema... 0/1 regions updated. 1/1 regions updated. Done. 0 row(s) in 2.2380 seconds
現在驗證該表中變更後的資料。觀察列族“professional”也沒有了,因為前面已經被刪除了。
hbase(main):003:0> scan 'employee' ROW COLUMN+CELL row1 column=personal:city, timestamp=14181936767, value=hyderabad row1 column=personal:name, timestamp=1418193806767, value=raju 1 row(s) in 0.0830 seconds
可以使用HBAseAdmin類的addColumn方法新增一列家族的表。按照下面給出的步驟將一個列族新增到表中。
範例化HBaseAdmin類。
// Instantiating configuration object Configuration conf = HBaseConfiguration.create(); // Instantiating HBaseAdmin class HBaseAdmin admin = new HBaseAdmin(conf);
addColumn()方法需要一個表名和一個HColumnDescriptorclass物件。因此需要範例化HColumnDescriptor類。 HColumnDescriptor依次建構函式需要一個列族名稱用於新增。在這裡加入了一個名為“contactDetails”到“employee”表的列族。
// Instantiating columnDescriptor object HColumnDescriptor columnDescriptor = new HColumnDescriptor("contactDetails");
使用addColumn方法新增列族。通過表名和HColumnDescriptor類物件作為這個方法的引數。
// Adding column family admin.addColumn("employee", new HColumnDescriptor("columnDescriptor"));
下面給出的是一個完整的程式,用於新增一列族到現有的表。
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.MasterNotRunningException; import org.apache.hadoop.hbase.client.HBaseAdmin; public class AddColoumn{ public static void main(String args[]) throws MasterNotRunningException, IOException{ // Instantiating configuration class. Configuration conf = HBaseConfiguration.create(); // Instantiating HBaseAdmin class. HBaseAdmin admin = new HBaseAdmin(conf); // Instantiating columnDescriptor class HColumnDescriptor columnDescriptor = new HColumnDescriptor("contactDetails"); // Adding column family admin.addColumn("employee", columnDescriptor); System.out.println("coloumn added"); } }
編譯和執行上述程式,如下所示
$javac AddColumn.java $java AddColumn
上述編譯只有已經設定“.bashrc”中的類路徑。如果還沒有,請按照下面編譯給出.java檔案的程式。
//if "/home/home/hadoop/hbase " is your Hbase home folder then. $javac -cp /home/hadoop/hbase/lib/*: Demo.java
如果一切順利,它會生成以下的輸出:
column added
可以使用HBAseAdmin類的deleteColumn()方法刪除列族。按照下面給出的步驟新增一個列族到表中。
範例化HBaseAdmin類。
// Instantiating configuration object Configuration conf = HBaseConfiguration.create(); // Instantiating HBaseAdmin class HBaseAdmin admin = new HBaseAdmin(conf);
使用deleteColumn()方法新增列族。傳遞表名和列族名作為這個方法的引數。
// Deleting column family admin.deleteColumn("employee", "contactDetails");
下面給出的是從現有表中刪除列族的完整的程式。
import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.MasterNotRunningException; import org.apache.hadoop.hbase.client.HBaseAdmin; public class DeleteColoumn{ public static void main(String args[]) throws MasterNotRunningException, IOException{ // Instantiating configuration class. Configuration conf = HBaseConfiguration.create(); // Instantiating HBaseAdmin class. HBaseAdmin admin = new HBaseAdmin(conf); // Deleting a column family admin.deleteColumn("employee","contactDetails"); System.out.println("coloumn deleted"); } }
編譯和執行上述程式如下所示。
$javac DeleteColumn.java $java DeleteColumn
下面列出的是輸出:
column deleted