빅데이터/spark
[spark] spark2와 hive2 메타스토어 연결 오류 수정. java.lang.NoSuchFieldError: HIVE_STATS_JDBC_TIMEOUT
hs_seo
2021. 6. 21. 20:20
spark2.x 와 hive 2.x 버전의 메타스토어를 연결하면 오류가 발생합니다. 지라에는 스파크 2.2 버전에서는 해결이 됐다고 나오지만 저는 2.4.6 버전에서도 오류가 발생했습니다. 관련 지라는 다음과 같습니다.
https://issues.apache.org/jira/browse/SPARK-18112
에러 원인
에러의 내용은 다음과 같습니다. 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 에서는 해당 필드를 확인할 수 없었습니다.
해결 방법
이 문제를 해결하는 방법은 두 가지가 있습니다.
스파크를 신규로 빌드해서 해당 정보를 처리하지 않도록 수정하는 방법이 있고, 스파크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
반응형