You are viewing a plain text version of this content. The canonical link for it is here.
Posted to reviews@spark.apache.org by "Kimahriman (via GitHub)" <gi...@apache.org> on 2023/08/02 18:57:19 UTC

[GitHub] [spark] Kimahriman opened a new pull request, #42301: [SPARK-44639][SQL] Add option to use the Java tmp dir for local RocksDB state storage

Kimahriman opened a new pull request, #42301:
URL: https://github.com/apache/spark/pull/42301

   <!--
   Thanks for sending a pull request!  Here are some tips for you:
     1. If this is your first time, please read our contributor guidelines: https://spark.apache.org/contributing.html
     2. Ensure you have added or run the appropriate tests for your PR: https://spark.apache.org/developer-tools.html
     3. If the PR is unfinished, add '[WIP]' in your PR title, e.g., '[WIP][SPARK-XXXX] Your PR title ...'.
     4. Be sure to keep the PR description updated to reflect all changes.
     5. Please write your PR title to summarize what this PR proposes.
     6. If possible, provide a concise example to reproduce the issue for a faster review.
     7. If you want to add a new configuration, please read the guideline first for naming configurations in
        'core/src/main/scala/org/apache/spark/internal/config/ConfigEntry.scala'.
     8. If you want to add or modify an error type or message, please read the guideline first in
        'core/src/main/resources/error/README.md'.
   -->
   
   ### What changes were proposed in this pull request?
   <!--
   Please clarify what changes you are proposing. The purpose of this section is to outline the changes and how this PR fixes the issue. 
   If possible, please consider writing useful notes for better and faster reviews in your PR. See the examples below.
     1. If you refactor some codes with changing classes, showing the class hierarchy will help reviewers.
     2. If you fix some SQL features, you can provide some references of other DBMSes.
     3. If there is design documentation, please add the link.
     4. If there is a discussion in the mailing list, please add the link.
   -->
   Adds a new config `spark.sql.streaming.stateStore.rocksdb.forceJavaTmpDir` that places the local working directory for RocksDB state store underneath `java.io.tmpdir` instead of going through `Utils.getLocalDir`. 
   
   ### Why are the changes needed?
   <!--
   Please clarify why the changes are needed. For instance,
     1. If you propose a new API, clarify the use case for a new API.
     2. If you fix a bug, you can clarify why it is a bug.
   -->
   On YARN, the local RocksDB directory is placed in a directory created inside the root application folder such as
   
   ```
   /tmp/nm-local-dir/usercache/<user>/appcache/<app_id>/spark-<uuid>/StateStoreId(...)
   ```
   
   The problem with this is that if an executor crashes for some reason (like OOM) and the shutdown hooks don't get run, this directory will stay around forever until the application finishes, which can cause jobs to slowly accumulate more and more temporary space until finally the node manager goes unhealthy.
   
   Because this data will only ever be accessed by the executor that created this directory, it would make sense to store the data inside the container folder, which will always get cleaned up by the node manager when that yarn container gets cleaned up. Yarn sets the `java.io.tmpdir` to a path inside this directory, such as
   
   ```
   /tmp/nm-local-dir/usercache/<user>/appcache/<app_id>/<container_id>/tmp/
   ```
   
   ### Does this PR introduce _any_ user-facing change?
   <!--
   Note that it means *any* user-facing change including all aspects such as the documentation fix.
   If yes, please clarify the previous behavior and the change this PR proposes - provide the console output, description and/or an example to show the behavior difference if possible.
   If possible, please also clarify if this is a user-facing change compared to the released Spark versions or within the unreleased branches such as master.
   If no, write 'No'.
   -->
   Adds a new config to allow users to opt-in to a different location to store local RocksDB state data.
   
   ### How was this patch tested?
   <!--
   If tests were added, say they were added here. Please make sure to add some test cases that check the changes thoroughly including negative and positive cases if possible.
   If it was tested in a way different from regular unit tests, please clarify how you tested step by step, ideally copy and paste-able, so that other reviewers can test and check, and descendants can verify in the future.
   If tests were not added, please describe why they were not added and/or why it was difficult to add.
   If benchmark tests were added, please run the benchmarks in GitHub Actions for the consistent environment, and the instructions could accord to: https://spark.apache.org/developer-tools.html#github-workflow-benchmarks.
   -->
   New UT


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] [spark] Kimahriman commented on pull request #42301: [SPARK-44639][SS] Add option to use the Java tmp dir for local RocksDB state storage

Posted by "Kimahriman (via GitHub)" <gi...@apache.org>.
Kimahriman commented on PR #42301:
URL: https://github.com/apache/spark/pull/42301#issuecomment-1662801850

   @HeartSaVioR 
   
   The config name is a little awkward and I hate adding more configs but I'm not familiar with other resource managers beyond yarn and any effects of making this change the default. I think on yarn there's no real drawbacks to this. The node manager picks one of the local dirs to put the container dir in, it just makes Spark deterministically use that same path instead of potentially a different configured local dir


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


Re: [PR] [SPARK-44639][SS][YARN] Use Java tmp dir for local RocksDB state storage on Yarn [spark]

Posted by "Kimahriman (via GitHub)" <gi...@apache.org>.
Kimahriman commented on PR #42301:
URL: https://github.com/apache/spark/pull/42301#issuecomment-1784231481

   After looking through the code a little bit, it looks like setting the java.io.tmpdir is only a YARN thing, so I updated this to just always use the tmpdir when running on Yarn, and removed the new ugly config.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


Re: [PR] [SPARK-44639][SS] Add option to use the Java tmp dir for local RocksDB state storage [spark]

Posted by "Kimahriman (via GitHub)" <gi...@apache.org>.
Kimahriman commented on PR #42301:
URL: https://github.com/apache/spark/pull/42301#issuecomment-1751368798

   > Yeah, this seems to be working around a specific resource manager in a corner case, I'm not sure if this is a good solution.
   
   I agree I don't like adding a config, I think it should be just globally changed to use the java tmp dir instead of the configured local dirs, but I don't know what the behavior is of k8s or standalone for how local directories work. I think it is currently incorrect behavior on YARN because it's using application level directories for executor/container specific temp files that should be deleted when that executor/container is finished or fails. It's not like shuffle data with a shuffle service that _should_ outlive the executor/container.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


Re: [PR] [SPARK-44639][SS] Add option to use the Java tmp dir for local RocksDB state storage [spark]

Posted by "srowen (via GitHub)" <gi...@apache.org>.
srowen commented on PR #42301:
URL: https://github.com/apache/spark/pull/42301#issuecomment-1750848802

   Yeah, this seems to be working around a specific resource manager in a corner case, I'm not sure if this is a good solution. 


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org