<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    hengheng123456789

      BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
      297 Posts :: 68 Stories :: 144 Comments :: 0 Trackbacks
    轉(zhuǎn)自:http://labs.chinamobile.com/mblog/4110_22332?wralxianxrnx

    HBase是Hadoop的一個(gè)子項(xiàng)目,HBase采用了Google BigTable的稀疏的,面向列的數(shù)據(jù)庫(kù)實(shí)現(xiàn)方式的理論,建立在hadoop的hdfs上,一方面里用了hdfs的高可靠性和可伸縮行,另外一方面里用了BigTable的高效數(shù)據(jù)組織形式.可以說(shuō)HBase為海量數(shù)據(jù)的real-time相應(yīng)提供了很好的一個(gè)開源解決方案.據(jù)說(shuō)在某運(yùn)營(yíng)商中使用類似于BigTable(個(gè)人猜測(cè)應(yīng)該就是HBase)的技術(shù)可以在兩秒時(shí)間內(nèi)從2TB數(shù)據(jù)中查找到某條話費(fèi)記錄.而這是原來(lái)該運(yùn)營(yíng)商使用Oracle數(shù)據(jù)庫(kù)所無(wú)法解決的問(wèn)題.


    對(duì)于HBase使用的類似與BigTable的技術(shù)我們這里就不仔細(xì)描述,可以參考google的論文以及網(wǎng)上的一些相關(guān)資料.另外,HBase的配置在HBase的官方文檔中有很詳細(xì)的描述.可以參見相關(guān)文檔.


    HBase提供了一個(gè)類似于mysql等關(guān)系型數(shù)據(jù)庫(kù)的shell.通過(guò)該shell我們可以對(duì)HBase的內(nèi)的相關(guān)表以及列族進(jìn)行控制和處理.HBase shell的help命令比較詳細(xì)的列出了HBase所支持的命令.具體使用方法可以參見其文檔.

    這里我們用一個(gè)學(xué)生成績(jī)表作為例子,對(duì)HBase的基本操作和基本概念進(jìn)行講解:

    下面是學(xué)生的成績(jī)表:

    name grad      course:math   course:art

    Tom    1         87                    97

    Jerry   2            100                  80

    這里grad對(duì)于表來(lái)說(shuō)是一個(gè)列,course對(duì)于表來(lái)說(shuō)是一個(gè)列族,這個(gè)列族由兩個(gè)列組成:math和art,當(dāng)然我們可以根據(jù)我們的需要在course中建立更多的列族,如computer,physics等相應(yīng)的列添加入course列族.

    有了上面的想法和需求,我們就可以在HBase中建立相應(yīng)的數(shù)據(jù)表啦!

    1, 建立一個(gè)表格 scores 具有兩個(gè)列族grad 和courese

    hbase(main):002:0> create 'scores', 'grade', 'course'

    0 row(s) in 4.1610 seconds

    2,查看當(dāng)先HBase中具有哪些表

    hbase(main):003:0> list

    scores

    1 row(s) in 0.0210 seconds

    3,查看表的構(gòu)造

    hbase(main):004:0> describe 'scores'

    {NAME => 'scores', IS_ROOT => 'false', IS_META => 'false', FAMILIES => [{NAME => 'course', BLOOMFILTER => 'false', IN_MEMORY => 'false', LENGTH => '2147483647', BLOCKCACHE => 'false', VERSIONS => '3', TTL => '-1', COMPRESSION => 'NONE'}, {NAME => 'grade', BLOOMFILTER => 'false', IN_MEMORY => 'false', LENGTH => '2147483647', BLOCKCACHE => 'false', VERSIONS => '3', TTL => '-1', COMPRESSION => 'NONE'}]}

    1 row(s) in 0.0130 seconds

    4, 加入一行數(shù)據(jù),行名稱為 Tom 列族grad的列名為”” 值位1

    hbase(main):005:0> put 'scores', 'Tom', 'grade:', '1'

    0 row(s) in 0.0070 seconds

    5,給Tom這一行的數(shù)據(jù)的列族添加一列 <math,87>

    hbase(main):006:0> put 'scores', 'Tom', 'course:math', '87'

    0 row(s) in 0.0040 seconds

    6,給Tom這一行的數(shù)據(jù)的列族添加一列 <art,97>

    hbase(main):007:0> put 'scores', 'Tom', 'course:art', '97'

    0 row(s) in 0.0030 seconds

    7, 加入一行數(shù)據(jù),行名稱為 Jerry 列族grad的列名為”” 值位2

    hbase(main):008:0> put 'scores', 'Jerry', 'grade:', '2'

    0 row(s) in 0.0040 seconds

    8,給Jerry這一行的數(shù)據(jù)的列族添加一列 <math,100>

    hbase(main):009:0> put 'scores', 'Jerry', 'course:math', '100'

    0 row(s) in 0.0030 seconds

    9,給Jerry這一行的數(shù)據(jù)的列族添加一列 <art,80>

    hbase(main):010:0> put 'scores', 'Jerry', 'course:art', '80'

    0 row(s) in 0.0050 seconds

    10,查看scores表中Tom的相關(guān)數(shù)據(jù)

    hbase(main):011:0> get 'scores', 'Tom'

    COLUMN                       CELL

     course:art                  timestamp=1224726394286, value=97

     course:math                 timestamp=1224726377027, value=87

     grade:                      timestamp=1224726360727, value=1

    3 row(s) in 0.0070 seconds

    11,查看scores表中所有數(shù)據(jù)

    hbase(main):012:0> scan 'scores'

    ROW                          COLUMN+CELL

     Tom                         column=course:art, timestamp=1224726394286, value=97

     Tom                         column=course:math, timestamp=1224726377027, value=87

     Tom                         column=grade:, timestamp=1224726360727, value=1

     Jerry                        column=course:art, timestamp=1224726424967, value=80

     Jerry                        column=course:math, timestamp=1224726416145, value=100

     Jerry                        column=grade:, timestamp=1224726404965, value=2

    6 row(s) in 0.0410 seconds

    12,查看scores表中所有數(shù)據(jù)courses列族的所有數(shù)據(jù)

    hbase(main):013:0> scan 'scores', ['course:']

    ROW                          COLUMN+CELL

     Tom                         column=course:art, timestamp=1224726394286, value=97

     Tom                         column=course:math, timestamp=1224726377027, value=87

     Jerry                        column=course:art, timestamp=1224726424967, value=80

     Jerry                        column=course:math, timestamp=1224726416145, value=100

    4 row(s) in 0.0200 seconds

    上面就是HBase的基本shell操作的一個(gè)例子,可以看出,hbase的shell還是比較簡(jiǎn)單易用的,從中也可以看出HBase shell缺少很多傳統(tǒng)sql中的一些類似于like等相關(guān)操作,當(dāng)然,HBase作為BigTable的一個(gè)開源實(shí)現(xiàn),而BigTable是作為google業(yè)務(wù)的支持模型,很多sql語(yǔ)句中的一些東西可能還真的不需要.

    當(dāng)然,通過(guò)程序我們也可以對(duì)HBase進(jìn)行相關(guān)的操作.下面的程序就完成了上面shell操作的內(nèi)容:

    import java.io.IOException;

    import java.io.ByteArrayOutputStream;

    import java.io.DataOutputStream;

    import java.io.ByteArrayInputStream;

    import java.io.DataInputStream;

    import java.util.Map;

    import org.apache.hadoop.io.Writable;

    import org.apache.hadoop.io.IntWritable;

    import org.apache.hadoop.hbase.HBaseConfiguration;

    import org.apache.hadoop.hbase.HTableDescriptor;

    import org.apache.hadoop.hbase.HColumnDescriptor;

    import org.apache.hadoop.hbase.client.HBaseAdmin;

    import org.apache.hadoop.hbase.client.HTable;

    import org.apache.hadoop.hbase.io.BatchUpdate;

    import org.apache.hadoop.hbase.io.RowResult;

    import org.apache.hadoop.hbase.io.Cell;

    import org.apache.hadoop.hbase.util.Writables;


    public class HBaseBasic {


        public static void main(String[] args) throws Exception {

            HBaseConfiguration config = new HBaseConfiguration();

            HBaseAdmin admin = new HBaseAdmin(config);


            if (admin.tableExists("scores")) {

                System.out.println("drop table");

                admin.disableTable("scores");

                admin.deleteTable("scores");

            }


            System.out.println("create table");

            HTableDescriptor tableDescripter = newHTableDescriptor("scores".getBytes());

            tableDescripter.addFamily(newHColumnDescriptor("grade:"));

            tableDescripter.addFamily(newHColumnDescriptor("course:"));

            admin.createTable(tableDescripter);


            HTable table = new HTable(config, "scores");


            System.out.println("add Tom's data");

            BatchUpdate tomUpdate = new BatchUpdate("Tom");

            tomUpdate.put("grade:", Writables.getBytes(newIntWritable(1)));

            tomUpdate.put("course:math", Writables.getBytes(newIntWritable(87)));

            tomUpdate.put("course:art", Writables.getBytes(newIntWritable(97)));

            table.commit(tomUpdate);


            System.out.println("add Jerry's data");

            BatchUpdate jerryUpdate = new BatchUpdate("Jerry");

            jerryUpdate.put("grade:", Writables.getBytes(newIntWritable(2)));

            jerryUpdate.put("course:math", Writables.getBytes(newIntWritable(100)));

            jerryUpdate.put("course:art", Writables.getBytes(newIntWritable(80)));

            table.commit(jerryUpdate);


            for (RowResult row : table.getScanner(new String[] {"course:" })) {

                System.out.format("ROW\t%s\n"newString(row.getRow()));

                for (Map.Entry<byte[], Cell> entry : row.entrySet()) {

                    String column = new String(entry.getKey());

                    Cell cell = entry.getValue();

                    IntWritable value = new IntWritable();

                    Writables.copyWritable(cell.getValue(), value);

                    System.out.format("  COLUMN\t%s\t%d\n", column, value.get());

                }

            }

        }

    }

    輸出如下:

    drop table

    09/07/11 08:51:59 INFO client.HBaseAdmin: Disabled scores

    09/07/11 08:51:59 INFO client.HBaseAdmin: Deleted scores

    create table

    add Tom's data

    add Jerry's data

    ROW     Tom

      COLUMN        course:art      97

      COLUMN        course:math     87

    ROW     Jerry

      COLUMN        course:art      80

      COLUMN        course:math     100

    posted on 2010-12-30 10:25 哼哼 閱讀(1028) 評(píng)論(0)  編輯  收藏 所屬分類:
    主站蜘蛛池模板: 亚洲国产精品无码久久久蜜芽| 免费视频成人国产精品网站| 99爱在线精品视频免费观看9| 亚洲综合精品网站在线观看| 日本亚洲欧美色视频在线播放| 性xxxxx免费视频播放| 亚洲人成在线电影| 成人一区二区免费视频| 日产国产精品亚洲系列| 亚洲Av永久无码精品黑人| 青苹果乐园免费高清在线| 亚洲欧洲中文日产| 1000部啪啪毛片免费看| 亚洲av之男人的天堂网站| 国产精品免费久久久久久久久 | av网站免费线看| 亚洲AV无码不卡在线观看下载| 亚洲av永久无码天堂网| 毛片A级毛片免费播放| 麻豆狠色伊人亚洲综合网站| 国产妇乱子伦视频免费| 亚洲黄色在线网站| 毛片无码免费无码播放| 亚洲网站在线观看| 日本xxxx色视频在线观看免费| 亚洲高清国产AV拍精品青青草原| 男女拍拍拍免费视频网站| 国产精品亚洲mnbav网站 | 亚洲日本一区二区三区在线| 国产成人1024精品免费| 中文字幕亚洲综合久久男男| 亚洲精品国产日韩无码AV永久免费网| 亚洲黄片毛片在线观看| 国产成人自产拍免费视频| 国产亚洲美日韩AV中文字幕无码成人| ww在线观视频免费观看w| 日日噜噜噜噜夜夜爽亚洲精品| 国产精品永久免费视频| 国产亚洲婷婷香蕉久久精品 | 成年人免费网站在线观看| 亚洲影院天堂中文av色|