2013-04-10 58 views
1

注意:它的前几个小时,我已经开始HBase的,我来自一个RDBMS背景:PHBase的 - rowkey基础

我有具有下列的RDBMS样CUSTOMERS表:

  1. CUSTOMER_ID STRING
  2. CUSTOMER_NAME STRING
  3. CUSTOMER_EMAIL STRING
  4. CUSTOMER_ADDRESS STRING
  5. CUSTOMER_MO胆汁STRING

我已经想好了下面的HBase等价的:

表:客户rowkey:CUSTOMER_ID

列族:CUSTOMER_INFO

列:姓名电子邮件地址MOBILE

从我读过的任何东西,主键在n RDBMS表是大致类似于到HBase表的rowkey。因此,我想保留CUSTOMER_ID作为rowkey。

我的问题是愚蠢的和直接的:

  1. 无论我是否使用shell命令或HBaseAdmin的java类 ,我怎么定义rowkey?我没发现什么做 无论是在外壳或HBaseAdmin类
  2. 给定一个HBase的表(如 HBaseAdmin.createSuperKey(...)的一些东西),如何确定rowkey细节,即这是用作rowkey的值?
  3. 据我所知,rowkey设计是一件至关重要的事情。假设客户ID接收到CUST_12345,CUST_34434等值,HBase如何使用rowkey决定特定行所在的区域(假设区域概念与DB水平分区类似)?

* * *编辑补充示例代码段

我只是想创建一个使用在shell“把”为客户表中的一行。我这样做:

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','[email protected]' 

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','[email protected]' 
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, [email protected] 
CUSTID12345      column=CUSTOMER_INFO:NAME, timestamp=1365600052104, value=Omkar Joshi 
1 row(s) in 0.0230 seconds 

由于把最大的花费。 5个参数,我无法弄清楚如何在一个放置命令中插入整行。这导致相同行的增量版本不是必需的,我不确定CUSTOMER_ID是否被用作rowkey! 谢谢,问候!

回答

1
  1. 你不这样做,关键(为此事任何其他列)是你可以把任何你想那里 - 即使封装子实体

  2. 不知道我理解的ByteArray - 每个值都存储为键+列家族+列限定符+日期时间+值 - 所以关键在那里。

  3. HBase计算出记录将在哪个区域发生。当地区变得太大时,它会重新分配。当HBase执行压缩以重新整理文件时,也会不时发现垃圾太多。你可以控制,当你预先划分自己,这是你应该在将来肯定考虑。但是,由于看起来您刚刚开始使用HBase,因此您可以从HBase开始考虑这一点。一旦你更好地理解了你的使用模式和数据,你可能会想再次重温。

可以读/听到一点关于HBase的架构设计herehere

+0

嗨嫩, 感谢您的答复!我详细阐述了我的问题,以便更清楚我不清楚的内容:D 感谢和问候! – 2013-04-10 08:08:36

+1

据我所知,你不能在hbase shell中插入多个列。你可以通过客户端API http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/RowMutations.html来做到这一点(它仍然是多个投入) – 2013-04-10 08:54:04

+0

这就是我害怕的: 你能清除我的rowkey疑问吗? – 2013-04-10 09:17:33