2014-01-06 1 views
1

저는 Hadoop 및 HBase의 새로운 기능으로, 사용 사례로 사용할 수 있는지 배우고 평가하려고합니다. 그리고 Java에 익숙하지 않은 (기본적으로 Perl/Unix 및 DB 개발자) 가능한 경우 Hbase 셸에서 솔루션을 얻으려고합니다.HBase 셸 - 열 값 (열 이름이 아님)을 검색합니다 (열 이름이 아님)

감사 기록 ​​및 분석에 사용할 수있는 기록 데이터를 구현하려는 HBase 테이블 (아래 스키마)이 있습니다. 악기 나 물체 아이디 - - 최신 데이터가있는 안부 확인하려면이 옵션을 사용하여

은 기본 아래와 같이 구조,

rowkey 'cf1:id', 'cf1:price', 'cf1:user', 'cf1:timestamp' 

이제 rowkey을 가정합니다. 첫 번째 항목의 값은 1이며, 계속 진행됩니다. 사용자 - 업데이트 된 데이터

예 : 당신이 ID가 두 번째를 나타내는 2로 변경 표시되는 경우

는 처음에 데이터가

hbase(main):003:0> scan 'price_history' 
    ROW     COLUMN+CELL       
    row1     column=cf1:id, timestamp=1389020633920, value=1 
    row1     column=cf1:pr, timestamp=1389020654614, value=109.45 
    row1     column=cf1:us, timestamp=1389020668338, value=feed 
    row2     column=cf1:id, timestamp=1389020859674, value=2 
    row2     column=cf1:pr, timestamp=1389020697880, value=1345.65 
    row2     column=cf1:pr1, timestamp=1389020869856, value=200 
    row2     column=cf1:us, timestamp=1389020708403, value=feed 
    row2     column=cf1:us1, timestamp=1389020881601, value=user1` 

,

hbase(main):009:0> scan 'price_history' 
    ROW COLUMN+CELL                             
    row1  column=cf1:id, timestamp=1389020633920,value=1 
    row1  column=cf1:pr, timestamp=1389020654614, value=109.45 
    row1  column=cf1:us, timestamp=1389020668338, value=feed 
    row2  column=cf1:id, timestamp=1389020687334, value=1 
    row2  column=cf1:pr, timestamp=1389020697880, value=1345.65 
    row2  column=cf1:us, timestamp=1389020708403, value=feed 

지금 ROW2 나 악기 (2)는 새로운 가격과 같은 날에 업데이트됩니다 가정처럼 보인다 데이터 세트가 최신입니다. 새로운 값이나 열이 추가되었습니다. 나는이 원하는 것은

,

1) Can I fetch the value of columns id? i.e. the output should be 1 or 2 and not all other attribs 
    2) Based on the above o/p i will fetch the further data, but can I also have a search and o/p as value of rowkey? i.e. something like give me o/p of row having VALUE as row1 (I can have list of row1, row2, rown..) 

건축가 중 하나가 더 나은 솔루션을 제안 할 수있는 경우 (다른 솔루션도 환영합니다)

또한 가능한 한 많은 쉘 HBase를 가능하면 지원하십시오 모델 변경/가격 버전을 추적 할 테이블도 환영합니다.

감사합니다.

답변

2

출력 결과를 많이 출력하지 않고 셸에서 처리하기가 어렵습니다. 쉘 출력 형식화는 또한 행을 나누는 방법 때문에이 작업을 어렵게 만듭니다. 자바를 작성하는 것보다 가벼운 솔루션은 스캐너를 루비로 작성하는 것입니다. HBase는 jruby jar와 함께 제공되며 루비 스크립트를 실행할 수 있습니다.

include Java 
import "org.apache.hadoop.hbase.client.Scan" 
import "org.apache.hadoop.hbase.util.Bytes" 
import "org.apache.hadoop.hbase.client.HTable" 

config = HBaseConfiguration.create() 
family = Bytes.toBytes("family-name") 
qual = Bytes.toBytes("qualifier" 
scan = Scan.new() 
scan.addColumn(family, qualifier) 

table = HTable.new(config, "table-name") 
scanner = table.getScanner(scan) 
scanner.each do |result| 
    keyval = result.getColumnLatest(family, qualifier) 
    puts "#{Bytes.toDouble(keyval.getValue())}" 
end 

꽤 가까와 야합니다. 출력에 행 키와 같은 추가 데이터를 추가 할 수 있습니다. 그것을 실행하려면 hbase org.jruby.Main your_ruby_file.rb

+0

감사합니다. – Mihir

+0

네, 쉘에 대해서도 어렵 겠지만 POC에서 일하고 있기 때문에 저는 hte 디자인을 신속하게 마무리 할 생각이었습니다. 자바에 관한 매우 제한된 지식으로는 제가 성취 할 수 있다면 생각하고있었습니다. 이 접근법은 작업을 시작하기에 좋은 것처럼 보입니다. 아이디어를 주셔서 감사 드리며이를 위해 노력하겠습니다. – Mihir

관련 문제