尝试在Kerberos环境中使用Spark on Yarn以sftp模式写入csv文件



我正试图将一个数据帧写入一个csv文件,并将该csv文件放入远程机器中。Spark作业正在Yarn上运行到Kerberos集群中。

下面是我在作业尝试在远程机器上写入csv文件时遇到的错误:

诊断:用户类引发异常:org.apache.hadoop.security.AccessControlException:权限被拒绝:user=dev,access=WRITE,inode="/data/9/syarn/local/usercache/dev/appcache/application_15329624900515_15862/container_e05_153296295051_515862_02_000001/tmp/spark_sftp_connection_temp178/temporary/0":hdfs:hdfs:drwxr-xr-x

为了写这个csv文件,我在sftp模式下写这个文件的方法中使用了以下参数:

def writeToSFTP(df: DataFrame, path: String) = {
df.write
.format("com.springml.spark.sftp")
.option("host", "hostname.test.fr")
.option("username", "test_hostname")
.option("password", "toto")
.option("fileType", "csv")
.option("delimiter", ",")
.save(path)
}

我正在使用链接中描述的Spark SFTP连接器库:https://github.com/springml/spark-sftp

用于启动作业的脚本是:

#!/bin/bash
kinit -kt /home/spark/dev.keytab dev@CLUSTER.HELP.FR
spark-submit --class fr.edf.dsp.launcher.LauncherInsertion 
--master yarn-cluster 
--num-executors 1 
--driver-memory 5g 
--executor-memory 5g 
--queue dev 
--files /home/spark/dev.keytab#user.keytab,
/etc/krb5.conf#krb5.conf,
/home/spark/jar/dev-application-SNAPSHOT.conf#app.conf 
--conf "spark.executor.extraJavaOptions=-Dapp.config.path=./app.conf -Djava.security.auth.login.config=./jaas.conf" 
--conf "spark.driver.extraJavaOptions=-Dapp.config.path=./app.conf -Djava.security.auth.login.config=./jaas.conf" 
/home/spark/jar/dev-SNAPSHOT.jar > /home/spark/out.log 2>&1&

csv文件不会写入HDFS。一旦建立了数据帧,我会尝试将其发送到机器。我怀疑sftp Spark连接器存在Kerberos问题:Yarn无法联系远程机器。。。

欢迎任何帮助,谢谢。

添加您有写访问权限的临时位置,并且不必担心清理,因为最终在ftp完成后,这些文件将被删除,

def writeToSFTP(df: DataFrame, path: String) = {
df.write
.format("com.springml.spark.sftp")
.option("host", "hostname.test.fr")
.option("username", "test_hostname")
.option("password", "toto")
.option("fileType", "csv")
**.option("hdfsTempLocation","/user/currentuser/")**
.option("delimiter", ",")
.save(path)
}

最新更新