basedir必须是绝对的:?/。ivy2 / local

问题描述 投票:3回答:2

我在这里写完全绝望的状态......

我有2个用户:

  • 1个本地用户,在Linux中创建。工作100%罚款,字数完美。 Kerberized Cluster。有效票。
  • 1个Active Directory用户,可以登录,但是pyspark指令(相同的字数)失败。与上面相同的kdc票。

线程“main”中的异常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)at org.apache.spark.deploy.SparkSubmitUtils $ .createRepoResolvers (SparkSubmit.scala:943)org.apache.spark.deploy.SparkSubmitUtils $ .buildIvySettings(SparkSubmit.scala:1035)at org.apache.spark.deploy.SparkSubmit $$ anonfun $ 2.apply(SparkSubmit.scala:295) at org.apache.spark.deploy.SparkSubmit $$ anonfun $ 2.apply(SparkSubmit.scala:295)位于org.apache.spark.deploy.SparkSubmit $ .prepareSubmitEnvironment的scala.Option.getOrElse(Option.scala:121) SparkSubmit.scala:294)在org.apache的org.apache.spark.deploy.SparkSubmit $ .submit(SparkSubmit.scala:153)org.apache.spark.deploy.SparkSubmit $ .main(SparkSubmit.scala:119)at org.apache .spark.deploy.SparkSubmit.main(SparkSubmit.scal一个)

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

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

apache-spark pyspark ivy jupyterhub
2个回答
0
投票

我遇到了类似的问题。

SparkSubmit将直接寻找常春藤家。如果未找到,则会报告错误。这个名字在途中略有变化。

class SparkSubmitArguments {
    ivyRepoPath = sparkProperties.get("spark.jars.ivy").orNull
}

我们可以像这样传递ivy.home目录

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

0
投票

上下文

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

问题来自哪里

IvySettings.java(蚂蚁常春藤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,则会出现错误:

线程“main”中的异常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

© www.soinside.com 2019 - 2024. All rights reserved.