Scala 如何从IntelliJ(或其他IDE)运行Spark测试

Scala 如何从IntelliJ(或其他IDE)运行Spark测试,scala,apache-spark,intellij-idea,gradle,kerberos,Scala,Apache Spark,Intellij Idea,Gradle,Kerberos,我正在尝试为一些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 Kerb

我正在尝试为一些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在运行“本地”时要寻找Kerberos

根据您需要从JUnit(而不是IntelliJ)运行Spark的代码,您可以尝试类似于“为什么Spark在运行“本地”时要查找Kerberos”——Spark总是引导Hadoop
配置
;如果Hadoop客户端在类路径中找到有效的
core site.xml
(取决于
Hadoop\u HOME
和/或
Hadoop\u CONF\u DIR
和/或
spark.driver.extraClassPath
),那么您可能会使用Kerberos身份验证将默认文件系统设置为HDFS!由于缺少实际的conf文件,Hadoop客户端将恢复到硬编码的默认值,即本地文件系统和无Kerberos。@SamsonScharfrichter这是一个非常有用的说明。对于大多数在windows上使用intellij的开发人员,我们都会遇到kerberos身份验证失败,但我的身份验证在mac/osx上也能正常工作。真正奇怪的是windows机器在gradle/命令行上运行相同的测试。希望你提供的这些信息能帮助我追踪这个问题。再次感谢。@Lo Tan>如果这是一个Windows特定的问题,并且您看到有关
本机库的警告,那么将
java.library.path
设置为
%HADOOP\u HOME%\bin
可以作为一种解决方法,或者至少可以导致一个更有意义的异常。请记住,路径是Windows查找DLL的默认位置(就像LD_LIBRARY_PATH是Linux查找的默认位置一样。因此,动态链接libs)