【发布时间】: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