Github user djvulee commented on a diff in the pull request:
https://github.com/apache/spark/pull/18651#discussion_r128943316
--- Diff:
resource-managers/yarn/src/main/scala/org/apache/spark/deploy/yarn/YarnAllocator.scala
---
@@ -525,9 +534,11 @@ private[yarn] class YarnAllocator(
} catch {
case NonFatal(e) =>
logError(s"Failed to launch executor $executorId on
container $containerId", e)
- // Assigned container should be released immediately to
avoid unnecessary resource
- // occupation.
+ // Assigned container should be released immediately
+ // to avoid unnecessary resource occupation.
amClient.releaseAssignedContainer(containerId)
+ } finally {
+ numExecutorsStarting.decrementAndGet()
--- End diff --
I agree that put `numExecutorsStarting.decrementAndGet()` together with
`numExecutorsRunning.incrementAndGet()` in the `updateInternalState` is better
if we can.
Why I try to put `numExecutorsStarting.decrementAndGet()` in the `finally`
block is that if there some Exceptions is not `NonFatal`, and caught by the
following code, we may can not allocated resources as we specified, this is
the same as @vanzin worried.
We may double the count in the current code, but this only slow down the
allocation rate for a small time.
---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]