본문 바로가기
빅데이터/spark

[spark] spark2와 hive2 메타스토어 연결 오류 수정. java.lang.NoSuchFieldError: HIVE_STATS_JDBC_TIMEOUT

by hs_seo 2021. 6. 21.

spark2.x 와 hive 2.x 버전의 메타스토어를 연결하면 오류가 발생합니다. 지라에는 스파크 2.2 버전에서는 해결이 됐다고 나오지만 저는 2.4.6 버전에서도 오류가 발생했습니다. 관련 지라는 다음과 같습니다.

 

https://issues.apache.org/jira/browse/SPARK-18112

 

[SPARK-18112] Spark2.x does not support read data from Hive 2.x metastore - ASF JIRA

Hive2.0 has been released in February 2016, after that Hive2.0.1 and Hive2.1.0 have also been released for a long time, but till now spark only support to read hive metastore data from Hive1.2.1 and older version, since Hive2.x has many bugs fixed and perf

issues.apache.org

 

에러  원인

에러의 내용은 다음과 같습니다. HIVE_STATS_JDBC_TIMEOUT 필드를 찾지 못한다고 나옵니다.

scala> spark.sql("show databases").show()
java.lang.NoSuchFieldError: HIVE_STATS_JDBC_TIMEOUT
at org.apache.spark.sql.hive.HiveUtils$.formatTimeVarsForHiveClient(HiveUtils.scala:204)
at org.apache.spark.sql.hive.HiveUtils$.newClientForMetadata(HiveUtils.scala:285)

hive-exec-1.2.1.jar 파일을 확인하면 해당 필드가 있지만, hive-exec-2.3.8.jar 에서는 해당 필드를 확인할 수 없었습니다.

hive-exec-1.2.1.jar 파일

해결 방법

이 문제를 해결하는 방법은 두 가지가 있습니다.

스파크를 신규로 빌드해서 해당 정보를 처리하지 않도록 수정하는 방법이 있고, 스파크2용으로 빌드된 hive 1.2.1 라이브러리를 추가하면 됩니다.

 

메이븐에서 해당 파일들을 찾아서, 스파크 라이브러리 위치에 다음 파일들을 추가합니다.

  • hive-beeline-1.2.1.spark2.jar
  • hive-cli-1.2.1.spark2.jar
  • hive-exec-1.2.1.spark2.jar
  • hive-jdbc-1.2.1.spark2.jar
  • hive-metastore-1.2.1.spark2.jar

https://mvnrepository.com/artifact/org.spark-project.hive/hive-cli/1.2.1.spark2

 

반응형