HBase - rowkey基础知识

时间:2013-04-10 05:22:12

标签: nosql hbase

注意:几个小时前我已经开始使用HBase而我来自RDBMS背景:P

我有一个类似RDBMS的表CUSTOMERS,其中包含以下列:

  1. CUSTOMER_ID STRING
  2. CUSTOMER_NAME STRING
  3. CUSTOMER_EMAIL STRING
  4. CUSTOMER_ADDRESS STRING
  5. CUSTOMER_MOBILE STRING
  6. 我想到了以下HBase等价物:

      

    table:CUSTOMERS rowkey:CUSTOMER_ID

         

    列系列:CUSTOMER_INFO

         

    列:NAME EMAIL ADDRESS MOBILE

    从我读过的内容来看,RDBMS表中的主键与HBase表的rowkey大致相似。因此,我想将CUSTOMER_ID保留为rowkey。

    我的问题是愚蠢和直截了当的:

    1. 无论我使用的是shell命令还是HBaseAdmin java class,我该如何定义rowkey?我没有找到任何可以做到的事情 无论是在shell中还是在HBaseAdmin类中(有些类似于 HBaseAdmin.createSuperKey(...))
    2. 给定HBase表,如何确定rowkey详细信息,即用作rowkey的值?
    3. 我知道rowkey设计是一件至关重要的事情。假设客户ID接收的值如CUST_12345,CUST_34434等,HBase如何使用rowkey来决定特定行所在的区域(假设区域概念类似于DB水平分区)?
    4. * * *已编辑以添加示例代码段

      我只是想在shell中使用'put'为customer表创建一行。我这样做了:

      hbase(main):011:0> put  'CUSTOMERS', 'CUSTID12345', 'CUSTOMER_INFO:NAME','Omkar Joshi'
      0 row(s) in 0.1030 seconds
      
      hbase(main):012:0> scan 'CUSTOMERS'
      ROW                              COLUMN+CELL
       CUSTID12345                     column=CUSTOMER_INFO:NAME, timestamp=1365600052104, value=Omkar Joshi
      1 row(s) in 0.0500 seconds
      
      hbase(main):013:0> put  'CUSTOMERS', 'CUSTID614', 'CUSTOMER_INFO:NAME','Prachi Shah', 'CUSTOMER_INFO:EMAIL','Prachi.Shah@lntinfotech.com'
      
      ERROR: wrong number of arguments (6 for 5)
      
      Here is some help for this command:
      Put a cell 'value' at specified table/row/column and optionally
      timestamp coordinates.  To put a cell value into table 't1' at
      row 'r1' under column 'c1' marked with the time 'ts1', do:
      
        hbase> put 't1', 'r1', 'c1', 'value', ts1
      
      
      hbase(main):014:0> put  'CUSTOMERS', 'CUSTID12345', 'CUSTOMER_INFO:EMAIL','Omkar.Joshi@lntinfotech.com'
      0 row(s) in 0.0160 seconds
      
      hbase(main):015:0>
      hbase(main):016:0* scan 'CUSTOMERS'
      ROW                              COLUMN+CELL
       CUSTID12345                     column=CUSTOMER_INFO:EMAIL, timestamp=1365600369284, value=Omkar.Joshi@lntinfotech.com
       CUSTID12345                     column=CUSTOMER_INFO:NAME, timestamp=1365600052104, value=Omkar Joshi
      1 row(s) in 0.0230 seconds
      

      因为最高限度。 5个参数,我无法弄清楚如何在一个put命令中插入整行。这导致同一行的增量版本不是必需的,我不确定CUSTOMER_ID是否被用作rowkey! 谢谢和问候!

1 个答案:

答案 0 :(得分:2)

  1. 你没有,密钥(以及任何其他专栏)都是一个bytearray,你可以放任何你想要的东西 - 甚至封装子实体

  2. 我不确定是否理解 - 每个值都存储为键+列族+列限定符+日期时间+值 - 所以键就在那里。

  3. HBase计算出记录将会去哪个区域。当地区变得太大时,重新划分。还有时,当有太多垃圾时,HBase执行压缩以重置文件。你可以控制自己预分区的时候,这是你未来应该考虑的事情。但是,由于您似乎刚刚开始使用HBase,因此可以从HBase开始处理。一旦您更好地了解了您的使用模式和数据,您可能希望再次讨论它。

  4. 您可以阅读/了解一下HBase架构设计herehere