【问题标题】:How to run a Spark test from IntelliJ (or other IDE)如何从 IntelliJ(或其他 IDE)运行 Spark 测试
【发布时间】:2017-04-13 17:09:07
【问题描述】:

我正在尝试为一些 Spark 代码创建测试。以下代码在获取 SparkSession 对象时失败。注意:从 cli 运行时测试运行良好: gradle my_module:build

@Test
def myTest(): Unit = {
  val spark = SparkSession.builder().master("local[2]").getOrCreate()
  ...
}

错误:

java.lang.IllegalArgumentException: Can't get Kerberos realm
...
Caused by: java.lang.reflect.InvocationTargetException
...
Caused by: KrbException: Cannot locate default realm

我的设置:IntelliJ + Gradle + Mac OS

问题:

  • 如何在 IntelliJ 中运行 Spark 测试?
  • 为什么 Spark 在“本地”运行时要寻找 Kerberos

【问题讨论】:

  • "为什么 Spark 在运行 'local' 时要寻找 Kerberos" -- Spark 总是引导 Hadoop Configuration;如果 Hadoop 客户端在 CLASSPATH 中找到有效的 core-site.xml(取决于 HADOOP_HOME 和/或 HADOOP_CONF_DIR 和/或 spark.driver.extraClassPath),那么您最终可能会使用 Kerberos auth 将默认文件系统设置为 HDFS!由于缺少实际的 conf 文件,Hadoop 客户端将恢复为硬编码的默认值,即本地文件系统并且没有 Kerberos。
  • @SamsonScharfrichter 这是一个非常有用的注释。对于大多数在 Windows 上使用 intellij 的开发人员,我们会遇到 kerberos 身份验证失败,但我的在 mac/osx 上以某种方式工作。真正奇怪的是 Windows 机器从 gradle/命令行运行相同的测试。希望您提供的这些信息能帮助我找到问题所在。再次感谢。
  • @Lo-Tan > 如果是 Windows 特定问题并且您会看到有关 native libraries 的警告,那么可能将 java.library.path 设置为%HADOOP_HOME%\bin 可以用作解决方法——或者至少会导致更有意义的异常。参照。 jaceklaskowski.gitbooks.io/mastering-apache-spark/content/… 同时记住 PATH 是 Windows 查找 DLL 的默认位置(就像 LD_LIBRARY_PATH 是 Linux 查找 .so 动态链接库的默认位置)

标签: scala apache-spark intellij-idea gradle kerberos


【解决方案1】:

通过您的代码,您需要从 JUnit 运行 Spark,而不是专门从 IntelliJ 运行,您可以尝试类似 https://github.com/sleberknight/sparkjava-testing

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-25
    • 2011-07-11
    相关资源
    最近更新 更多