我在绝望的状态下在这里写...

我有2个用户:


1个本地用户,在Linux中创建。可以100%很好地工作,字数统计效果很好。 Kerberos集群。有效票证。
1个Active Directory用户,可以登录,但是pyspark指令(相同的字数)失败。与上述一张相同的kdc票。



线程“主”中的异常java.lang.IllegalArgumentException:basedir
必须是绝对的:?/。ivy2 / local
在org.apache.ivy.util.Checks.checkAbsolute(Checks.java:48)
在org.apache.ivy.plugins.repository.file.FileRepository.setBaseDir(FileRepository.java:135)
在org.apache.ivy.plugins.repository.file.FileRepository。(FileRepository.java:44)
在org.apache.spark.deploy.SparkSubmitUtils $ .createRepoResolvers(SparkSubmit.scala:943)
在org.apache.spark.deploy.SparkSubmitUtils $ .buildIvySettings(SparkSubmit.scala:1035)
在org.apache.spark.deploy.SparkSubmit $$ anonfun $ 2.apply(SparkSubmit.scala:295)
在org.apache.spark.deploy.SparkSubmit $$ anonfun $ 2.apply(SparkSubmit.scala:295)
在scala.Option.getOrElse(Option.scala:121)
在org.apache.spark.deploy.SparkSubmit $ .prepareSubmitEnvironment(SparkSubmit.scala:294)
在org.apache.spark.deploy.SparkSubmit $ .submit(SparkSubmit.scala:153)
在org.apache.spark.deploy.SparkSubmit $ .main(SparkSubmit.scala:119)
在org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)


我正在运行的代码。超级简单。

import findspark
findspark.init()
from pyspark import SparkConf, SparkContext
conf = SparkConf().setMaster("yarn")
sc = SparkContext(conf=conf)


在最后一条指令中,由于上述错误而导致的错误结束(请参见异常)。

?/.ivy2/local->这是问题,但我不知道这是怎么回事:(。

对于Linux用户,它可以完美运行……但是对于本地系统中不存在的AD用户,却具有/ home / userFolder ...,我有这个问题:(

请帮忙...我已经达到疯狂的地步...我已经在互联网的每个角落进行了搜索,但是我没有找到解决这个问题/错误的任何方法:( stackoverflow是我的最后选择heeeeeeeeeelp

最佳答案

语境

Ivy需要一个名为.ivy2的目录,通常位于主目录中。您还可以通过在启动Spark或执行.ivy2时提供配置属性来配置spark-submit的位置。

问题出在哪里

IvySettings.java中(ant-ivy版本2.2.0的第796行)有以下行:

if (getVariable("ivy.home") != null) {
   setDefaultIvyUserDir(Checks.checkAbsolute(getVariable("ivy.home"), "ivy.home"));
   Message.verbose("using ivy.default.ivy.user.dir variable for default ivy user dir: " + defaultUserDir);
} else {
   setDefaultIvyUserDir(new File(System.getProperty("user.home"), ".ivy2"));
   Message.verbose("no default ivy user dir defined: set to " + defaultUserDir);
}


如您所见,如果未设置ivy.home,并且也未设置user.home,那么您将得到错误:


线程“主”中的异常java.lang.IllegalArgumentException:basedir必须是绝对的:?/。ivy2 / local


解决方案1(火花壳或火花提交)

Rocke Yang所述,您可以通过设置配置属性spark.jars.ivy来启动spark-shell或spark-submit。例:

spark-shell --conf spark.jars.ivy=/tmp/.ivy


解决方案2(火花发射器或纱线客户端)

第二种解决方案是在以编程方式调用Submit方法时设置配置属性:

sparkLauncher.setSparkHome("/path/to/SPARK_HOME")
  .setAppResource("/path/to/jar/to/be/executed")
  .setMainClass("MainClassName")
  .setMaster("MasterType like yarn or local")
  .setDeployMode("set deploy mode like cluster")
  .setConf("spark.executor.cores","2")
  .setConf("spark.jars.ivy","/tmp/.ivy")


门票开张

Spark-Community打开了一个ticket

07-24 13:01