Major Study./Computer Science

Hadoop Hive -MetaException 에러 처리방법

sosal 2016. 11. 2. 17:29
반응형



Hadoop-Hive 연동 에러



hive에서 분명 show tables, show databases 등이 잘 동작하는데, Create table이 안되는 경우가 있다.


hive> show tables;

OK

Time taken: 0.141 seconds



그런데 Create Table을 하면 자세한 에러사항 없이 아래와 같이 FAILED 에러가 뜬다.

 > CREATE TABLE TABLE_NAMES (ID STRING, SYMBOL STRING, GENE_NAME STRING)
 >  ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
 >  LINES TERMINATED BY '\n'
 >  STORED AS TEXTFILE;

FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:For direct MetaStore DB connections, we don't support retries at the client level.)

그래서 처음엔 MetaStore에 해당하는 Database와 Hive의 연동에 문제가 있는 줄 알았다. (하지만 그게 아니었음 ㅠㅠ)



분명히 디비도 잘 만들었고, 디비 권한도 hive 계정에 다 주었고, hive-site.xml도 잘 설정했다.


mysql> create database hive_db;

Query OK, 1 row affected (0.01 sec)


mysql> use hive_db;

Database changed


mysql> create user 'hive_account'@'%' identified by 'hive_password';

Query OK, 0 rows affected (0.01 sec)


mysql> grant all privileges on hive_db.* to 'hive_account'@'%';

Query OK, 0 rows affected (0.01 sec)


mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)




#hive-site.xml


<?xml version="1.0"?>

<configuration>

<property>

  <name>hive.metastore.local</name>

  <value>true</value>

</property>


<property>

  <name>javax.jdo.option.ConnectionURL</name>

  <value>jdbc:mysql://localhost:3306/hive_db?createDatabaseIfNotExist=true</value>

  <description>JDBC connect string for a JDBC metastore</description>

</property>


<property>

  <name>javax.jdo.option.ConnectionDriverName</name>

  <value>com.mysql.jdbc.Driver</value>

  <description>Driver class name for a JDBC metastore</description>

</property>

<property>

  <name>javax.jdo.option.ConnectionUserName</name>

  <value>hive_account</value>

  <description>username to use against metastore database</description>

</property>


<property>

  <name>javax.jdo.option.ConnectionPassword</name>

  <value>hive_password</value>

  <description>password to use against metastore database</description>

</property>

</configuration>




FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:For direct MetaStore DB connections, we don't support retries at the client level.)


아무리 구글링을 해도 답이 안나올 즈음.. 중국인들의 사이트에서 답을 얻어냈다. ㅋ

https://github.com/leotse90/SparkNotes/blob/master/Hadoop%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98.md




alter database hive_db character set latin1;


Database encoding의 default 값을 UTF-8로 설정해놨었는데, latin1로 바꾸니까 잘 된다.



 > CREATE TABLE TABLE_NAMES (ID STRING, SYMBOL STRING, GENE_NAME STRING)
 >  ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
 >  LINES TERMINATED BY '\n'
 >  STORED AS TEXTFILE;
OK

Time taken: 1.541 seconds


Database의 character set 설정이 이렇게 중요했다는것..

이걸로 한 5시간 날린 것 같다 ㅠㅠ.