scala - 在 Spark/Scala 中保持本地、测试和生产配置属性的最佳实践

标签 scala configuration apache-spark sbt

我们有一些输入目录,用于在 Spark SQL 中加载文件和处理。

当然,目录在本地机器上、测试上和生产上是不同的。

参数化这些的最佳方法是什么,
这样我们就可以构建,运行测试 并使用 sbt 部署而无需

a) 手动更改大部分配置设置,
b) 让开发人员使用他们自己的配置设置,
c) 构建目标不同的部署?

最佳答案

您可以从许多选项中进行选择:

在 spark-submit 中作为参数传递

  • 非常简单,但不会随着设置数量的增加而扩展
  • 我只会用它来传递一个定义环境的参数(开发、测试、生产……)

使用属性文件

  • 使用传递给 spark-submit 的参数来指定要从 HDFS 读取的文件(例如:hdfs://localhost:9000/conf/dev.properties)

存储在JSON文件中,读入为DataFrame

  • 如果你想使用SQL查询配置

存储在 RDBMS 中,并作为 DataFrame 读入

  • 如果您有权访问正在运行的 RDBMS(或者您可以安装一个)
  • 可能已经有一个 RDBMS,如果你有一个由一个支持的 Hive 元存储)
  • 使用 SQL 提供批量更新/删除
  • 如果您想要高可用性,可能需要一些努力

使用分布式配置服务

  • 如果您有权访问正在运行的 ZooKeeper 等。等
  • 对于 ZooKeeper:
    • 您可以更新值
    • 如果值发生变化,您可以注册回调

使用键/值存储

  • 如果您可以访问 Infinispan、Redis、Memcached 等。等
  • 例如,Infinispan 提供了一个分布式、可复制、持久化的 java.util.Map

当然还有其他选项(例如 LDAP),但我会选择属性:不可变配置值通常就足够了,它可能不会引入新的依赖项,并且很容易从命令行和/或sbt 任务。

关于scala - 在 Spark/Scala 中保持本地、测试和生产配置属性的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34117480/

相关文章:

java - 无法创建 tempDir。 java.io.tmpdir 设置为 C :\windows\

hadoop - 商业智能中的 Spark

arrays - 尝试将 json 数组解析为 Scala 中的 List[Object] 时出现验证错误

java - 如何在 Scala 中流式传输标准输出?

scala - 使用 sbt native 打包器进行基于环境变量的运行时配置

python - 如何在 Pyramid 中使用通用的 ini 配置(在开发和生产之间)?

java - 我在第一次运行时创建的属性文件在第二次运行时被清空

oop - 如何混合明显不兼容的范例 : OOP and FP?

hadoop - 使用 spark 跨 hadoop 集群复制数据

java - Spark 作业返回后不久,推测任务是否可以继续运行?