Thrift를 사용하여 Ruby에서 HBase에 액세스하려는 경우
하고 싶은 일
Thrift를 사용하여 Ruby에서 HBase에 액세스하려고 합니다.(제목 엄마)
원래는 HBase에 REST API를 통해 접근하는 루비 프로그램이라고 쓰여 있었으나 Thrift만 지원하는 작업을 하려고 Thrift를 통해 접근하는 루비를 만드는 HBase 클라이언트와 이를 이용한 프로그램이었다.
쓴 동기
컨디션
다음 환경에서 확인했습니다.
개요
디테일
1. Thrift를 설치합니다.
brew에 확 들어왔어요.
brew install thrift
2.thriftgem 증가
gem install thrift
3. HBase 클라이언트 코드를 생성합니다.
thrift 명령을 사용하여 HBase 클라이언트를 생성합니다.
## HBaseのコードを取得 & 展開
wget http://ftp.riken.jp/net/apache/hbase/stable/hbase-1.4.10-src.tar.gz
tar zxvf hbase-1.4.10-src.tar.gz
## ソースコードの生成
thrift --gen rb hbase-1.4.10/hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift
[WARNING:/path/to/hbase-1.4.10/hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift:89] The "byte" type is a compatibility alias for "i8". Use "i8" to emphasize the signedness of this type.
라는 WARNING이 나타났다.HBase.thrift
89행byte
을 i8
로 개작하고 집행하면 순조롭다.(이렇게 하면 되는지 안 되는지 모르겠다만들기
gen-rb
이 폴더는 만들기hbase.rb
, hbase_constants.rb
, hbase_types.rb
세 개의 파일로 OK.나머지는 이 파일을 사용하여 Hbase에 접근하는 것입니다.4. HBase에서 데이터를 가져오는 코드를 씁니다.
Thrift를 사용하여 생성된 코드의 코드를 작성합니다.
main.rb
require './hbase'
require './hbase_constants'
require './hbase_types'
transport = Thrift::BufferedTransport.new(Thrift::Socket.new('hbase-host', 9090))
protocol = Thrift::BinaryProtocol.new(transport)
client = Apache::Hadoop::Hbase::Thrift::Hbase::Client.new(protocol)
transport.open()
# ネームスペース'test_name_space', テーブル'sample_table'の先頭から降順で10件取得する。(=末尾10件を取得する。)
scan = Apache::Hadoop::Hbase::Thrift::TScan.new
scan.reversed = true
scanner_id = client.scannerOpenWithScan("test_name_space:sample_table", scan, nil)
result = client.scannerGetList(scanner_id, 10)
result.each { |row_result| puts row_result.row }
transport.close()
Array<::Apache::Hadoop::Hbase::Thrift::TRowResult>
원하는 방식으로 가공하세요.Apache::Hadoop::Hbase::Thrift::TScan
를 사용하여 반대 순서의 옵션을 지정했지만 startRow
,stopRow
등도 지정할 수 있다.지정할 수 있는 옵션은 hbase_types.rb
의 TScan
클래스 정의입니다.$ ruby main.rb
rowKey9
rowKey8
rowKey7
rowKey6
rowKey5
rowKey4
rowKey3
rowKey2
rowKey1
rowKey0
마지막 폴더는 다음과 같습니다.gen-rb
├── hbase.rb
├── hbase_constants.rb
├── hbase_types.rb
└── main.rb
끝맺다
통일된 문서를 찾지 못하고 하루 동안 더듬어 시행하다 보니 내용이 한 시간 만에 끝난 것 같았다.
참고 자료
Reference
이 문제에 관하여(Thrift를 사용하여 Ruby에서 HBase에 액세스하려는 경우), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tbc/items/55526b260283a9b589be텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)