為了完成本關任務,你需要掌握:1.如何使用Java
連接HBase
數(shù)據(jù)庫,2.如何使用Java
代碼在HBase
中創(chuàng)建表。
如何使用Java連接HBase數(shù)據(jù)庫
Java
連接HBase
需要兩個類:
HBaseConfiguration
ConnectionFactory
HBaseConfiguration
要連接HBase
我們首先需要創(chuàng)建Configuration
對象,這個對象我們需要通過HBaseConfiguration
(HBase
配置)對象來進行創(chuàng)建,HBaseConfiguration
看名字我們就能猜到它的用途:讀取指定路徑下hbase-site.xml
和hbase-default.xml
的配置信息。
具體用法:
Configuration config = HBaseConfiguration.create(); //使用create()靜態(tài)方法就可以得到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月發(fā)布)的,
創(chuàng)建表
要創(chuàng)建表我們需要首先創(chuàng)建一個Admin
對象,然后讓它來創(chuàng)建一張表:
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);//創(chuàng)建表
HBase2.X創(chuàng)建表
上述創(chuàng)建表的方法是HBase1.X
版本的方式,而在HBase2.X
的版本中創(chuàng)建表使用了新的API
,創(chuàng)建表關鍵代碼如下:
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());//創(chuàng)建表
在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
對象進行創(chuàng)建表操作:
admin.createTable(tableDescriptor.build());
值得咱們注意的是,如果你的HBase
環(huán)境是1.X
的那么你只能使用第一種方式來創(chuàng)建表,如果是2.X
的版本,那么兩種方式你都可以使用(本實訓使用的 HBase
是2.1.1
版本,所以兩種都可用)。
編程要求
好了,到你啦,使用本關知識,在右側編輯器begin-end
處補充代碼,請你編寫一個Java
程序,在HBase
中創(chuàng)建表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()); // 創(chuàng)建表
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()); // 創(chuàng)建表
} finally {
admin.close();
}
} finally {
connection.close();
}
/********* End *********/
}
}
測試說明
注意:
點擊測評之前,請先開啟Hadoop
(start-dfs.sh
)和HBase
(start-hbase.sh
),并且需要等待HBase
初始化完成(20
秒左右),否則無法在HBase
中創(chuàng)建表。
怎么查看HBase
初始化成功了呢?
輸入hadoop fs -ls /hbase
有如下結果即可
如果啟動過程中出現(xiàn): datanode running as process 214. Stop it first.
說明Hadoop
的進程還沒有被殺死。
需要我們重新stop-dfs.sh
和stop-hbase.sh
,然后在重啟。文章來源:http://www.zghlxwxcb.cn/news/detail-813581.html
start-dfs.sh
start-hbase.sh
hadoop fs -ls /hbase
文章來源地址http://www.zghlxwxcb.cn/news/detail-813581.html
到了這里,關于HBase 開發(fā):使用Java操作HBase 第1關:創(chuàng)建表的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!