开启 Hadoop 和 HBase
点击测评前,请先执行以下操作:
启动 Hadoop:
启动 HBase:
注意
:需等待 HBase 初始化完成(约 20 秒),否则无法创建表。
验证 HBase 初始化状态
输入以下命令查看 HBase 根目录:
若显示相关文件或目录(如.tmp、master等),则表示初始化成功。
连接 HBase
配置对象创建
通过HBaseConfiguration读取配置文件(hbase-site.xml和hbase-default.xml):
1 2 3 4 5 6 7 8 9
| import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.ConnectionFactory;
Configuration config = HBaseConfiguration.create();
Connection connection = ConnectionFactory.createConnection(config);
|
创建表
1.0 版本写法
1 2 3 4 5 6 7 8 9 10 11 12 13
| import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.HColumnDescriptor; import org.apache.hadoop.hbase.HTableDescriptor;
Admin admin = connection.getAdmin(); TableName tableName = TableName.valueOf("test"); HTableDescriptor htd = new HTableDescriptor(tableName); HColumnDescriptor hcd = new HColumnDescriptor("data"); htd.addFamily(hcd); admin.createTable(htd); admin.close(); connection.close();
|
2.X 版本写法(推荐)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.TableDescriptorBuilder; import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;
Admin admin = connection.getAdmin(); TableName tableName = TableName.valueOf("test");
TableDescriptorBuilder tableDescriptor = TableDescriptorBuilder.newBuilder(tableName);
ColumnFamilyDescriptor family = ColumnFamilyDescriptorBuilder .newBuilder(Bytes.toBytes("data")) .build(); tableDescriptor.setColumnFamily(family); admin.createTable(tableDescriptor.build()); admin.close(); connection.close();
|
添加数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Table; import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.util.Bytes;
Table table = connection.getTable(TableName.valueOf("test")); try { Put put = new Put(Bytes.toBytes("row1")); put.addColumn( Bytes.toBytes("data"), Bytes.toBytes("1"), Bytes.toBytes("张三丰") ); table.put(put);
Put put2 = new Put(Bytes.toBytes("row2")); put2.addColumn( Bytes.toBytes("data"), Bytes.toBytes("2"), Bytes.toBytes("张无忌") ); table.put(put2); } finally { table.close(); connection.close(); }
|
查询数据
查询单条数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| import org.apache.hadoop.hbase.client.Get; import org.apache.hadoop.hbase.client.Result;
TableName tableName = TableName.valueOf("test"); Table table = connection.getTable(tableName); Get get = new Get(Bytes.toBytes("row1")); Result result = table.get(get);
byte[] valueBytes = result.getValue( Bytes.toBytes("data"), Bytes.toBytes("1") ); String valueStr = new String(valueBytes, "utf-8"); System.out.println("value: " + valueStr);
|
批量扫描数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.client.ResultScanner;
tableName = TableName.valueOf("test"); table = connection.getTable(tableName); Scan scan = new Scan(); ResultScanner scanner = table.getScanner(scan);
try { for (Result scannerResult : scanner) { byte[] row = scannerResult.getRow(); System.out.println("rowName: " + new String(row, "utf-8")); } } finally { scanner.close(); }
|
删除表
1 2 3 4 5 6 7 8 9 10
| Admin admin = connection.getAdmin(); TableName tableName = TableName.valueOf("test");
admin.disableTable(tableName);
admin.deleteTable(tableName);
admin.close(); connection.close();
|
注意事项:
- HBase
表名、列族名、列修饰符均为字节数组,建议通过
Bytes.toBytes()处理字符串。
- 操作完成后务必关闭
Connection、Table、Admin等资源,避免内存泄漏。
- 删除表前需先调用
disableTable(),否则会抛出异常。