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