亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

HBase中SHELL操作和API的用法示例

發布時間:2021-12-08 15:04:32 來源:億速云 閱讀:144 作者:小新 欄目:云計算

這篇文章主要為大家展示了“HBase中SHELL操作和API的用法示例”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“HBase中SHELL操作和API的用法示例”這篇文章吧。

1、表結構:

HBase中SHELL操作和API的用法示例

2、SHELL操作

    命令:hbase shell

  • 顯示表:list

  • 創建表:create 'tb_name','column_family_1','column_family_2',...;

    或者 create 'user', {NAME => 'column_family_1', VERSIONS => '3'}

  •  插入數據:put 'tb_name','rk_on','column_family : key','value'

  • 獲取數據:

                獲取所有數據:get 'tb_name','rk_on'

                獲取列族數據:get 'tb_name','rk_on','column_family'

                            或者 get 'tb_name', 'rk_on', {column=> ['cf_name1', 'cf_name2']}

                獲取列族中列數據:get 'tb_name','rk_on','column_family:key','column_family:column2',..

                            或者 get 'tb_name', 'rk_on', {COLUMN => ['cf_name:key', 'cf_name:key']}

                獲取各個版本的數據

                        列族版本:get 'tb_name', 'rk_on', {COLUMN => 'cf_name1', VERSIONS => Number}

                        列版本:get 'tb_name', 'rk_on', {COLUMN => 'cf_name1:c_name', VERSIONS => Number}

                        時間范圍內的列版本:get 'user', 'rk0001', {COLUMN => 'cfn:key', VERSIONS => Number, TIMERANGE => [1392368783980, 1392380169184]}       

                        VERSION:查詢版本數量

                        TIMERANGE:時間戳范圍

  • 完全匹配:get 'tb_name', 'rk_on', {FILTER => "ValueFilter(=, 'binary:value')"}

                rk_on中含有value的信息

  • 匹配:get 'tb_name', 'rk_on', {FILTER => "(ValueFilter(=,'substring:a'))"}

                列示符中含有a的信息

  • scan查詢:

        scan 'tb_name'

        查詢user表中列族為cfn的信息
        scan 'tb_name', {COLUMNS => 'cfn'}
        scan 'tb_name', {COLUMNS => 'cfn', RAW => true, VERSIONS => 5}
        scan 'tb_name', {COLUMNS => 'cfn', RAW => true, VERSIONS => 3}
        查詢user表中列族為cfn1和cfn2的信息
        scan 'user', {COLUMNS => ['cfn1', 'cfn2']}
        scan 'user', {COLUMNS => ['cfn1:key1', 'cfn2:key2']}

        查詢user表中列族為info、列標示符為name的信息
        scan 'user', {COLUMNS => 'info:name'}

        查詢user表中列族為info、列標示符為name的信息,并且版本最新的5個
        scan 'user', {COLUMNS => 'info:name', VERSIONS => 5}

        查詢user表中列族為info和data且列標示符中含有a字符的信息
        scan 'user', {COLUMNS => ['info', 'data'], FILTER => "(QualifierFilter(=,'substring:a'))"}

        查詢user表中列族為info,rk范圍是[rk0001, rk0003)的數據
        scan 'people', {COLUMNS => 'info', STARTROW => 'rk0001', ENDROW => 'rk0003'}

        查詢user表中row key以rk字符開頭的
        scan 'user',{FILTER=>"PrefixFilter('rk')"}

        查詢user表中指定范圍的數據
        scan 'user', {TIMERANGE => [1392368783980, 1392380169184]}
        

  • 刪除數據

        刪除user表row key為rk0001,列標示符為info:name的數據
        delete 'people', 'rk0001', 'info:name'
        刪除user表row key為rk0001,列標示符為info:name,timestamp為1392383705316的數據
        delete 'user', 'rk0001', 'info:name', 1392383705316

  • 清空user表中的數據
    truncate 'people'

  • 修改表結構
    首先停用user表(新版本不用)
    disable 'user'

  • 添加兩個列族f1和f2
    alter 'people', NAME => 'f1'
    alter 'user', NAME => 'f2'

  • 啟用表
    enable 'user'

  • ###disable 'user'(新版本不用)
    刪除一個列族:
    alter 'user', NAME => 'f1', METHOD => 'delete' 或 alter 'user', 'delete' => 'f1'

  • 添加列族f1同時刪除列族f2
    alter 'user', {NAME => 'f1'}, {NAME => 'f2', METHOD => 'delete'}

  • 將user表的f1列族版本號改為5
    alter 'people', NAME => 'info', VERSIONS => 5

  • 啟用表
    enable 'user'

  • 刪除表
    disable 'user'
    drop 'user'


2、API:

幾個相關類與HBase數據模型之間的對應關系

java類HBase數據模型
HBaseAdmin數據庫(DataBase)
HBaseConfiguration
HTable表(Table)
HTableDescriptor列族(Column Family)
Put列修飾符(Column Qualifier)
Get
Scanner

一、HBaseConfiguration

關系:org.apache.hadoop.hbase.HBaseConfiguration

作用:對HBase進行配置

 返回值 函數 描述
 void addResource(Path file) 通過給定的路徑所指的文件來添加資源
 void clear() 清空所有已設置的屬性
 string get(String name) 獲取屬性名對應的值
 String getBoolean(String name, boolean defaultValue) 獲取為boolean類型的屬性值,如果其屬性值類型部位boolean,則返回默認屬性值
 void set(String name, String value) 通過屬性名來設置值
 void setBoolean(String name, boolean value) 設置boolean類型的屬性值

 用法示例:

HBaseConfiguration hconfig = new HBaseConfiguration();
hconfig.set("hbase.zookeeper.property.clientPort","2181");

  該方法設置了"hbase.zookeeper.property.clientPort"的端口號為2181。一般情況下,HBaseConfiguration會使用構造函數進行初始化,然后在使用其他方法。

二、HBaseAdmin

關系:org.apache.hadoop.hbase.client.HBaseAdmin

作用:提供了一個接口來管理HBase數據庫的表信息。它提供的方法包括:創建表,刪除表,列出表項,使表有效或無效,以及添加或刪除表列族成員等。

 返回值 函數 描述
      void addColumn(String tableName, HColumnDescriptor column) 向一個已經存在的表添加咧
 checkHBaseAvailable(HBaseConfiguration conf) 靜態函數,查看HBase是否處于運行狀態
 createTable(HTableDescriptor desc) 創建一個表,同步操作
 deleteTable(byte[] tableName) 刪除一個已經存在的表
 enableTable(byte[] tableName) 使表處于有效狀態
 disableTable(byte[] tableName) 使表處于無效狀態
 HTableDescriptor[] listTables() 列出所有用戶控件表項
 void modifyTable(byte[] tableName, HTableDescriptor htd) 修改表的模式,是異步的操作,可能需要花費一定的時間
 boolean tableExists(String tableName) 檢查表是否存在

用法示例:

HBaseAdmin admin = new HBaseAdmin(config);
admin.disableTable("tablename")

三、HTableDescriptor

關系:org.apache.hadoop.hbase.HTableDescriptor

作用:包含了表的名字極其對應表的列族

返回值函數描述
voidaddFamily(HColumnDescriptor)添加一個列族
HColumnDescriptorremoveFamily(byte[] column)移除一個列族
byte[]getName()獲取表的名字
byte[]getValue(byte[] key)獲取屬性的值
voidsetValue(String key, String value)設置屬性的值

用法示例:

HTableDescriptor htd = new HTableDescriptor(table);
htd.addFamily(new HcolumnDescriptor("family"));

在上述例子中,通過一個HColumnDescriptor實例,為HTableDescriptor添加了一個列族:family

四、HColumnDescriptor

關系:org.apache.hadoop.hbase.HColumnDescriptor

作用:維護著關于列族的信息,例如版本號,壓縮設置等。它通常在創建表或者為表添加列族的時候使用。列族被創建后不能直接修改,只能通過刪除然后重新創建的方式。列族被刪除的時候,列族里面的數據也會同時被刪除。

返回值函數描述
byte[]getName()獲取列族的名字
byte[]getValue(byte[] key)獲取對應的屬性的值
voidsetValue(String key, String value)設置對應屬性的值

用法示例:

HTableDescriptor htd = new HTableDescriptor(tablename);
HColumnDescriptor col = new HColumnDescriptor("content:");
htd.addFamily(col);

此例添加了一個content的列族

五、HTable

關系:org.apache.hadoop.hbase.client.HTable

作用:可以用來和HBase表直接通信。此方法對于更新操作來說是非線程安全的。

返回值函數描述
voidcheckAdnPut(byte[] row, byte[] family, byte[] qualifier, byte[] value, Put put自動的檢查row/family/qualifier是否與給定的值匹配
voidclose()釋放所有的資源或掛起內部緩沖區中的更新
Booleanexists(Get get)檢查Get實例所指定的值是否存在于HTable的列中
Resultget(Get get)獲取指定行的某些單元格所對應的值
byte[][]getEndKeys()獲取當前一打開的表每個區域的結束鍵值
ResultScannergetScanner(byte[] family)獲取當前給定列族的scanner實例
HTableDescriptorgetTableDescriptor()獲取當前表的HTableDescriptor實例
byte[]getTableName()獲取表名
static booleanisTableEnabled(HBaseConfiguration conf, String tableName)檢查表是否有效
voidput(Put put)向表中添加值

用法示例:

HTable table = new HTable(conf, Bytes.toBytes(tablename));
ResultScanner scanner =  table.getScanner(family);

六、Put

關系:org.apache.hadoop.hbase.client.Put

作用:用來對單個行執行添加操作

返回值函數描述
Putadd(byte[] family, byte[] qualifier, byte[] value)將指定的列和對應的值添加到Put實例中
Putadd(byte[] family, byte[] qualifier, long ts, byte[] value)將指定的列和對應的值及時間戳添加到Put實例中
byte[]getRow()獲取Put實例的行
RowLockgetRowLock()獲取Put實例的行鎖
longgetTimeStamp()獲取Put實例的時間戳
booleanisEmpty()檢查familyMap是否為空
PutsetTimeStamp(long timeStamp)設置Put實例的時間戳

用法示例:

HTable table = new HTable(conf,Bytes.toBytes(tablename));
Put p = new Put(brow);//為指定行創建一個Put操作p.add(family,qualifier,value);
table.put(p);

七、Get

關系:org.apache.hadoop.hbase.client.Get

作用:用來獲取單個行的相關信息

返回值函數描述
GetaddColumn(byte[] family, byte[] qualifier)獲取指定列族和列修飾符對應的列
GetaddFamily(byte[] family)通過指定的列族獲取其對應列的所有列
GetsetTimeRange(long minStamp,long maxStamp)獲取指定取件的列的版本號
GetsetFilter(Filter filter)當執行Get操作時設置服務器端的過濾器

用法示例:

HTable table = new HTable(conf, Bytes.toBytes(tablename));
Get g = new Get(Bytes.toBytes(row));

八、Result

關系:org.apache.hadoop.hbase.client.Result

作用:存儲Get或者Scan操作后獲取表的單行值。使用此類提供的方法可以直接獲取值或者各種Map結構(key-value對)

返回值函數描述
booleancontainsColumn(byte[] family, byte[] qualifier)檢查指定的列是否存在
NavigableMap<byte[],byte[]>getFamilyMap(byte[] family)獲取對應列族所包含的修飾符與值的鍵值對
byte[]getValue(byte[] family, byte[] qualifier)獲取對應列的最新值

九、ResultScanner

關系:Interface

作用:客戶端獲取值的接口

返回值函數描述
voidclose()關閉scanner并釋放分配給它的資源
Resultnext()獲取下一行的值

相關代碼:

package cn.itcast.hbase;

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.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.HTableInterface;
import org.apache.hadoop.hbase.client.HTablePool;
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;

public class HbaseDemo {

    private Configuration conf = null;
    
    @Before
    public void init(){
        conf = HBaseConfiguration.create();
        conf.set("hbase.zookeeper.quorum", "hadoop01,hadoop02,hadoop03");
    }
    
    @Test
    public void testDrop() throws Exception{
        HBaseAdmin admin = new HBaseAdmin(conf);
        admin.disableTable("account");
        admin.deleteTable("account");
        admin.close();
    }
    
    @Test
    public void testPut() throws Exception{
        HTable table = new HTable(conf, "user");
        Put put = new Put(Bytes.toBytes("rk0003"));
        put.add(Bytes.toBytes("info"), Bytes.toBytes("name"), Bytes.toBytes("liuyan"));
        table.put(put);
        table.close();
    }
    
    @Test
    public void testGet() throws Exception{
        //HTablePool pool = new HTablePool(conf, 10);
        //HTable table = (HTable) pool.getTable("user");
        HTable table = new HTable(conf, "user");
        Get get = new Get(Bytes.toBytes("rk0001"));
        //get.addColumn(Bytes.toBytes("info"), Bytes.toBytes("name"));
        get.setMaxVersions(5);
        Result result = table.get(get);
        //result.getValue(family, qualifier)
        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();
    }
    
    @Test
    public void testScan() throws Exception{
        HTablePool pool = new HTablePool(conf, 10);
        HTableInterface table = pool.getTable("user");
        Scan scan = new Scan(Bytes.toBytes("rk0001"), Bytes.toBytes("rk0002"));
        scan.addFamily(Bytes.toBytes("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()));
            }
            */
            byte[] value = r.getValue(Bytes.toBytes("info"), Bytes.toBytes("name"));
            System.out.println(new String(value));
        }
        pool.close();
    }
    
    
    @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();
    }

    public static void main(String[] args) throws Exception {
        Configuration conf = HBaseConfiguration.create();
        conf.set("hbase.zookeeper.quorum", "hadoop01,hadoop02,hadoop03");
        HBaseAdmin admin = new HBaseAdmin(conf);
        HTableDescriptor td = new HTableDescriptor("account");
        HColumnDescriptor cd = new HColumnDescriptor("info");
        cd.setMaxVersions(10);
        td.addFamily(cd);
        admin.createTable(td);
        admin.close();

    }
    
    public void createTable(String tableName, int maxVersion, String... cf){
        
    }

}

以上是“HBase中SHELL操作和API的用法示例”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南阳市| 昌吉市| 岫岩| 北票市| 烟台市| 孟州市| 连江县| 阜康市| 巴彦县| 杨浦区| 米脂县| 江都市| 高尔夫| 龙泉市| 麻栗坡县| 溆浦县| 乌苏市| 安徽省| 池州市| 德江县| 武山县| 溧阳市| 栖霞市| 平顶山市| 昭苏县| 曲麻莱县| 日喀则市| 石河子市| 白银市| 新竹市| 西林县| 临高县| 永顺县| 翼城县| 麻栗坡县| 平武县| 芦溪县| 孝昌县| 汪清县| 万宁市| 镶黄旗|