You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@spark.apache.org by "jagadeesh (Jira)" <ji...@apache.org> on 2022/06/19 17:40:00 UTC

[jira] [Resolved] (SPARK-39033) Support --proxy-user for Spark on K8s not working

     [ https://issues.apache.org/jira/browse/SPARK-39033?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

jagadeesh resolved SPARK-39033.
-------------------------------
    Resolution: Duplicate

> Support --proxy-user for Spark on K8s not working
> -------------------------------------------------
>
>                 Key: SPARK-39033
>                 URL: https://issues.apache.org/jira/browse/SPARK-39033
>             Project: Spark
>          Issue Type: Bug
>          Components: Kubernetes
>    Affects Versions: 3.2.0
>            Reporter: jagadeesh
>            Priority: Major
>
> we are running into problem when we submit spark job with --proxy-user on K8s. 
> here are the setups follows, 
>  * Service id is configured properly in HDFS side .
>  
> {code:java}
>     <property>
>       <name>hadoop.proxyuser.serviceid.groups</name>
>       <value>*</value>
>     </property>    
>     <property>
>       <name>hadoop.proxyuser.serviceid.hosts</name>
>       <value>*</value>
>     </property>    <property>
>       <name>hadoop.proxyuser.serviceid.users</name>
>       <value>*</value>
>     </property>{code}
>  
>  * Getting service id Kerberos ticket in spark client.
>  * Running spark job without --proxy-user connecting to Kerberized HDFS cluster  - {color:#00875a}WORKS AS EXPECTED .{color}
>  * Running spark job with --proxy-user=<username> connecting to Kerberized HDFS cluster - {color:#de350b}FAILS{color}
> {code:java}
> $SPARK_HOME/bin/spark-submit \
>     --master <K8S_APISERVER> \
>     --deploy-mode cluster \
>     --proxy-user <username> \
>     --name spark-javawordcount \
>     --class org.apache.spark.examples.JavaWordCount \
>     --conf spark.kubernetes.container.image=<SPARK3.2_with_hadoop3.1_image>\
>     --conf spark.kubernetes.driver.podTemplateFile=driver.yaml \
>     --conf spark.kubernetes.executor.podTemplateFile=executor.yaml \
>     --conf spark.kubernetes.container.image.pullPolicy=Always \
>     --conf spark.kubernetes.driver.limit.cores=1 \
>     --conf spark.executor.instances=2 \
>     --conf spark.kubernetes.kerberos.krb5.path=/etc/krb5.conf \
>     --conf spark.kubernetes.authenticate.driver.serviceAccountName=spark \
>     --conf spark.kubernetes.namespace=<namespace_name> \
>     --conf spark.eventLog.enabled=true \
>     --conf spark.eventLog.dir=hdfs://<hdfs_cluster>:8020/scaas/shs_logs \
>     --conf spark.kubernetes.file.upload.path=hdfs://<hdfs_cluster>:8020/tmp \
>     $SPARK_HOME/examples/jars/spark-examples_2.12-3.2.0-1.jar /user/<username>/input{code}
>  
>  * ERROR logs from Driver pod
>  
> {code:java}
> ++ id -u
> + myuid=185
> ++ id -g
> + mygid=0
> + set +e
> ++ getent passwd 185
> + uidentry=
> + set -e
> + '[' -z '' ']'
> + '[' -w /etc/passwd ']'
> + echo '185:x:185:0:anonymous uid:/opt/spark:/bin/false'
> + SPARK_CLASSPATH=':/opt/spark/jars/*'
> + env
> + grep SPARK_JAVA_OPT_
> + sort -t_ -k4 -n
> + sed 's/[^=]*=\(.*\)/\1/g'
> + readarray -t SPARK_EXECUTOR_JAVA_OPTS
> + '[' -n '' ']'
> + '[' -z ']'
> + '[' -z ']'
> + '[' -n '' ']'
> + '[' -z x ']'
> + SPARK_CLASSPATH='/opt/hadoop/conf::/opt/spark/jars/*'
> + '[' -z x ']'
> + SPARK_CLASSPATH='/opt/spark/conf:/opt/hadoop/conf::/opt/spark/jars/*'
> + case "$1" in
> + shift 1
> + CMD=("$SPARK_HOME/bin/spark-submit" --conf "spark.driver.bindAddress=$SPARK_DRIVER_BIND_ADDRESS" --deploy-mode client "$@")
> + exec /usr/bin/tini -s -- /opt/spark/bin/spark-submit --conf spark.driver.bindAddress=<ipaddress> --deploy-mode client --proxy-user <username> --properties-file /opt/spark/conf/spark.properties --class org.apache.spark.examples.JavaWordCount spark-internal /user/<username>/input
> WARNING: An illegal reflective access operation has occurred
> WARNING: Illegal reflective access by org.apache.spark.unsafe.Platform (file:/opt/spark/jars/spark-unsafe_2.12-3.2.0-1.jar) to constructor java.nio.DirectByteBuffer(long,int)
> WARNING: Please consider reporting this to the maintainers of org.apache.spark.unsafe.Platform
> WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
> WARNING: All illegal access operations will be denied in a future release
> 22/04/21 17:50:30 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
> 22/04/21 17:50:30 WARN DomainSocketFactory: The short-circuit local reads feature cannot be used because libhadoop cannot be loaded.
> 22/04/21 17:50:30 WARN Client: Exception encountered while connecting to the server : org.apache.hadoop.security.AccessControlException: Client cannot authenticate via:[TOKEN, KERBEROS]
> 22/04/21 17:50:31 WARN Client: Exception encountered while connecting to the server : org.apache.hadoop.security.AccessControlException: Client cannot authenticate via:[TOKEN, KERBEROS]
> 22/04/21 17:50:37 WARN Client: Exception encountered while connecting to the server : org.apache.hadoop.security.AccessControlException: Client cannot authenticate via:[TOKEN, KERBEROS]
> 22/04/21 17:50:53 WARN Client: Exception encountered while connecting to the server : org.apache.hadoop.security.AccessControlException: Client cannot authenticate via:[TOKEN, KERBEROS]
> 22/04/21 17:51:32 WARN Client: Exception encountered while connecting to the server : org.apache.hadoop.security.AccessControlException: Client cannot authenticate via:[TOKEN, KERBEROS]
> 22/04/21 17:52:07 WARN Client: Exception encountered while connecting to the server : org.apache.hadoop.security.AccessControlException: Client cannot authenticate via:[TOKEN, KERBEROS]
> 22/04/21 17:52:27 WARN Client: Exception encountered while connecting to the server : org.apache.hadoop.security.AccessControlException: Client cannot authenticate via:[TOKEN, KERBEROS]
> 22/04/21 17:52:53 WARN Client: Exception encountered while connecting to the server : org.apache.hadoop.security.AccessControlException: Client cannot authenticate via:[TOKEN, KERBEROS]
> Exception in thread "main" java.net.ConnectException: Call From <driverpod> to <namenode> failed on connection exception: java.net.ConnectException: Connection refused; For more details see:  http://wiki.apache.org/hadoop/ConnectionRefused
>     at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
>     at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
>     at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
>     at java.base/java.lang.reflect.Constructor.newInstance(Unknown Source)
>     at org.apache.hadoop.net.NetUtils.wrapWithMessage(NetUtils.java:831)
>     at org.apache.hadoop.net.NetUtils.wrapException(NetUtils.java:755)
>     at org.apache.hadoop.ipc.Client.getRpcResponse(Client.java:1501)
>     at org.apache.hadoop.ipc.Client.call(Client.java:1443)
>     at org.apache.hadoop.ipc.Client.call(Client.java:1353)
>     at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:228)
>     at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:116)
>     at com.sun.proxy.$Proxy14.getFileInfo(Unknown Source)
>     at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.getFileInfo(ClientNamenodeProtocolTranslatorPB.java:900)
>     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
>     at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
>     at java.base/java.lang.reflect.Method.invoke(Unknown Source)
>     at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:422)
>     at org.apache.hadoop.io.retry.RetryInvocationHandler$Call.invokeMethod(RetryInvocationHandler.java:165)
>     at org.apache.hadoop.io.retry.RetryInvocationHandler$Call.invoke(RetryInvocationHandler.java:157)
>     at org.apache.hadoop.io.retry.RetryInvocationHandler$Call.invokeOnce(RetryInvocationHandler.java:95)
>     at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:359)
>     at com.sun.proxy.$Proxy15.getFileInfo(Unknown Source)
>     at org.apache.hadoop.hdfs.DFSClient.getFileInfo(DFSClient.java:1654)
>     at org.apache.hadoop.hdfs.DistributedFileSystem$29.doCall(DistributedFileSystem.java:1579)
>     at org.apache.hadoop.hdfs.DistributedFileSystem$29.doCall(DistributedFileSystem.java:1576)
>     at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81)
>     at org.apache.hadoop.hdfs.DistributedFileSystem.getFileStatus(DistributedFileSystem.java:1591)
>     at org.apache.hadoop.fs.Globber.getFileStatus(Globber.java:65)
>     at org.apache.hadoop.fs.Globber.doGlob(Globber.java:270)
>     at org.apache.hadoop.fs.Globber.glob(Globber.java:149)
>     at org.apache.hadoop.fs.FileSystem.globStatus(FileSystem.java:2067)
>     at org.apache.spark.util.DependencyUtils$.resolveGlobPath(DependencyUtils.scala:318)
>     at org.apache.spark.util.DependencyUtils$.$anonfun$resolveGlobPaths$2(DependencyUtils.scala:273)
>     at org.apache.spark.util.DependencyUtils$.$anonfun$resolveGlobPaths$2$adapted(DependencyUtils.scala:271)
>     at scala.collection.TraversableLike.$anonfun$flatMap$1(TraversableLike.scala:293)
>     at scala.collection.IndexedSeqOptimized.foreach(IndexedSeqOptimized.scala:36)
>     at scala.collection.IndexedSeqOptimized.foreach$(IndexedSeqOptimized.scala:33)
>     at scala.collection.mutable.WrappedArray.foreach(WrappedArray.scala:38)
>     at scala.collection.TraversableLike.flatMap(TraversableLike.scala:293)
>     at scala.collection.TraversableLike.flatMap$(TraversableLike.scala:290)
>     at scala.collection.AbstractTraversable.flatMap(Traversable.scala:108)
>     at org.apache.spark.util.DependencyUtils$.resolveGlobPaths(DependencyUtils.scala:271)
>     at org.apache.spark.deploy.SparkSubmit.$anonfun$prepareSubmitEnvironment$4(SparkSubmit.scala:364)
>     at scala.Option.map(Option.scala:230)
>     at org.apache.spark.deploy.SparkSubmit.prepareSubmitEnvironment(SparkSubmit.scala:364)
>     at org.apache.spark.deploy.SparkSubmit.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:898)
>     at org.apache.spark.deploy.SparkSubmit$$anon$1.run(SparkSubmit.scala:165)
>     at org.apache.spark.deploy.SparkSubmit$$anon$1.run(SparkSubmit.scala:163)
>     at java.base/java.security.AccessController.doPrivileged(Native Method)
>     at java.base/javax.security.auth.Subject.doAs(Unknown Source)
>     at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1729)
>     at org.apache.spark.deploy.SparkSubmit.doRunMain$1(SparkSubmit.scala:163)
>     at org.apache.spark.deploy.SparkSubmit.submit(SparkSubmit.scala:203)
>     at org.apache.spark.deploy.SparkSubmit.doSubmit(SparkSubmit.scala:90)
>     at org.apache.spark.deploy.SparkSubmit$$anon$2.doSubmit(SparkSubmit.scala:1043)
>     at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:1052)
>     at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
> Caused by: java.net.ConnectException: Connection refused
>     at java.base/sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
>     at java.base/sun.nio.ch.SocketChannelImpl.finishConnect(Unknown Source)
>     at org.apache.hadoop.net.SocketIOWithTimeout.connect(SocketIOWithTimeout.java:206)
>     at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:531)
>     at org.apache.hadoop.ipc.Client$Connection.setupConnection(Client.java:687)
>     at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:790)
>     at org.apache.hadoop.ipc.Client$Connection.access$3600(Client.java:410)
>     at org.apache.hadoop.ipc.Client.getConnection(Client.java:1558)
>     at org.apache.hadoop.ipc.Client.call(Client.java:1389)
>     ... 50 more {code}
>  
> please let me know if you have any questions. 



--
This message was sent by Atlassian Jira
(v8.20.7#820007)

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