ScalaSpark中的属性的最佳实践

时间:2017-08-28 14:08:14

标签: scala hadoop apache-spark properties

我正在使用Hadoop Spark开始一个项目。我将在Scala中发展 我从零开始创建项目,我想知道如何处理属性。

我来自Java背景,我使用.properties文件并在开始时加载它们。然后我有一个用于访问我的属性的不同值的类。

这在Scala中也是一个很好的做法吗?

尝试使用谷歌搜索,但没有任何与此相关的内容。

3 个答案:

答案 0 :(得分:2)

您可以在scala中读取与Java

类似的属性文件
import scala.io.Source.fromUrl
val reader = fromURL(getClass.getResource("conf/fp.properties")).bufferedReader()

您可以在Scala Standard Library I/O

了解有关I / O包的更多信息

如果您希望提供火花属性,那么有不同的方法可以做到这一点,例如:在你提交火花工作时提供它们。

希望这有帮助。

答案 1 :(得分:1)

我们这样做:

  1. scopt.OptionParser用于解析命令行参数。
  2. 键/值参数conf被复制到System.properties
  3. 命令行arg config-file用于读取配置文件(使用spark上下文可以从S3 / HDFS读取自定义代码路径以便能够从jar资源中读取)
  4. 使用com.typesafe.config.ConfigFactory解析配置文件。
  5. 使用withFallback机制合并来自资源和读取文件的默认配置。顺序很重要,因为我们希望typesafe使用(2)中的值来覆盖文件中的thoses。

答案 2 :(得分:1)

确定Spark的属性有三种方法:

  

Spark属性控制大多数应用程序设置并进行配置   每个申请单独分开。可以直接设置这些属性   在SparkConf上传递给你的SparkContext。

  • Dynamically Loading Spark Properties original spec,它避免了对SparkConf中的某些配置进行硬编码:

    ./ bin / spark-submit --name“我的应用程序”--master local [*] --conf spark.eventLog.enabled = false   --conf“spark.executor.extraJavaOptions = -XX:+ PrintGCDetails -XX:+ PrintGCTimeStamps”myApp.jar

  • 覆盖spark-defaults.conf - 默认Spark属性文件 - original spec

我按优先级描述了属性 - SparkConf具有最高优先级,spark-conf具有最低优先级。有关详细信息,请查看this post

如果您想将所有房产存储在一个地方,只需Typesafe Config。 Typesafe Config摆脱了使用输入流来读取文件,它在scala应用程序中被广泛使用。