国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

HBase入門

2019-11-14 23:20:56
字體:
來源:轉載
供稿:網友
HBase入門一、HBase基本概念

1、Row key

  行主鍵,在對HBase進行查詢時候只能依靠Row key,HBase不支持條件查詢等類似于一些主流數據庫的查詢方式,讀取記錄只能依賴行主鍵以及進行全局掃面,可以將行主鍵想象成主流數據庫查詢過程中用到的主鍵(例如,id)。

2、Column Family

  列族,可以將列族想象成日常主流數據庫中的表結構的所有列的一個大管家,列族中存儲了所有列的名稱,整個表包括多少列,列族就包括多少(除去Row key和Timestamp列)。

3、Column

  列,HBase的每個列都隸屬于一個列族,以列族名稱作為前綴,同一列族中的所有列會聚集在一個存儲單元上,同時按照Column key進行排序。

4、Timestamp

  在HBase中,通過row key 和 Colum Family確定一份數據,同一個row key和Colum Family可能有多份不同的數據,HBase通過時間戳來區分這些數據,同時按照時間戳對左右的數據進行排序,最新的數據排在最前面,時間戳默認為系統當前時間(精確到毫秒),同時也可以人為設置該值。

5、Value

  我們在HBase表中精確查詢數據時,通過TableName找到表,接著通過Row key找到對應的行,然后通過ColumnKey找到相應的列,最后根據時間戳找到最新的需要查詢的值,這個值就是value。

6、存儲類型

  在HBase中,表名稱是字符串,行鍵和列名稱是二進制值(即就是java中的Byte[]),時間戳是一個64為的整數(Java中的long類型),最后的查詢結果Value是字節數組(Java中的byte[]類型)。

7、存儲結構

  在HBase中,整個數據表是按照行鍵進行排序,每行包括任意數量的列,列和列之間通過列鍵進行排序,每列包括若干的數據,整個HBase的存儲結構可以理解如下:

      Table (

        Row key,List(

          SortedMap(

            Column,list(

              Value,Timestamp

              )

            )

          )

        )

二、HBase基本Shell命令

1、創建表

  >>create 'table name','column family',...省略號代表后面可以追加若干列族

2、添加記錄

  >>put 'table name','row key',‘column family:column name','data'

  >>put 'table name','row key','column family:column name','data',

  >>...

  上面語句表示向表中添加若干條記錄,在data代表需要添加的數據,column family:column name代表在列族中的某一列中添加數據,每行中的列可以不同,每行可以有人一多的列。

3、查詢

  由上面可以知道,HBase僅支持依靠Row key查詢或者全表掃描,數據表按照row key的字典序進行排序,每行包含任意多的列,同時所有的列按照column key進行自動排序。

  >>get 'table name','row key'

4、更新

  >>put 'table name','row key','Column family name:Column name','data'

  上面這條語句代表將表中需要更新的數據的值更新為data。

5、條件查詢

  >>get 'table name','row key',{COLUNM=>'Column family name:column name',VERSIONS=>n}

  上面這條語句代表查詢表中column name這一列中的n條記錄,每列有許多條記錄,這些記錄按照時間戳倒序進行排列

  >>get 'table name','row key',{COLUNM=>'Column family name:column name',TIMESTAMP=>time}

  上面這條語句代表查詢表中column name這一列中時間戳大于time的所有記錄。

6、刪除記錄

  >>delete 'table name','row key','Column family name:Column name'

  HBase中delete語句只能刪除一列,上面這條語句代表刪除列名稱為Column name的所有數據。

  >>delete 'table name','row key'

  刪除key row行中所有的數據

7、刪除表

  >>disable 'table name'

  >>delete 'table name'

  刪除表時候需要注意,HBase中必須先使表disable,然后使用delete語句。

二、通過Java Api操作HBase

1、加載配置

  將HBase下的hbase-site.xml文件復制到所建工程目錄下,

1 Configuration conf = new Configuration;2 conf=HBaseConfiguration.create(conf);3 //conf.addResource("hbase-site-cluster.xml");//可以加載指定的文件

2、創建HBase表

1 /*---------------------創建表--------------------*/2 HTableDescriptor table = new HTableDescriptor("table-name");3 table.addFamily(new HColumnDescriptor("column family name1"));4 table.addFamily(new HColumnDescriptor("column family name2"));5 admin.createTable(table);
View Code

3、增加記錄

1 /*----------------------增加記錄-------------------*/2 Put put = new Put(Bytes.toBytes("row key"));3 put.add(Byte.toBytes("列族名稱"),Bytes.toBytes("列名稱"),Bytes.toBytes("內容"));4 put.add(Byte.toBytes("列族名稱"),Bytes.toBytes("列名稱"),Bytes.toBytes("內容"));5 put.add(Byte.toBytes("列族名稱"),Bytes.toBytes("列名稱"),Bytes.toBytes("內容"));6 put.add(Byte.toBytes("列族名稱"),Bytes.toBytes("列名稱"),Bytes.toBytes("內容"));7 table.put(put);

4、查詢記錄

1 /*-------------------根據row key查詢---------------------*/2 Get get = new Get(Bytes.toBytes("row key"));3 Result result = table.get(get);4 for(KeyValue var:reslut){5      System.out.

5、更新數據

1 /*-----------------更新數據---------------*/2 Get get = new Get(Bytes.toBytes("row key"));3 get.addColumn(Bytes.toBytes("列族"),Bytes.toBytes("列名"));4 assertThat(Bytes.toString(table.get(get).list.get(0).getValue()),is("原值"));5 Put put = new Put(Bytes.toBytes("行鍵"));6 put.add(Bytes.toBytes("列族"),Bytes.toBytes("列名"),Bytes.toBytes("新值"));7 table.put(put);
View Code

6、刪除記錄

 1 /*---------------刪除記錄----------------*/ 2 //刪除指定的列 3 Delete delete = new Delete(Bytes.toBytes("行鍵")): 4 delete.deleteColumns(Bytes.toBytes("列族"),Bytes.toBytes("列名")); 5 table.delete(delete); 6 assertThat(table.get(get).list,nullValue)); 7 //刪除所有的列 8 table.delete(delete); 9 assertThat(table.getScanner(scan).next),nullValue());10 //刪除整個表11 admin.disableTable("表名");12 admin.delete("表名");13 assertThat(admin.tableExists("表名"),is(false));
View Code


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乐昌市| 汉阴县| 太原市| 乡城县| 灵石县| 商都县| 阿克陶县| 监利县| 二连浩特市| 南充市| 密山市| 沿河| 定兴县| 辽阳市| 松江区| 姜堰市| 望江县| 读书| 巴楚县| 安乡县| 柳河县| 炎陵县| 庐江县| 井研县| 海南省| 潜山县| 阜阳市| 成武县| 宜都市| 黔江区| 石阡县| 云林县| 阳山县| 万山特区| 九江市| 金山区| 南昌县| 定边县| 翼城县| 建瓯市| 普陀区|