Programming/Java

SparkSQL on HBase 사용방법

라우드니스 2015. 11. 23. 14:34

*) 현재 날짜 (2015/11/23) 기준으로 Cloudera에서 제작했던 SparkOnHBase의 공식 HBase 에 통합된 HBASE-13392는 오로지 master branch( HBase-2.0.0-SNAPSHOP)에서만 사용할 수 있다. 사실 모든 branch와 tag를 돌아다닌건 아니라 딴데 있을수도...


현재 HBase의 공식 reference guide에는 SparkSQL을 이용해 HBase를 접근 가능하다고 나와있지만, 실제 HBase-1.1.2 package에서는 기원이 되는 project인 SparkOnHBase에서 HBaseContext및 몇개의 class가 없기 때문에 compile이 불가능하다. 


따라서 SparkSQL을 stable version인 hbase-1.1.2에서 사용하기 위해서는 해당 library 파일을 직접 hbase/lib 에 넣어줘야 한다. 


다음의 내용들은 현재 기준 최신 hbase의 master branch를 compile하면서 있었던 문제들을 적어놓은 것이다:


1. hbase-master branch compile시


maven으로 (mvn install -DskipTests) compile시 다음과 같은 오류가 났다:


java.lang.ClassNotFoundException: org.apache.commons.lang.StringUtils


-> 작성자의 경우 ubuntu 14.04 LTS version apt 저장소의 maven 버전이 너무 구버전이라 그랬다. maven 공식 홈페이지에서 새버전으로 받은 후 다시 compile하니 잘 됐다.


2. hbase-spark 의 hbase-spark-2.0.0-SNAPSHOT.jar 파일을 hbase/lib 에 전부 옮겨놓고, spark-submit 시 의존성도 줬지만 


Caused by: java.lang.ClassNotFoundException: org.apache.spark.sql.types.NativeType


와 같은 오류를 보았다.


-> Spark jira SPARK-7069 에 따르면, 기존 NativeType의 이름을 AtomicType으로 바꿨다고 한다. 적용 범위는 Spark 1.4.0 부터인데, 현재 작성자는 Spark-1.5.1을 사용중이였다. 


이 오류는 hbase-spark compile시 사용한 spark의 version이 너무 낮았던 것으로, 다시 1. 로 돌아가 hbase-spark 폴더의 pom.xml 파일을 보면 property의 spark.version이 1.3.0 으로 적혀있는걸 확인할 수 있다. 이 부분을 자신이 사용하고 있는 spark의 version에 맞춰서 알맞게 조절해서 (1.4.0 version 이상을 사용한다면 최소한 1.4.0 으로 적어줘야 한다.) compile 하면 더 이상 오류 없이 사용할 수 있다.


 


반응형