Thrift를 사용하여 Ruby에서 HBase에 액세스하려는 경우

6179 단어 thriftHBaseRuby

하고 싶은 일


Thrift를 사용하여 Ruby에서 HBase에 액세스하려고 합니다.(제목 엄마)
원래는 HBase에 REST API를 통해 접근하는 루비 프로그램이라고 쓰여 있었으나 Thrift만 지원하는 작업을 하려고 Thrift를 통해 접근하는 루비를 만드는 HBase 클라이언트와 이를 이용한 프로그램이었다.

쓴 동기

  • 루비가 Thrift를 이용하여 HBase에 접근하는 처리를 실시한 예를 찾지 못했기 때문이다.
  • 쓰리프트가 뭔지 모르는 상태가 자꾸 깨달음을 느끼는 상태가 된 것을 기념으로 한다.
  • 컨디션


    다음 환경에서 확인했습니다.
  • MacBook Air (13-inch, Early 2015)
  • Ruby 2.4.0
  • Amazon EMR HBase 1.3.1
  • EMR은 이번에 사용되었으나 로컬 환경에 구축된 HBase 서버도 가능합니다.
  • 개요

  • Thrift를 설치합니다.
  • thriftgem 증가.
  • HBase 클라이언트의 코드를 생성합니다.
  • 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
    
    
  • 필자의 환경에서 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행bytei8로 개작하고 집행하면 순조롭다.(이렇게 하면 되는지 안 되는지 모르겠다

  • 만들기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()
    
  • result가 되돌아오고Array<::Apache::Hadoop::Hbase::Thrift::TRowResult> 원하는 방식으로 가공하세요.
  • 상기 예에서 Apache::Hadoop::Hbase::Thrift::TScan를 사용하여 반대 순서의 옵션을 지정했지만 startRow,stopRow 등도 지정할 수 있다.지정할 수 있는 옵션은 hbase_types.rbTScan 클래스 정의입니다.
  • 실행 결과는 다음과 같습니다.
    $ 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
    

    끝맺다


    통일된 문서를 찾지 못하고 하루 동안 더듬어 시행하다 보니 내용이 한 시간 만에 끝난 것 같았다.

    참고 자료

    좋은 웹페이지 즐겨찾기