Skip to content

Commit 4f5ee80

Browse files
pan3793dongjoon-hyun
authored andcommitted
[SPARK-51311][BUILD] Promote bcprov-jdk18on to compile scope
### What changes were proposed in this pull request? Promote `org.bouncycastle:bcprov-jdk18on` to `compile` scope (actually `hadoop.deps.scope`). ### Why are the changes needed? HDFS-15098 (3.4.0) adds hard dependency on `bcprov-jdk18on`, Spark fails to submit to Kerberized cluster without this dependency, until HADOOP-19152 (3.5.0, unreleased) ``` Exception in thread "main" java.lang.NoClassDefFoundError: org/bouncycastle/jce/provider/BouncyCastleProvider at org.apache.hadoop.crypto.key.kms.KMSClientProvider$KMSTokenRenewer.handleKind(KMSClientProvider.java:181) at org.apache.hadoop.security.token.Token.getRenewer(Token.java:467) at org.apache.hadoop.security.token.Token.renew(Token.java:500) at org.apache.spark.deploy.security.HadoopFSDelegationTokenProvider.$anonfun$getTokenRenewalInterval$3(HadoopFSDelegationTokenProvider.scala:147) at scala.runtime.java8.JFunction0$mcJ$sp.apply(JFunction0$mcJ$sp.scala:17) at scala.util.Try$.apply(Try.scala:217) at org.apache.spark.deploy.security.HadoopFSDelegationTokenProvider.$anonfun$getTokenRenewalInterval$2(HadoopFSDelegationTokenProvider.scala:146) at scala.collection.StrictOptimizedIterableOps.flatMap(StrictOptimizedIterableOps.scala:118) at scala.collection.StrictOptimizedIterableOps.flatMap$(StrictOptimizedIterableOps.scala:105) at scala.collection.mutable.ArrayBuffer.flatMap(ArrayBuffer.scala:42) at org.apache.spark.deploy.security.HadoopFSDelegationTokenProvider.getTokenRenewalInterval(HadoopFSDelegationTokenProvider.scala:145) at org.apache.spark.deploy.security.HadoopFSDelegationTokenProvider.obtainDelegationTokens(HadoopFSDelegationTokenProvider.scala:62) at org.apache.spark.deploy.security.HadoopDelegationTokenManager.$anonfun$obtainDelegationTokens$2(HadoopDelegationTokenManager.scala:169) at scala.collection.Iterator$$anon$10.nextCur(Iterator.scala:594) at scala.collection.Iterator$$anon$10.hasNext(Iterator.scala:608) at scala.collection.immutable.List.prependedAll(List.scala:152) at scala.collection.immutable.List$.from(List.scala:685) at scala.collection.immutable.List$.from(List.scala:682) at scala.collection.IterableFactory$Delegate.from(Factory.scala:288) at scala.collection.immutable.Iterable$.from(Iterable.scala:35) at scala.collection.immutable.Iterable$.from(Iterable.scala:32) at scala.collection.IterableFactory$Delegate.from(Factory.scala:288) at scala.collection.IterableOps.flatMap(Iterable.scala:686) at scala.collection.IterableOps.flatMap$(Iterable.scala:686) at scala.collection.AbstractIterable.flatMap(Iterable.scala:935) at org.apache.spark.deploy.security.HadoopDelegationTokenManager.org$apache$spark$deploy$security$HadoopDelegationTokenManager$$obtainDelegationTokens(HadoopDelegationTokenManager.scala:167) at org.apache.spark.deploy.security.HadoopDelegationTokenManager$$anon$2.run(HadoopDelegationTokenManager.scala:150) at org.apache.spark.deploy.security.HadoopDelegationTokenManager$$anon$2.run(HadoopDelegationTokenManager.scala:148) at java.base/java.security.AccessController.doPrivileged(AccessController.java:712) at java.base/javax.security.auth.Subject.doAs(Subject.java:439) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1953) at org.apache.spark.deploy.security.HadoopDelegationTokenManager.obtainDelegationTokens(HadoopDelegationTokenManager.scala:148) at org.apache.spark.scheduler.cluster.CoarseGrainedSchedulerBackend.$anonfun$start$1(CoarseGrainedSchedulerBackend.scala:632) at org.apache.spark.scheduler.cluster.CoarseGrainedSchedulerBackend.$anonfun$start$1$adapted(CoarseGrainedSchedulerBackend.scala:626) at scala.Option.foreach(Option.scala:437) at org.apache.spark.scheduler.cluster.CoarseGrainedSchedulerBackend.start(CoarseGrainedSchedulerBackend.scala:626) at org.apache.spark.scheduler.cluster.YarnClientSchedulerBackend.start(YarnClientSchedulerBackend.scala:49) at org.apache.spark.scheduler.TaskSchedulerImpl.start(TaskSchedulerImpl.scala:237) at org.apache.spark.SparkContext.<init>(SparkContext.scala:622) at org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:3059) at org.apache.spark.sql.classic.SparkSession$Builder.$anonfun$build$2(SparkSession.scala:906) at scala.Option.getOrElse(Option.scala:201) at org.apache.spark.sql.classic.SparkSession$Builder.build(SparkSession.scala:897) at org.apache.spark.sql.classic.SparkSession$Builder.getOrCreate(SparkSession.scala:926) at org.apache.spark.sql.classic.SparkSession$Builder.getOrCreate(SparkSession.scala:799) at org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:923) at org.apache.spark.sql.hive.thriftserver.SparkSQLEnv$.init(SparkSQLEnv.scala:64) at org.apache.spark.sql.hive.thriftserver.SparkSQLCLIDriver.<init>(SparkSQLCLIDriver.scala:405) at org.apache.spark.sql.hive.thriftserver.SparkSQLCLIDriver$.main(SparkSQLCLIDriver.scala:162) at org.apache.spark.sql.hive.thriftserver.SparkSQLCLIDriver.main(SparkSQLCLIDriver.scala) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:569) at org.apache.spark.deploy.JavaMainApplication.start(SparkApplication.scala:52) at org.apache.spark.deploy.SparkSubmit.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:1032) at org.apache.spark.deploy.SparkSubmit.doRunMain$1(SparkSubmit.scala:204) at org.apache.spark.deploy.SparkSubmit.submit(SparkSubmit.scala:227) at org.apache.spark.deploy.SparkSubmit.doSubmit(SparkSubmit.scala:96) at org.apache.spark.deploy.SparkSubmit$$anon$2.doSubmit(SparkSubmit.scala:1137) at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:1146) at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala) Caused by: java.lang.ClassNotFoundException: org.bouncycastle.jce.provider.BouncyCastleProvider at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) ... 62 more ``` ### Does this PR introduce _any_ user-facing change? No. ### How was this patch tested? Manually tested on a Kerberized cluster. ### Was this patch authored or co-authored using generative AI tooling? No. Closes apache#50077 from pan3793/SPARK-51311. Authored-by: Cheng Pan <[email protected]> Signed-off-by: Dongjoon Hyun <[email protected]>
1 parent 0184c5b commit 4f5ee80

File tree

4 files changed

+25
-0
lines changed

4 files changed

+25
-0
lines changed

LICENSE-binary

+1
Original file line numberDiff line numberDiff line change
@@ -476,6 +476,7 @@ dev.ludovic.netlib:blas
476476
dev.ludovic.netlib:arpack
477477
dev.ludovic.netlib:lapack
478478
net.razorvine:pickle
479+
org.bouncycastle:bcprov-jdk18on
479480
org.checkerframework:checker-qual
480481
org.typelevel:algebra_2.13:jar
481482
org.typelevel:cats-kernel_2.13

assembly/pom.xml

+10
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,16 @@
136136
<artifactId>guava</artifactId>
137137
<scope>${hadoop.deps.scope}</scope>
138138
</dependency>
139+
140+
<!--
141+
SPARK-51311: HDFS-15098 (3.4.0) adds hard dependency on bcprov-jdk18on, Spark fails to submit
142+
to Kerberized cluster without this dependency, until HADOOP-19152 (3.5.0, unreleased)
143+
-->
144+
<dependency>
145+
<groupId>org.bouncycastle</groupId>
146+
<artifactId>bcprov-jdk18on</artifactId>
147+
<scope>${hadoop.deps.scope}</scope>
148+
</dependency>
139149
</dependencies>
140150

141151
<build>

dev/deps/spark-deps-hadoop-3-hive-2.3

+1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ avro/1.12.0//avro-1.12.0.jar
2727
azure-data-lake-store-sdk/2.3.9//azure-data-lake-store-sdk-2.3.9.jar
2828
azure-keyvault-core/1.0.0//azure-keyvault-core-1.0.0.jar
2929
azure-storage/7.0.1//azure-storage-7.0.1.jar
30+
bcprov-jdk18on/1.80//bcprov-jdk18on-1.80.jar
3031
blas/3.0.3//blas-3.0.3.jar
3132
breeze-macros_2.13/2.1.0//breeze-macros_2.13-2.1.0.jar
3233
breeze_2.13/2.1.0//breeze_2.13-2.1.0.jar
+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
Copyright (c) 2000-2024 The Legion of the Bouncy Castle Inc. (https://www.bouncycastle.org).
2+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
3+
associated documentation files (the "Software"), to deal in the Software without restriction,
4+
including without limitation the rights to use, copy, modify, merge, publish, distribute,
5+
sub license, and/or sell copies of the Software, and to permit persons to whom the Software is
6+
furnished to do so, subject to the following conditions: The above copyright notice and this
7+
permission notice shall be included in all copies or substantial portions of the Software.
8+
9+
**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
10+
NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
11+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
12+
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
13+
OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.**

0 commit comments

Comments
 (0)