Hbase on Amazon EMR에 대한 발판 서버 액세스

6040 단어 GoAWSEMRHBase
확성기 Advent Calendar 2017째 날.

전제 조건

  • HBase on EMR
  • 을 AWS의 Private Subnet에 구축
  • 클라이언트 PC의 HBase 클라이언트에서 발판 서버(Bastion Server)를 통해 HBase
  • 에 액세스하고자 함

    서버 접속 정보의 예


    서버
    public IP
    private IP
    private DNS
    점프 서버
    1.2.3.4
    172.16.1.2
    -
    HBase(Master)
    -
    172.16.2.3
    ip-172-16-2-3.ap-northeast-1.compute.internal
    HBase(RegionServer)
    -
    172.16.2.4
    ip-172-16-2-4.ap-northeast-1.compute.internal

    환경을 확인하다

  • 클라이언트 OS
  • Windows7 64bit
  • SSH 클라이언트
  • PuTTY
  • HBase 클러스터
  • EMR5.4.0(Master 1대, Reginon Server 1대)
  • HBase 클라이언트

  • gohbase (master branch)
  • 과제

  • HBase 페달 서버를 통해 HBase 포트에 액세스해야 함
  • ↑SSH의Port forwarding을 통해 해결하였으나 다음 2개 문제
  • 발생
  • HBase는 집단 단위로 관찰할 때 포트가 중첩된다(예를 들어 마스터와 Reginon Server가 모두 2181 포트를 사용하기 때문에localhost의 2181 포트가 충돌한다)
  • ↑ 각 HBase의 서버에 클라이언트 PC의 로컬 주소를 구분하여Port forwarding
  • 개인 DNS(ip-x-xx-xx-x.ap-northeast-1.compute.internal)를 통해 연결 정보를 되돌려줍니다. 클라이언트 PC에서 Get,Put 실패를 해결할 수 없습니다
  • ↑Hosts에 추가연결정보로 해결
  • 작업


    각 HBase 서버에 대한 클라이언트 PC의 로컬 주소, SSH Port forwarding(문제 해결 #1, #2)

  • zokeeper와 HBase의 TCP 포트를 로컬 주소로 Port forwarding
  • HBase(Master)는 2181 및 16000 포트를 Port forwarding
  • 으로 설정
  • HBase는 2181 및 16020 포트를 Port forwarding
  • 으로 설정
    로컬 주소'127..0.3'을 Hbase(Master)에 할당하고, 로컬 주소'127..0.4'를 HBase(Reginon Server)에 할당할 때의 설정
    대상 IP 전송
    대상 포트 전송
    전송 소스 IP
    전송 소스 포트
    127.0.0.3
    16000
    172.16.2.3
    16000
    127.0.0.3
    2181
    172.16.2.3
    2181
    127.0.0.4
    16000
    172.16.2.4
    16020
    127.0.0.4
    2181
    172.16.2.4
    2181
  • putty 설정 이미지
  • 주의
  • EMR에서 HBase의 TCP 포트는 기본값과 다름
  • 참조
  • http://docs.aws.amazon.com/ja_jp/emr/latest/ReleaseGuide/emr-hbase-configure.html
  • Hosts에 연결 정보 추가(과제 해결 #3)

  • Port forwarding 작업 시 로컬 주소를 바탕으로hosts에 HBase의 개인 DNS
  • 를 추가합니다.
    hosts
    ## HBase Master
    127.0.0.3   ip-172-16-2-3.ap-northeast-1.compute.internal
    ## HBase RegionServer
    127.0.0.4   ip-172-16-2-4.ap-northeast-1.compute.internal
    

    확인

  • gohbase에서 동작 확인
  • 확인 코드(오류 처리 생략)
  • main.go
    package main
    
    import (
        "fmt"
        "context"
        "github.com/tsuna/gohbase"
        "github.com/tsuna/gohbase/hrpc"
    )
    
    func main() {
        // MasterのDNSを指定
        client := gohbase.NewClient("ip-172-16-2-3.ap-northeast-1.compute.internal")
        defer client.Close()
        family := map[string][]string{"testcf": []string{"testkey"}}
        getRequest, _ := hrpc.NewGetStr(context.Background(), "testtable", "testrow", hrpc.Families(family))
        getRsp, _ := client.Get(getRequest)
        fmt.Println(string(getRsp.Cells[0].Value))
    }
    
  • 실행 결과
  • > go run main.go
    testvalue
    

    총결산·감상

  • SSH Port forwarding 및 Hosts에 서버를 추가하여 페달 경유에도 HBase
  • 에 액세스할 수 있음
  • DNS나hostname로 되돌아오는 서비스라면 같은 방법으로 연결할 수 있어야 한다
  • 장점은 이 방법에 연결된 서버 대수가 여러 대가 되어도 포트가 방해가 되지 않는다는 것이다
  • EMR 재제작 시 주소가 변경되어 재작업이 필요한 것이 어려움
  • 좋은 웹페이지 즐겨찾기