Spark程序从未指定的位置获取hadoop配置

时间:2018-04-29 10:31:45

标签: scala apache-spark hadoop

我几乎没有测试用例,例如在HDFS上读/写文件,我希望使用Scala自动化并使用maven运行。我已经获取了测试环境的Hadoop配置文件并将其放在我的maven项目的资源目录中。从我用于运行项目的任何集群中,项目在所需集群上运行正常。

我没有得到的一件事是Spark如何从资源目录中获取Hadoop配置,即使我没有在项目中的任何位置指定它。以下是项目的代码片段。

def getSparkContext(hadoopConfiguration: Configuration): SparkContext ={
    val conf = new SparkConf().setAppName("SparkTest").setMaster("local")     
    val hdfsCoreSitePath = new Path("/etc/hadoop/conf/core-site.xml","core-site.xml")
    val hdfsHDFSSitePath = new Path("/etc/hadoop/conf/hdfs-site.xml","hdfs-site.xml")
    val hdfsYarnSitePath = new Path("/etc/hadoop/conf/yarn-site.xml","yarn-site.xml")
    val hdfsMapredSitePath = new Path("/etc/hadoop/conf/mapred-site.xml","mapred-site.xml")
    hadoopConfiguration.addResource(hdfsCoreSitePath)
    hadoopConfiguration.addResource(hdfsHDFSSitePath)
    hadoopConfiguration.addResource(hdfsYarnSitePath)
    hadoopConfiguration.addResource(hdfsMapredSitePath)
    hadoopConfiguration.set("hadoop.security.authentication", "Kerberos")
    UserGroupInformation.setConfiguration(hadoopConfiguration)
    UserGroupInformation.loginUserFromKeytab("alice", "/etc/security/keytab/alice.keytab")
    println("-----------------Logged-in via keytab---------------------")
    FileSystem.get(hadoopConfiguration)
    val sc=new SparkContext(conf)
    return sc
  }
@Test
def testCase(): Unit = {
    var hadoopConfiguration: Configuration = new Configuration()
    val sc=getSparkContext(hadoopConfiguration)
    //rest of the code
    //...
    //...
  }

在这里,我使用了hadoopconfiguration对象但是我没有在sparkContext的任何地方指定这个,因为这将在我用于运行项目的集群上运行测试,而不是在某些远程测试上环境。

如果这不是正确的方法?任何人都可以解释一下我应该如何实现从一些远程集群在测试环境中运行spark测试用例的动机?

0 个答案:

没有答案