spark 2.4.8, scala 2.11

에러 문구

org.apache.spark.sql.AnalysisException: Table or view not found: `dbName`.`tbName`; line 12 pos 9;

Intellij 에서 실행시킬 때 아주 잘 작동하였으나, 테스트 서버에 배포하여 spark-submit하니 위와 같이 해당 테이블을 찾지 못하는 문제가 발생하였다.

개인적으로 확인한 리스트

  1. MetaStore URL 설정여부
    val sparkConf: SparkConf = new SparkConf()
        .set("hive.metastore.uris", AppConfig.hiveMetastoreUrl)
- 위와 같이 `"hive.metastore.uris"`  에 metastore url을 잘 작성해주었나?
    - 당연히 intellij에서 실행이 잘 되는건 잘 넣어줬기 때문이다.
  1. enableHiveSupport() 설정 여부
    SparkSession.builder().config(SparkConfig.sparkConf)
                          .enableHiveSupport()
                          .getOrCreate()
  • 위와 같이 enableHiveSupport()를 잘 넣어 주었나?
    • 당연히 intellij에서 실행이 잘 되는건 잘 넣어줬기 때문이다.
  1. HDFS 권한 문제?
    hdfs dfs -ls /HiveTablePath
  • 따로 설정하지 않았지만, 확인 결과 문제는 없었다.
  1. Hive-site.xml을 제대로 읽지 못 했다?
    spark-submit \
    --class Execute class path \
    --master Mode \
    --jars "Extra library Path/*.jar" \
    --files Hive Site Path/hive-site.xml \
  • 빙고 Spark submit이 hive-site.xml을 읽어오지 않아 발생한 문제였다
    • metastore설정이 잘 되어 있는데 왜 잘 작동하지 못 하는지는 추후 확인 해 봐야겠다.

개인적인 팁

  • 한가지 팁으로는 --jars "Extra library Path/*.jar" ( 잘못된잘못된 정보를 공유하는 것일 수 있으니, 틀린 정보면 알려주시면 감사하겠습니다.)
    • 위 *.jar은 Spark 1.6을 사용할 때 사용불가였지만, 2.4로 넘어오니 동작하였다. (spark 1.6 : "~~/lib1.jar,lib2.jar....")
    • Extra library Path에 Prefix를 넣어 원격지의 jar파일을 가져와서 읽을 수 있다. (e.g: hdfs://///*.jar)
      • 필자 경험상 이렇게 안 하고 로컬의 library를 사용하면, 지속적으로 HDFS에 업로드
      • 위와 같이 실행하는 hdfs에 올려놓으면 업로드 하지 않고, 해당 lib에 링크걸어서 사용하는 것으로 보였다.

필자는 4번으로 해결했다. 이것도 아니였으면 더 많은 것을 찾아봐서 더 많은 오류 해결 방법을 습득했을 것 이지만, 그래도 빠르게 해결되서 다행이다.

+ Recent posts