Hive server 2에 python impyla 패키지로 접속하기

ipyhton 또는 그냥 python script로 Hive에 접속해서 SQL을 실행하고 결과 데이터를 가져오려면 굉장히 고통스럽습니다.

Python에서 사용할 수 있는 Hive 관련 패키지들이 상당히 불안하고 버그가 많습니다. 끝판왕이 하나 나와줬으면 싶은데 Hive가 일반 RDBMS 처럼 쓰는 것은 아니어서 그런지 깔끔하게 해결해 주는 패키지가 없습니다.

Hive 자체에서 제공하는 python client라는 것이 있긴한데 이걸 쓰려고하면 설정을 위해서 상당히 귀찮은 작업들을 해야 합니다.

배보다 배꼽이커요.

그런데
Cloudera에서 impala용 client를 만들어서 제공하는데 이 패키지로 HiveServer2에 접속하는 기능도 제공합니다.
HiveServer2에 접속할 수 있는 클라이언트를 제공하는 Python 패키지중에 pyhs2라는 것이 있는데 이 패키지도 동일한 기능을 제공하지만 더 이상 업데이트 하지 않고 impyla를 사용하라고 github에 pyhs2 제작자가 적어놨더군요.

그래서 현재까지 가장 쉽게 Python에서 HiveServer2에 접속하는 방법은  impyla 패키지를 쓰는 것입니다. (다른 더 쉬운 방법이 있으면 알려주세요)

impyla 패키지를 사용하려면 당연히 Hive server 2가 어딘가 네트워크로 접속할 수 있는 서버에서 작동하고 있어야 합니다. 이 클라이언트는 Hive server 2에 접속하는 것이니까요.

그냥 Hive하고 Hiver server 2가 다른 것이라는 것은 아시지요? Hive server 2는 Hive를 별도로 Daemon으로 띄워서 사용하게 해주는 add-on 입니다

그런데 이 패키지도 의존성으로 가진 Thrift 관련된 패키지가 조금 꼬여 있어서 설치할 때 조금 귀찮게 합니다. 그래서 impyla 패키지를 설치할 때 필요한 것들을 정리도 할겸 포스트로 올립니다.

CentOS Linux에서는 다음과 같은 문제를 고려해서 설치하면 현재는 작동이 됩니다.  각 환경마다 사정이 다르기 때문에 모두 동일하게 해결된다는 보장은 없습니다. Ubuntu에서는 안해봤습니다.

잘 될 것이라고 생각합니다.

impyla 관련 패키지 설치하기

우선 python package이름이 impala가 아니고 impyla 인것에 주의하시구요. 패키지 이름이 “임팔라”가 아니고 “임파일라”입니다.

설치할 때 주의해야 할 중요한  내용입니다.

  • Thrift에 접속할 때 인증을 위해서 sasl 관련 library가 필요합니다.  CentOS에서는 yum으로 검색해서 cyrus로 시작하는 sasl 패키지들을 설치해 주어야 합니다. 특히 cyrus-sasl-plain을 설치해야 Hive server 2에 plain 방식으로 id/password를 입력하고 접속할 수 있습니다.  빼먹지 말고 설치해야 합니다.
  • impyla 패키지가 thrift 패키지에 의존성을 가지는데 현재 0.9.3 이하가 아니면 작동하지 않도록 되어 있습니다.
    thrift의 현재 시점에서의 최신 버전은 0.10.0 입니다. 이미 이 버전으로 설치되어 있으면 downgrade해야합니다.
  • 기타 thrift 패키지 설치에 필요한 의존성 패키지가 있습니다만 환경에 따라 이미 설치가 되어 있을 수도 있습니다.
    의존성 오류가 발생하면 그 패키지를 설치하면 됩니다. 대충 막해도 큰 충돌은 없습니다.
  • impyla 패키지가 pypi에 등록된 것은 위와 같이 해도 trans관련 오류를 내면서 제대로 접속하지 못합니다.
    impyla를 설치할 때는 소스를 clone받아서 설치해야 합니다.
  • thrift_sasl 패키지도 설치해 주어야 thrift를 통한 인증과 암호화 문제를 해결할 수 있습니다.

제가 작업하는 환경에서 작업한 shell command를 정리한 것입니다.

이렇게 설치하고 나서 간단하게 작동하는지 다음과 같이 테스트해 보면됩니다. 서버주소와 ID, password, query는 환경에 맞게 수정해 보세요.

impyla 패키지의 github 레파지토리는 다음과 같습니다.

https://github.com/cloudera/impyla

향 후 패키지가 업데이트 되고 더 안정화되면 위의 자질구레한 문제들이 자동으로 해결될 수도 있을지도 모릅니다.

댓글 남기기