您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關(guān)HBase中怎么操作API,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。
【常用到的幾個(gè)類(lèi)】
1. org.apache.hadoop.hbase.HBaseConfiguration
每一個(gè)hbase client都會(huì)使用到的對(duì)象,它代表的是HBase配置信息。它有兩種構(gòu)造方式:
public HBaseConfiguration()
public HBaseConfiguration(final Configuration c)
默認(rèn)的構(gòu)造方式會(huì)嘗試從hbase-default.xml和hbase-site.xml中讀取配置。如果classpath沒(méi)有這兩個(gè)文件,就需要你自己設(shè)置配置。
Configuration HBASE_CONFIG = new Configuration();
HBASE_CONFIG.set(“hbase.zookeeper.quorum”, “zkServer”);
HBASE_CONFIG.set(“hbase.zookeeper.property.clientPort”, “2181″);
HBaseConfiguration cfg = new HBaseConfiguration(HBASE_CONFIG);
2. org.apache.hadoop.hbase.client.HBaseAdmin
提供了一個(gè)接口來(lái)管理HBase數(shù)據(jù)庫(kù)的表信息。它提供的方法包括:創(chuàng)建表,刪除表,列出表項(xiàng),使表有效或無(wú)效,以及添加或刪除表列族成員等。
3. org.apache.hadoop.hbase.HTableDescriptor
包含了表的名字極其對(duì)應(yīng)表的列族。
常用方法:void addFamily(HcolumnDescriptor family) 添加一個(gè)列族。其詳細(xì)用法如下所示,向tb_user表中添加了一個(gè)content列族。
HTableDescriptor tableDescriptor = new HTableDescriptor("tb_user");
HColumnDescriptor col = new HColumnDescriptor("content:");
tableDescriptor.addFamily(col);
4. org.apache.hadoop.hbase.HColumnDescriptor
作用:維護(hù)著關(guān)于列族的信息,例如版本號(hào),壓縮設(shè)置等。它通常在創(chuàng)建表或者為表添加列族的時(shí)候使用。列族被創(chuàng)建后不能直接修改,只能通過(guò)刪除然后重新創(chuàng)建的方式。列族被刪除的時(shí)候,列族里面的數(shù)據(jù)也會(huì)同時(shí)被刪除。
5. org.apache.hadoop.hbase.client.HTable
作用:可以用來(lái)和HBase表直接通信。此方法對(duì)于更新操作來(lái)說(shuō)是非線程安全的。
7. org.apache.hadoop.hbase.client.Get
作用:用來(lái)獲取單個(gè)行的相關(guān)信息
【實(shí)戰(zhàn)】
package com.youku.test;
import java.util.Iterator;
import java.util.List;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HTable;
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.util.Bytes;
import org.junit.Before;
import org.junit.Test;/**
* HBase Java API Test Demo.
*/
public class HbaseDemo {private Configuration conf = null;
/**
* 初始化
*/
@Before
public void init() {
conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", "zk01,zk02,zk03");
}/**
* 刪除表
* @throws Exception
*/
@Test
public void testDrop() throws Exception {
HBaseAdmin admin = new HBaseAdmin(conf);
admin.disableTable("yk_test");
admin.deleteTable("yk_test");
admin.close();
}/**
* 插入數(shù)據(jù)
* @throws Exception
*/
@Test
public void testPut() throws Exception {
HTable table = new HTable(conf, "person_info");
Put p = new Put(Bytes.toBytes("person_rk_bj_zhang_000002"));
p.add("base_info".getBytes(), "name".getBytes(), "zhangwuji".getBytes());
table.put(p);
table.close();
}/**
* 刪除某列
* @throws Exception
*/
@Test
public void testDel() throws Exception {
HTable table = new HTable(conf, "user");
Delete del = new Delete(Bytes.toBytes("rk0001"));
del.deleteColumn(Bytes.toBytes("data"), Bytes.toBytes("pic"));
table.delete(del);
table.close();
}/**
* 單條查詢
* @throws Exception
*/
@Test
public void testGet() throws Exception {
HTable table = new HTable(conf, "person_info");
Get get = new Get(Bytes.toBytes("person_rk_bj_zhang_000001"));
get.setMaxVersions(5);
Result result = table.get(get);List<Cell> cells = result.listCells();
for (Cell c : cells) {
}// result.getValue(family, qualifier); 可以從result中直接取出一個(gè)特定的value
// 遍歷出result中所有的鍵值對(duì)
List<KeyValue> kvs = result.list();
// kv ---> f1:title:superise.... f1:author:zhangsan f1:content:asdfasldgkjsldg
for (KeyValue kv : kvs) {
String family = new String(kv.getFamily());
System.out.println(family);
String qualifier = new String(kv.getQualifier());
System.out.println(qualifier);
System.out.println(new String(kv.getValue()));}
table.close();
}/***
* 遍歷表
* @throws Exception
*/
@Test
public void testScan() throws Exception {
HTable table = null;
try {
table = new HTable(conf, "person_info");
Scan scan = new Scan();
scan.addFamily(Bytes.toBytes("v"));
ResultScanner rs = table.getScanner(scan);
Iterator<Result> it = rs.iterator();while (it.hasNext()) {
Result result = it.next();
if (result != null && result.size() > 0) {
byte[] row = result.getRow();
String rowStr = Bytes.toString(row); // rowkey
System.out.println("rowkey:" + rowStr);
byte[] value = result.getValue(Bytes.toBytes("v"), Bytes.toBytes("c"));
if(value != null){
long count = Bytes.toLong(value); // value
System.out.println("colum value:" + count);
}
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (table != null) {
try {
table.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}
}
【補(bǔ)充說(shuō)明】
在使用scan操作時(shí),由于HBase表一般很大,往往需要結(jié)合過(guò)濾器使用,詳細(xì)參考《HBase--常用過(guò)濾器篇》,另外,若在scan時(shí)指定了startRow和stopRow時(shí),結(jié)果不包含stopRow,但是包含startRow,且startRow和stopRow支持部分匹配,實(shí)際應(yīng)用中若rowkey設(shè)計(jì)比較復(fù)雜,由多部分組成,可以用這種方式查詢符合條件的行。
以上就是HBase中怎么操作API,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。