Data Engineering/HBase

HiveHBaseTableInputFormat.java

quantapia 2019. 2. 20. 14:25

이 파일은 Hbase에 있는 테이블을 Hive에서 생성할 때 (Metadata mapping) 사용된다.


Mapping 방법에 대해 HBase 개발자 닉 디미덕은 아래와 같이 제시한다.

(나는 닉 미더덕이라고 부르는데 HBase in Action 책 쓴사람이고 HBase 개발자다)



https://ko.hortonworks.com/blog/hbase-via-hive-part-1/


하나는 HBaseStorageHandler 를 이용하여 HBase 테이블을 Hive Metastore에 등록하는 방법이고

다른 하나는 HiveHBaseTableInputFormat 및 HiveHBaseTableOutputFormat. HBase 테이블을 Hive에 직접 등록하는 방법이다.


HBaseStorageHandler 는 Hbase Table과 상호작용을 한다.



근데 문제가 있다. 닉 디미덕이 HiveHBaseTableOutputFormat 을 구현하지 않았다..(see HIVE-4627). 

이런 미친 인간을 봤나

그래서 야기되는 문제는 Hbase의 테이블을 Hive로 포팅한 후 presto에서 쿼리를 실행하면 아래와 같은 에러가 발생한다.

presto:default> select * from test;

Query 20190220_051018_00005_frq8v failed: outputFormat should not be accessed from a null StorageFormat

java.lang.IllegalStateException: outputFormat should not be accessed from a null StorageFormat

이 문제는 Hive에서 현재 진행중이며 4.0.0 버전에 fix될 예정인데 4.0.0이 언제 release 될지는 모른다. 

https://issues.apache.org/jira/projects/HIVE/issues/HIVE-20678?filter=allissues

presto의 이전 버전(i.e > 0.152)에서는 잘 됐는데 최근 버전부터 문제가 발생한 듯하다.

https://github.com/prestodb/presto/pull/9837

Spark에서도 동일한 문제가 발생하고 있다.

더 웃긴거는 클라우데라는 이 이슈를 고쳐서 배포하고 있다.

http://archive.cloudera.com/cdh5/cdh/5/hive-1.1.0-cdh5.15.2.releasenotes.html

우린 AWS 에서 사용중인데 이 문제를 만나서 애먹었다.

On-Premis 상에서 CDH 배포판으로 운영했으면 이런 문제를 안만났겠지..

역시 클라우데라 멋지다. 클라우데라는 돈을 주고라도 쓰고싶다..역시 하둡의 아버지 부모 형제들이 만든 회사 답다. 믿음직스럽다.

다른분이 분명히 작년에 Hive에 Presto 올려서 잘 썼다고 하는 걸 들었는데 그분은 CDH를 사용한거였다..