【问题标题】:Spark: additional properties in a directorySpark:目录中的附加属性
【发布时间】:2018-01-05 18:08:21
【问题描述】:

我正在使用 spark 1.5.0 亚马逊的 EMR。我有多个属性文件需要在我的 spark-submit 程序中使用。我探索了--properties-file 选项。但它允许您从单个文件导入属性。我需要从结构如下的目录中读取属性:

├── AddToCollection
│   ├── query
│   ├── root
│   ├── schema
│   └── schema.json
├── CreateCollectionSuccess
│   ├── query
│   ├── root
│   ├── schema
│   └── schema.json
├── FeedCardUnlike
│   ├── query
│   ├── root
│   ├── schema
│   └── schema.json

在独立模式下,我可以通过指定文件在本地系统中的位置来解决这个问题。但它在集群模式下不起作用,我使用带有 spark-submit 命令的 jar。 我怎样才能在火花中做到这一点?

【问题讨论】:

  • 您好,只是好奇,您是如何在独立模式下实现的?您不是在 Spark 属性文件中而是在您的应用程序中指定位置?
  • @keypoint 嗨。所以,基本上我的查询文件有 SQL 查询。所以,我把它读作String query = new String(Files.readAllBytes(Paths.get(configLocation + event_type + "/query" )));
  • 谢谢,我明白了。那你为什么不把这些查询文件打包到你的大jar中,这样集群模式下,当jar分发给worker时,worker也能读取这些文件呢?或者我仍然想念你的问题......
  • @keypoint:我对 java 不太擅长。我才刚刚开始。请你能告诉我我该怎么做。我把这些放在'src/main/resources'下。但这不起作用。
  • 当然,我会在下面发布答案

标签: apache-spark apache-spark-sql


【解决方案1】:

这适用于 Spark 1.6.1(我没有测试过早期版本)

spark-submit 支持 --files 参数,该参数接受以逗号分隔的“本地”文件列表,以与您的 JAR 文件一起提交给驱动程序。

spark-submit \
    --class com.acme.Main \
    --master yarn \
    --deploy-mode cluster \
    --driver-memory 2g \
    --executor-memory 1g \
    --driver-class-path "./conf" \
    --files "./conf/app.properties,./conf/log4j.properties" \
    ./lib/my-app-uber.jar \
    "$@"

在本例中,我创建了一个不包含任何属性文件的Uber JAR。当我部署我的应用程序时,app.properties 和 log4j.properties 文件被放置到本地 ./conf 目录中。

来自SparkSubmitArguments 的来源

--文件文件
要放置在每个执行器的工作目录中的文件的逗号分隔列表。

【讨论】:

    【解决方案2】:

    我觉得你可以把这些文件打包成你的JAR文件,这个JAR文件就会提交给Spark集群。

    为了阅读这些文件,

    你可以试试java.util.Properties

    也可以参考这个Java Properties file examples

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多