-
Notifications
You must be signed in to change notification settings - Fork 29k
[SPARK-26794][SQL]SparkSession enableHiveSupport does not point to hive but in-memory while the SparkContext exists #23709
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Closed
Closed
Changes from 1 commit
Commits
Show all changes
15 commits
Select commit
Hold shift + click to select a range
275e998
fix #SPARK-26794 SparkSession enableHiveSupport does not point to hiv…
yaooqinn e1eafe7
fix compile
yaooqinn 4a1a18b
add ut
yaooqinn 62d2aa3
clone conf and apply all initiate options to them
yaooqinn 8004c19
typo & fix ut
yaooqinn 10ebff7
not import map
yaooqinn f5c15e0
naming
yaooqinn d57226a
set conf to lazy val
yaooqinn 0c07ff1
fix ut
yaooqinn 35b3f17
add some comments
yaooqinn 0cac5e6
add more ut
yaooqinn 92fec4d
fix ut
yaooqinn 391e14c
mv confs behind warehousePath
yaooqinn eff569b
meaningful titles for uts
yaooqinn 748821c
rm one ut
yaooqinn File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
set conf to lazy val
- Loading branch information
commit d57226a2823fec0c881a2a32d9d595725d0d481b
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -39,21 +39,28 @@ import org.apache.spark.util.{MutableURLClassLoader, Utils} | |
|
|
||
| /** | ||
| * A class that holds all state shared across sessions in a given [[SQLContext]]. | ||
| * | ||
| * @param sparkContext The Spark context associated with this SharedState | ||
| * @param initialConfigs The configs from the very first created SparkSession | ||
| */ | ||
| private[sql] class SharedState( | ||
| val sparkContext: SparkContext, | ||
| initialConfigs: scala.collection.Map[String, String]) | ||
yaooqinn marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| extends Logging { | ||
| private val conf = sparkContext.conf.clone() | ||
| private val hadoopConf = new Configuration(sparkContext.hadoopConfiguration) | ||
|
|
||
| // If `SparkSession` is instantiated using an existing `SparkContext` instance and no existing | ||
| // `SharedState`, all `SparkSession` level configurations have higher priority to generate a | ||
| // `SharedState` instance. This will be done only once then shared across `SparkSession`s | ||
| initialConfigs.foreach { case (k, v) => | ||
| logDebug(s"Applying initial SparkSession options to SparkConf/HadoopConf: $k -> $v") | ||
| conf.set(k, v) | ||
| hadoopConf.set(k, v) | ||
|
|
||
| private lazy val (conf, hadoopConf) = { | ||
|
||
| val confClone = sparkContext.conf.clone() | ||
| val hadoopConfClone = new Configuration(sparkContext.hadoopConfiguration) | ||
| // If `SparkSession` is instantiated using an existing `SparkContext` instance and no existing | ||
| // `SharedState`, all `SparkSession` level configurations have higher priority to generate a | ||
| // `SharedState` instance. This will be done only once then shared across `SparkSession`s | ||
| for((k, v) <- initialConfigs | ||
| if k != "hive.metastore.warehouse.dir" || k != WAREHOUSE_PATH.key) { | ||
HyukjinKwon marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| logDebug(s"Applying initial SparkSession options to SparkConf/HadoopConf: $k -> $v") | ||
| confClone.set(k, v) | ||
| hadoopConfClone.set(k, v) | ||
| } | ||
| (confClone, hadoopConfClone) | ||
| } | ||
|
|
||
| // Load hive-site.xml into hadoopConf and determine the warehouse path we want to use, based on | ||
|
|
@@ -62,17 +69,17 @@ private[sql] class SharedState( | |
| val configFile = Utils.getContextOrSparkClassLoader.getResource("hive-site.xml") | ||
| if (configFile != null) { | ||
| logInfo(s"loading hive config file: $configFile") | ||
| hadoopConf.addResource(configFile) | ||
| sparkContext.hadoopConfiguration.addResource(configFile) | ||
| } | ||
|
|
||
| // hive.metastore.warehouse.dir only stay in hadoopConf | ||
| conf.remove("hive.metastore.warehouse.dir") | ||
| sparkContext.conf.remove("hive.metastore.warehouse.dir") | ||
| // Set the Hive metastore warehouse path to the one we use | ||
| val hiveWarehouseDir = hadoopConf.get("hive.metastore.warehouse.dir") | ||
| if (hiveWarehouseDir != null && !conf.contains(WAREHOUSE_PATH.key)) { | ||
| val hiveWarehouseDir = sparkContext.hadoopConfiguration.get("hive.metastore.warehouse.dir") | ||
| if (hiveWarehouseDir != null && !sparkContext.conf.contains(WAREHOUSE_PATH.key)) { | ||
| // If hive.metastore.warehouse.dir is set and spark.sql.warehouse.dir is not set, | ||
| // we will respect the value of hive.metastore.warehouse.dir. | ||
| conf.set(WAREHOUSE_PATH.key, hiveWarehouseDir) | ||
| sparkContext.conf.set(WAREHOUSE_PATH.key, hiveWarehouseDir) | ||
| logInfo(s"${WAREHOUSE_PATH.key} is not set, but hive.metastore.warehouse.dir " + | ||
| s"is set. Setting ${WAREHOUSE_PATH.key} to the value of " + | ||
| s"hive.metastore.warehouse.dir ('$hiveWarehouseDir').") | ||
|
|
@@ -82,14 +89,13 @@ private[sql] class SharedState( | |
| // the value of spark.sql.warehouse.dir. | ||
| // When neither spark.sql.warehouse.dir nor hive.metastore.warehouse.dir is set, | ||
| // we will set hive.metastore.warehouse.dir to the default value of spark.sql.warehouse.dir. | ||
| val sparkWarehouseDir = conf.get(WAREHOUSE_PATH) | ||
| val sparkWarehouseDir = sparkContext.conf.get(WAREHOUSE_PATH) | ||
| logInfo(s"Setting hive.metastore.warehouse.dir ('$hiveWarehouseDir') to the value of " + | ||
| s"${WAREHOUSE_PATH.key} ('$sparkWarehouseDir').") | ||
| hadoopConf.set("hive.metastore.warehouse.dir", sparkWarehouseDir) | ||
| sparkContext.hadoopConfiguration.set("hive.metastore.warehouse.dir", sparkWarehouseDir) | ||
| sparkWarehouseDir | ||
| } | ||
| } | ||
| sparkContext.conf.set(WAREHOUSE_PATH.key, warehousePath) | ||
| logInfo(s"Warehouse path is '$warehousePath'.") | ||
|
|
||
|
|
||
yaooqinn marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
|
@@ -102,9 +108,9 @@ private[sql] class SharedState( | |
| * A status store to query SQL status/metrics of this Spark application, based on SQL-specific | ||
| * [[org.apache.spark.scheduler.SparkListenerEvent]]s. | ||
| */ | ||
| val statusStore: SQLAppStatusStore = { | ||
| lazy val statusStore: SQLAppStatusStore = { | ||
| val kvStore = sparkContext.statusStore.store.asInstanceOf[ElementTrackingStore] | ||
| val listener = new SQLAppStatusListener(sparkContext.conf, kvStore, live = true) | ||
| val listener = new SQLAppStatusListener(conf, kvStore, live = true) | ||
| sparkContext.listenerBus.addToStatusQueue(listener) | ||
| val statusStore = new SQLAppStatusStore(kvStore, Some(listener)) | ||
| sparkContext.ui.foreach(new SQLTab(statusStore, _)) | ||
|
|
||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.