HBase 基本Java API

數據庫:HBaseConfiguration ?HBaseAdmin ?

表:HTable ?HTableDescriptor

列族:HColumnDescriptor

行列操作:Put ?Get ?Scanner


HBaseConfiguration:

Configuration create()

//從classpath中查找hbase-site.xml初始化Configuration,如果沒有,默認讀取HBase-版本號.jar中的默認配置文件

void merger(Configuration destConf, Configuration srcConf) ?//合并兩個Configuration

用法:Configuration config = HBaseConfiguration.create();


HBaseAdmin:

管理HBase數據庫信息,可以創建表、刪除表、列出表項、使表有效或無效、添加刪除列族

void addColumn (String tableName, HColumnDescriptor column) ?//添加列族

void checkHBaseAvailable (HBaseConfiguration conf) ?//查看HBase狀態,靜態函數

void createTable (HTableDescriptor desc) ?//創建一個新表,同步操作

void deleteTable (byte[] tableName) //刪除表

void enableTable (byte[] tableName) //使表有效

void disableTable (byte[] tableName) //使表無效

HTableDescriptor[] listTable() ?//列出所有用戶空間表項

void modifyTable (byte[] tableName, HTableDescriptor htd) ?//修改表模式,異步操作,耗時

boolean tableExists (String tableName); //檢查表是否存在

用法:HBaseAdmin admin = new HBaseAdmin(config); ? ?admin.disableTable(Bytes.toBytes("tablename"));


HTableDescriptor:

包含了表的名字及列族

void addFamily (HColumnDescriptor cdesc) ?//添加一個列族

HColumnDescriptor removeFamily ( byte[] column) ?//移除一個列族

byte[] getName () ?//獲取表名

byte[] getValue (byte[] key) ?//獲取屬性值

void setValue (String key, String value ) ?//設置屬性值

用法:

HTableDescriptor htd = new HTableDescriptor ("tableName");

htd.addFamily (new HColumnDescriptor("Family"));


HColumnDescriptor:

維護列族信息,如版本號、壓縮設置等,通常在創建表或添加列族時使用

列族被創建后不能直接修改,只能刪除后重建

列族被刪除后,對應數據一同被刪除

byte[] getName() ?//獲取列族名字

byte[] getValue() ?//獲取對應屬性值

void setValue (String key, String value) ?//設置對應屬性值


HTable:

用來與HBase表進行通信,非線程安全,若有多個線程,使用HTablePool

void checkAndPut (byte[] row, byte[] family, byte[] quaalifier, byte[] value, Put put) ?//自動檢查row/family/qualifier/是否與給定的值匹配

void close() ?//釋放資源

boolean exists (Get get) ?//檢查get鎖指定的值是否存在

Result get(Get get) ?//取出指定行的某些單元格對應的值

byte[][] getEndKeys () ?//獲取表每個Region的結束鍵值

ResultScanner getScanner (byte[] family) ?//獲取給定列族的Scanner實例

HTableDescriptor getTableDescriptor() ?//獲取當前表的HTableDescriptor實例

byte[] getTableName() ?//獲取表名

void put (Put put) ?//向表中添加值

用法:

HTable table = new HTable (conf, Bytes.toBytes("tablename"));

ResultScanner scanner = table.getScanner (Bytes.toBytes("cf"));


Put:

添加數據

Put add (byte[] family, byte[] quaalifier, byte[] value)

Put add (byte[] family, byte[] quaalifier, long ts, byte[] value)

List<Key Value> get (byte[] family, byte[] qualifier) ?//返回與指定 列族:列 匹配的項

boolean has (byte[] family, byte[] qualifier) ?//檢查是否有?列族:列

用法:

HTable table = new HTable(conf, Bytes.toBytes("tablename"));

Put p = new Put(Bytes.toBytes("row")); //為指定行建一個Put操作

p.add(Bytes.toBytes("family"),?Bytes.toBytes("qulifier"),?Bytes.toBytes("tvalue"));

table.put(p);


Get:

獲取單行信息

Get addColumn (byte[] family, byte[] qualifier) ?

Get addFamily (byte[] family)

Get setTimeRange (long minStamp, long maxStamp)

Get setFilter (Filter filter)

用法:

HTable table = new HTable(conf, Bytes.toBytes("tablename"));

Get g = new Get(Bytes.toBytes("row")); //為指定行建一個Get操作

Result result = table.get(g);


Result:

存儲Get或Scan操作后獲取的表的單行值

boolean containsColumn (byte[] family, byte[] qualifier)

NavigableMap<byte[], byte[]> getFamilyMap (byte[] family) ?//返回列族的qulifier:value們

byte[] getValue (byte[] family, byte[] qualifier)?


ResultScanner:

void close()

Result next()

用法:

ResultScanner scanner = table.getScanner (Bytes.toBytes(family));

for ( Result rowResult : scanner )?

? ? byte[] str = rowResult.getValue ( Bytes.toBytes("family"), Bytes.toBytes("column") )


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.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.TableName;
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.filter.BinaryComparator;
import org.apache.hadoop.hbase.filter.BinaryPrefixComparator;
import org.apache.hadoop.hbase.filter.ByteArrayComparable;
import org.apache.hadoop.hbase.filter.ColumnPrefixFilter;
import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;
import org.apache.hadoop.hbase.filter.FamilyFilter;
import org.apache.hadoop.hbase.filter.Filter;
import org.apache.hadoop.hbase.filter.MultipleColumnPrefixFilter;
import org.apache.hadoop.hbase.filter.PrefixFilter;
import org.apache.hadoop.hbase.filter.QualifierFilter;
import org.apache.hadoop.hbase.filter.RegexStringComparator;
import org.apache.hadoop.hbase.filter.RowFilter;
import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
import org.apache.hadoop.hbase.filter.SubstringComparator;
import org.apache.hadoop.hbase.master.TableNamespaceManager;
import org.apache.hadoop.hbase.util.Bytes;
import org.junit.Before;
import org.junit.Test;public class HbaseDemo {private Configuration conf = null;@Beforepublic void init(){conf = HBaseConfiguration.create();conf.set("hbase.zookeeper.quorum", "hdp0,hdp1,hdp2");}@Testpublic void testDrop() throws Exception{HBaseAdmin admin = new HBaseAdmin(conf);admin.disableTable("account");admin.deleteTable("account");admin.close();}@Testpublic 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();}@Testpublic 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();//		result.getValue(family, qualifier);  可以從result中直接取出一個特定的value//遍歷出result中所有的鍵值對for(KeyValue kv : result.list()){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*/@Testpublic void testScan() throws Exception{HTable table = new HTable(conf, "person_info".getBytes());Scan scan = new Scan(Bytes.toBytes("person_rk_bj_zhang_000001"), Bytes.toBytes("person_rk_bj_zhang_000002"));//前綴過濾器----針對行鍵Filter filter = new PrefixFilter(Bytes.toBytes("rk"));//行過濾器ByteArrayComparable rowComparator = new BinaryComparator(Bytes.toBytes("person_rk_bj_zhang_000001"));RowFilter rf = new RowFilter(CompareOp.LESS_OR_EQUAL, rowComparator);/*** 假設rowkey格式為:創建日期_發布日期_ID_TITLE* 目標:查找  發布日期  為  2014-12-21  的數據*/rf = new RowFilter(CompareOp.EQUAL , new SubstringComparator("_2014-12-21_"));//單值過濾器 1 完整匹配字節數組new SingleColumnValueFilter("base_info".getBytes(), "name".getBytes(), CompareOp.EQUAL, "zhangsan".getBytes());//單值過濾器2 匹配正則表達式ByteArrayComparable comparator = new RegexStringComparator("zhang.");new SingleColumnValueFilter("info".getBytes(), "NAME".getBytes(), CompareOp.EQUAL, comparator);//單值過濾器2 匹配是否包含子串,大小寫不敏感comparator = new SubstringComparator("wu");new SingleColumnValueFilter("info".getBytes(), "NAME".getBytes(), CompareOp.EQUAL, comparator);//鍵值對元數據過濾-----family過濾----字節數組完整匹配FamilyFilter ff = new FamilyFilter(CompareOp.EQUAL , new BinaryComparator(Bytes.toBytes("base_info"))   //表中不存在inf列族,過濾結果為空);//鍵值對元數據過濾-----family過濾----字節數組前綴匹配ff = new FamilyFilter(CompareOp.EQUAL , new BinaryPrefixComparator(Bytes.toBytes("inf"))   //表中存在以inf打頭的列族info,過濾結果為該列族所有行);//鍵值對元數據過濾-----qualifier過濾----字節數組完整匹配filter = new QualifierFilter(CompareOp.EQUAL , new BinaryComparator(Bytes.toBytes("na"))   //表中不存在na列,過濾結果為空);filter = new QualifierFilter(CompareOp.EQUAL , new BinaryPrefixComparator(Bytes.toBytes("na"))   //表中存在以na打頭的列name,過濾結果為所有行的該列數據);//基于列名(即Qualifier)前綴過濾數據的ColumnPrefixFilterfilter = new ColumnPrefixFilter("na".getBytes());//基于列名(即Qualifier)多個前綴過濾數據的MultipleColumnPrefixFilterbyte[][] prefixes = new byte[][] {Bytes.toBytes("na"), Bytes.toBytes("me")};filter = new MultipleColumnPrefixFilter(prefixes);//為查詢設置過濾條件scan.setFilter(filter);scan.addFamily(Bytes.toBytes("base_info"));ResultScanner scanner = table.getScanner(scan);for(Result r : scanner){/**for(KeyValue kv : r.list()){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()));}*///直接從result中取到某個特定的valuebyte[] value = r.getValue(Bytes.toBytes("base_info"), Bytes.toBytes("name"));System.out.println(new String(value));}table.close();}@Testpublic 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();}public static void main(String[] args) throws Exception {Configuration conf = HBaseConfiguration.create();conf.set("hbase.zookeeper.quorum", "hdp0:2181,hdp1:2181,hdp2:2181");HBaseAdmin admin = new HBaseAdmin(conf);TableName tableName = TableName.valueOf("person_info");HTableDescriptor td = new HTableDescriptor(tableName);HColumnDescriptor cd = new HColumnDescriptor("base_info");cd.setMaxVersions(10);td.addFamily(cd);admin.createTable(td);admin.close();}}






本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/387442.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/387442.shtml
英文地址,請注明出處:http://en.pswp.cn/news/387442.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

A1075.PAT Judge

題意 輸入k個程序的每個程序的滿分分數&#xff0c;再輸入m條用戶提交的記錄。按要求進行分數的排序最后輸出。是一道結構體的復雜排序 思路分析 首先明確本題的輸出要求&#xff1a; 編譯失敗的提交分數為-1。只有至少成功提交過一次程序(沒有編譯失敗),的用戶才會被排序。可以…

android 實現SSL握手協商

Android的私鑰和信任證書的格式必須是BKS格式的&#xff0c;通過配置本地JDK&#xff0c;讓keytool可以生成BKS格式的私鑰和信任證書,java本身沒有BouncyCastle密庫 ssl通道建立前必須進行協商&#xff08;形成安全的通道--隧道技術&#xff09;。 服務端&#xff1a; View Co…

同步阻塞的BIO、同步非阻塞的NIO、異步非阻塞的AIO

IO的方式通常分為幾種&#xff0c;同步阻塞的BIO、同步非阻塞的NIO、異步非阻塞的AIO。 一、BIO 在JDK1.4出來之前&#xff0c;我們建立網絡連接的時候采用BIO模式&#xff0c;需要先在服務端啟動一個ServerSocket&#xff0c;然后在客戶端啟動Socket來對服務端進行通信&#x…

1 概述

Unix C TCP/IP 三位一體 Linux天生是網絡操作系統 程序員的學習&#xff1a;不斷地敲代碼&#xff0c;不斷地看別人的代碼。 Linux兩大領域&#xff1a; &#xff08;1&#xff09;服務器 &#xff08;2&#xff09;嵌入式設備 www.netcraft.com 查看網站服務器系統 VMware快…

對我影響最大的三位老師

讀書也讀了那么多年了&#xff0c;遇見了許多的老師&#xff0c;他們教不同的科目&#xff0c;各司其職&#xff0c;兢兢業業的做著自己的本職工作。在我的學生時代印象最深的有三位老師。第一位是我的初中語文老師鄒老師&#xff0c;他上課非常有趣&#xff0c;語文課&#xf…

Java Annotation認知(包括框架圖、詳細介紹、示例說明)

摘要 Java Annotation是JDK5.0引入的一種注釋機制。 網上很多關于Java Annotation的文章&#xff0c;看得人眼花繚亂。Java Annotation本來很簡單的&#xff0c;結果說的人沒說清楚&#xff1b;弄的看的人更加迷糊。 我按照自己的思路&#xff0c;對Annotation進行了整理。理解…

matlab練習程序(RGB2HSL、HSL2RGB)

色相飽和度亮度和三原色的相互轉換 function mainimgimread(lena_color.jpg);imgmat2gray(img); %任意區間映射到[0,1];[m n dim]size(img);imshow(img);%%圖像的RGBRimg(:,:,1);Gimg(:,:,2);Bimg(:,:,3);%%圖像RGB2HSLHzeros(m,n); %色相角Szeros(m,n); %飽和度Lzeros(m,…

2 文件處理、權限管理、搜索

文件處理命令&#xff1a; ls -a -l -d -h -i mkdir -p parents cd . .. /tmp/Japan pwd rmdir cp -r -p source destination 可改名recursive preserve mv source destination 剪切文件 改名 ctrl l 清屏 或者 clear命令 rm -r -f touch 新建文件 帶空格需加…

第38節: Vue3 鼠標按鈕修改器

在UniApp中使用Vue3框架時&#xff0c;你可以使用按鍵修飾符來更精確地處理鍵盤事件。以下是一個示例&#xff0c;演示了如何在UniApp中使用Vue3框架使用.left、.right和.middle按鍵修飾符&#xff1a; <template> <view> <input keydown"handleKeyDown&…

Go語言學習之3 流程控制、函數

主要內容&#xff1a; 1. strings和strconv使用2. Go中的時間和日期類型3. 指針類型4. 流程控制5. 函數詳解 1. strings和strconv使用 //strings 1. strings.HasPrefix(s string, prefix string) bool&#xff1a;判斷字符串s是否以prefix開頭 。 2. strings.HasSuffix(s strin…

RabbitMQ教程總結

【譯】RabbitMQ教程一 主要通過Hello Word對RabbitMQ有初步認識 【譯】RabbitMQ教程二 工作隊列&#xff0c;即一個生產者對多個消費者循環分發、消息確認、消息持久、公平分發 【譯】RabbitMQ教程三 如何同一個消息同時發給多個消費者開始引入RabbitMQ消息模型中的重要概念路由…

3 幫助命令、用戶管理、壓縮

幫助命令&#xff1a; man 命令或配置文件 獲得幫助信息 /l 查看所有和l相關的行 q 退出 man passwd 1命令的幫助 5配置文件的幫助 man 1 passwd man 5 passwd 默認查看命令的幫助 man 5 passwd 查看配置文件的幫助 whatis 命令 查看命令的功能性描述 whatis ls ap…

[bzoj1039] [ZJOI2008]無序運動Movement

Description D博士對物理有著深入的研究&#xff0c;經典物理、天體物理、量子物理都有著以他的名字命名的定理。最近D博士著迷于研究粒子運動的無規則性。對圣經深信不疑的他相信&#xff0c;上帝創造的任何事物必然是有序的、有理可循的&#xff0c;而不是無規則的、混沌的。…

關于shiro session失效報錯問題

最近做了一個項目&#xff0c;要用到shiro&#xff0c;做完之后發現有個異常經常發生org.apache.shiro.session.UnknownSessionException: There is no session with id &#xff0c;經過多天的研究&#xff0c;終于得以解決 登錄的時候異常信息&#xff1a; [java] view plain…

4 網絡、掛載、關機

網絡命令: 給在線用戶發信 write 用戶名 編輯時&#xff0c;Ctrl退格鍵刪除錯誤輸入 CtrlD 保存輸入信息 wall 給所有在線用戶發信 ping命令 -c指定發送次數 ping -c 3 192.168.231.1 ifconfig 查看網卡信息 ifconfig eth1 192.168.231.100 臨時設置IP地址 mail 用戶名 …

#191 sea(動態規劃)

假設已經求出了i個點j個橋的連通圖數量f[i][j]&#xff0c;容易由此推出最終答案&#xff0c;套路地枚舉1號點所在連通塊大小即可。 假設已經求出了i個點的邊雙連通圖數量h[i]&#xff0c;考慮由此推出f[i][j]。可以枚舉其中一座橋將圖劃分成兩個部分&#xff0c;固定1號點在其…

linux下獲取占用CPU資源最多的10個進程,可以使用如下命令組合: ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head linux下

linux下獲取占用CPU資源最多的10個進程&#xff0c;可以使用如下命令組合&#xff1a; ps aux|head -1;ps aux|grep -v PID|sort -rn -k 3|head linux下獲取占用內存資源最多的10個進程&#xff0c;可以使用如下命令組合&#xff1a; ps aux|head -1;ps aux|grep -v PID|s…

自定義注解與validation結合使用案例

案例1&#xff1a; [java] view plaincopy import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import javax.validation.Constraint; import…

5 Vim編輯器的使用

vi filename 命令模式 a i o 插入模式 后前 行 Esc鍵 回到命令模式 Shift&#xff1a; 編輯模式 set nu加行號 執行完命令后直接回到命令模式 :set nu 設置行號 :set nonu 取消行號 移動命令&#xff1a; gg 到第一行 G 到最后一行 nG 到第n行 :n到第n行 $ 移至行…

機器學習實戰(筆記)------------KNN算法

1.KNN算法 KNN算法即K-臨近算法&#xff0c;采用測量不同特征值之間的距離的方法進行分類。 以二維情況舉例&#xff1a; 假設一條樣本含有兩個特征。將這兩種特征進行數值化&#xff0c;我們就可以假設這兩種特種分別為二維坐標系中的橫軸和縱軸&#xff0c;將一個樣本以點的形…