이 파일은 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를 사용한거였다..