티스토리 뷰

Hive

Hive와 MySQL 연동 시 주의사항

blrunner 2013.04.04 00:01

Hive는 별도의 db와 연동하지 않을 경우, derbyDB에 메타 데이터를 저장합니다.


개인적인 스터디 용도의 경우 위와 같이 derbyDB를 사용하지만,

서비스를 준비하거나, 협업으로 Hive를 사용할 경우에 MySQL과 같은 RDBMS를 metastore로 이용하게 됩니다.


Hive와 MySQL을 연동하는 방법은 제 책에도 설명이 나와 있고,

검색을 조금만 해보시면 얼마든지 좋은 포스팅을 찾으실 수 있습니다.

(참고: http://blog.beany.co.kr/archives/1519)


오늘은 이때 주의할 점에 대해서 설명드리려고 합니다.


Hive는 Hadoop의 HDFS에 데이터를 저장해서, 반드시 Hadoop이 미리 설치되어 있어야 합니다.


Hadoop을 tar 파일을 설치한 그대로인 경우는 상관이 없으나,

Hadoop을 직접 build한 상태에서 Hive를 설치할 경우 문제가 발생합니다.


바로 이 로그 메세지가 저를 심난하게 했던 오류입니다.^^;;

2013-04-03 23:33:14,959 ERROR ql.Driver (SessionState.java:printError(400)) - FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask

2013-04-03 23:35:12,021 ERROR exec.Task (SessionState.java:printError(400)) - FAILED: Error in metadata: javax.jdo.JDOFatalInternalException: Unexpected exception caught.

NestedThrowables:

java.lang.reflect.InvocationTargetException

org.apache.hadoop.hive.ql.metadata.HiveException: javax.jdo.JDOFatalInternalException: Unexpected exception caught.

NestedThrowables:

java.lang.reflect.InvocationTargetException

at org.apache.hadoop.hive.ql.metadata.Hive.getDatabase(Hive.java:1080)

at org.apache.hadoop.hive.ql.metadata.Hive.databaseExists(Hive.java:1065)

at org.apache.hadoop.hive.ql.exec.DDLTask.showTables(DDLTask.java:1992)

at org.apache.hadoop.hive.ql.exec.DDLTask.execute(DDLTask.java:323)

at org.apache.hadoop.hive.ql.exec.Task.executeTask(Task.java:134)

at org.apache.hadoop.hive.ql.exec.TaskRunner.runSequential(TaskRunner.java:57)

at org.apache.hadoop.hive.ql.Driver.launchTask(Driver.java:1326)

at org.apache.hadoop.hive.ql.Driver.execute(Driver.java:1118)

at org.apache.hadoop.hive.ql.Driver.run(Driver.java:951)

at org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:258)

at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:215)

at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:406)

at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:689)

at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:557)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at org.apache.hadoop.util.RunJar.main(RunJar.java:156)


~~~~ 중략 ~~~~~~~


MySQL에 db를 미리 만들어 보기도 하고, hive-site.xml 을 몇번을 수정하기도 하고,

mysql 드라이버 버전을 바꿔보기도 하고, 온갖 삽집을 했는데요.


원인은 제가 직접 Hadoop을 build한게 문제가 됐었습니다. ㅠㅠ


https://issues.apache.org/jira/browse/HIVE-2473


aspectjtools-1.6.5.jar 파일이 CLASSPATH에 두 번 설정이 되면서 문제가 된건데요.


HIve를 제대로 설치하려면,

Hadoop의 홈 디렉토리($HADOOP_HOME)에 있는 build 디렉터리를 삭제하거나, 

$HADOOP_HOME이 $HADOOP_HOME/build 에 생성된 서브 디렉토리를 지정하도록 설정해야 합니다.


p.s 블로그를 퍼가실 때 (특히 copy&paste)는 반드시 출처를 남겨주세요~ ^^



저작자 표시 비영리 변경 금지
신고
댓글
댓글쓰기 폼