복붙노트

[HADOOP] Spark 통합 테스트를위한 Hive 구성

HADOOP

Spark 통합 테스트를위한 Hive 구성

테이블이 임시 디렉토리 또는 테스트 루트 아래에 작성되도록 Hive for Spark SQL 통합 테스트를 구성하는 방법을 찾고 있습니다. 내 조사에 따르면 HiveContext를 만들기 전에 fs.defaultFS와 hive.metastore.warehouse.dir을 모두 설정해야합니다.

이 답변에서 언급 한 것처럼 후자를 설정하면 Spark 1.6.1에서 작동하지 않습니다.

val sqlc = new HiveContext(sparkContext)
sqlc.setConf("hive.metastore.warehouse.dir", hiveWarehouseDir)

테이블 메타 데이터는 올바른 위치에 있지만 작성된 파일은 / user / hive / warehouse로 이동합니다.

데이터 프레임이 명확한 경로없이 저장된 경우 (예 :

df.write.saveAsTable("tbl")

파일을 쓸 위치는 HiveContext 생성 중에 캐시 된 것처럼 보이는 기본 데이터베이스의 위치를 ​​사용하는 HiveMetastoreCatalog.hiveDefaultTableFilePath에 대한 호출을 통해 결정되므로 HiveContext 생성 후 fs.defaultFS를 설정해도 아무런 영향이 없습니다.

또한 통합 테스트와 관련이 있지만 DROP TABLE tbl은 테이블 메타 데이터 만 제거하고 테이블 파일은 남겨두고 예상치 못한 결과를 초래합니다. 이것은 알려진 문제이며 (여기 및 여기 참조) 해결책은 hive.metastore.warehouse.dir == fs.defaultFS + user / hive / warehouse를 확인하는 것입니다.

간단히 말해 HiveContext 생성자가 실행되기 전에 fs.defaultFS 및 hive.metastore.warehouse.dir과 같은 구성 속성을 프로그래밍 방식으로 설정할 수 있습니까?

해결법

  1. ==============================

    1.Spark 2.0에서는 SparkSession을 만들기 전에 SparkSession 빌더에서 "spark.sql.warehouse.dir"을 설정할 수 있습니다. 올바르게 전파되어야합니다.

    Spark 2.0에서는 SparkSession을 만들기 전에 SparkSession 빌더에서 "spark.sql.warehouse.dir"을 설정할 수 있습니다. 올바르게 전파되어야합니다.

    Spark 1.6의 경우 프로그래밍 방식으로 hite-site.xml을 만드는 것이 가장 좋습니다.

  2. ==============================

    2.spark-testing-base 라이브러리에는 DataFrameSuiteBaseLike 설정의 일부로 구성된 TestHiveContext가 있습니다. 어떤 이유로 scala-testing-base를 직접 사용할 수없는 경우에도 구성이 어떻게 작동하는지 확인할 수 있습니다.

    spark-testing-base 라이브러리에는 DataFrameSuiteBaseLike 설정의 일부로 구성된 TestHiveContext가 있습니다. 어떤 이유로 scala-testing-base를 직접 사용할 수없는 경우에도 구성이 어떻게 작동하는지 확인할 수 있습니다.

  3. from https://stackoverflow.com/questions/37061544/hive-configuration-for-spark-integration-tests by cc-by-sa and MIT license