Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 无法使用spark sftp api将数据帧写入目标sftp服务器_Scala_Apache Spark_Spark Sftp - Fatal编程技术网

Scala 无法使用spark sftp api将数据帧写入目标sftp服务器

Scala 无法使用spark sftp api将数据帧写入目标sftp服务器,scala,apache-spark,spark-sftp,Scala,Apache Spark,Spark Sftp,我正在尝试执行sftp,并将数据帧从spark集群写入目标sftp服务器 该代码在spark shell上运行良好,但当我尝试使用scala代码部署我的jar时,它失败了,出现以下错误: *Caused by: org.apache.hadoop.security.AccessControlException: Permission denied: user=abcuser, access=WRITE, inode="/":hdfs:supergroup:drwxr-xr-x* 我尝试在spa

我正在尝试执行sftp,并将数据帧从spark集群写入目标sftp服务器

该代码在spark shell上运行良好,但当我尝试使用scala代码部署我的jar时,它失败了,出现以下错误:

*Caused by: org.apache.hadoop.security.AccessControlException: Permission denied: user=abcuser, access=WRITE, inode="/":hdfs:supergroup:drwxr-xr-x*
我尝试在spark shell中使用以下工具及其工作原理:

    spark2-shell --queue xyz --packages com.springml:spark-sftp_2.11:1.1.3

    val df = sparksession.sql(s"select * from db.table")

    df.write.format("com.springml.spark.sftp").option("host", "hostname").option("username", "username").option("password", "abc").option("port","22").option("fileType", "csv").option("delimiter", "|").option("header","true").save("/Download/file.txt")
但是在我的scala代码中失败了。以下是我的节目:

    import com.springml.spark.sftp._

    val df = sparksession.sql(s"select * from db.table")

    df.write.format("com.springml.spark.sftp")
       .option("host", "hostname")
       .option("username", "username")
       .option("password", "abc")
       .option("port","22")
       .option("fileType", "csv")
       .option("delimiter", "|")
       .option("header","false")
       .save("sftp_directory")
有人能告诉我错误或者我遗漏了什么吗

下面是我的sparksubmit命令,我在其中添加了所有必需的jar


以下spark文档:

注意:在群集模式下,在纱线上运行Spark时,环境 变量需要使用 应用程序中的spark.Thread.appMasterEnv.[EnvironmentVariableName]属性 conf/spark-defaults.conf文件。在中设置的环境变量 spark-env.sh不会反映在纱线应用程序主控中 进程处于群集模式。有关详细信息,请参阅与纱线相关的火花特性 更多信息

因此,要么修改spark-defaults.conf,要么将其作为spark-submit的配置传递

由于这是权限错误,您可以将其添加到spark submit配置中:

/bin/spark提交
--名称“我的应用程序”
--主本地[4]

--conf spark.warn.appMasterEnv.HADOOP\u USER\u NAME=hdfs


myApp.jar
以下spark文档:

注意:在群集模式下,在纱线上运行Spark时,环境 变量需要使用 应用程序中的spark.Thread.appMasterEnv.[EnvironmentVariableName]属性 conf/spark-defaults.conf文件。在中设置的环境变量 spark-env.sh不会反映在纱线应用程序主控中 进程处于群集模式。有关详细信息,请参阅与纱线相关的火花特性 更多信息

因此,要么修改spark-defaults.conf,要么将其作为spark-submit的配置传递

由于这是权限错误,您可以将其添加到spark submit配置中:

/bin/spark提交
--名称“我的应用程序”
--主本地[4]

--conf spark.warn.appMasterEnv.HADOOP\u USER\u NAME=hdfs


myApp.jar

您必须在HDFS中创建与用于提交作业的UNIX用户名对应的用户目录

for UNAME in abcuser; do
  hdfs dfs -test -e /user/$UNAME 
  if [ ! $? -eq 0 ]
  then 
    hdfs dfs -mkdir /user/$UNAME || error=0
    hdfs dfs -chmod 777 /user/$UNAME || error=0
    hdfs dfs -chown $UNAME /user/$UNAME || error=0
  fi
done
您还可以通过传递参数,使用不同的用户名进行spark提交:

--conf spark.yarn.appMasterEnv.HADOOP_USER_NAME=hadoop

您必须在HDFS中创建与用于提交作业的UNIX用户名对应的用户目录

for UNAME in abcuser; do
  hdfs dfs -test -e /user/$UNAME 
  if [ ! $? -eq 0 ]
  then 
    hdfs dfs -mkdir /user/$UNAME || error=0
    hdfs dfs -chmod 777 /user/$UNAME || error=0
    hdfs dfs -chown $UNAME /user/$UNAME || error=0
  fi
done
您还可以通过传递参数,使用不同的用户名进行spark提交:

--conf spark.yarn.appMasterEnv.HADOOP_USER_NAME=hadoop

我尝试了下面的conf参数,但仍然给出了相同的错误--conf spark.spirn.appMasterEnv.HADOOP_USER_NAME=hdfs我已经附加了我在代码中使用的spark submit命令。请提出建议。您可以添加一些日志,并记录:
sparksession.sparkContext.getConf.getAll
,以查看是否考虑了配置参数?您可以尝试以下操作:
sparksession.sparkContext.conf.set(“spark.warn.appMasterEnv.HADOOP_USER_NAME”,“hdfs”)
是的,我在设置conf属性后检查了打印日志。我可以看到此属性已成功设置。但是错误仍然是一样的。请在conf/spark-defaults.conf中显示
HADOOP\u USER\u NAME
的值好吗?我尝试了下面的conf参数,但仍然给出了相同的错误--conf spark.spirn.appMasterEnv.HADOOP_USER_NAME=hdfs我已经附加了我在代码中使用的spark submit命令。请提出建议。您可以添加一些日志,并记录:
sparksession.sparkContext.getConf.getAll
,以查看是否考虑了配置参数?您可以尝试以下操作:
sparksession.sparkContext.conf.set(“spark.warn.appMasterEnv.HADOOP_USER_NAME”,“hdfs”)
是的,我在设置conf属性后检查了打印日志。我可以看到此属性已成功设置。但是错误仍然是一样的。请在conf/spark-defaults.conf中显示
HADOOP\u USER\u NAME
的值好吗?