Передача настроек SparkConf из командной строки в Spark - PullRequest
0 голосов
/ 22 марта 2019

Я пытаюсь настроить работу с данными хранилища BLOB-объектов Azure.Способ передачи ему учетных данных следующий:

spark.conf.set(
 "fs.azure.account.key.STORAGE_ACCOUNT.blob.core.windows.net",
 "KEY")

Теперь, если я установлю это в коде, все будет работать нормально.Тем не менее, я хотел бы передать это из командной строки или переменной среды, поэтому код не должен делать это.(Да, конечно, я могу читать в env vars и устанавливать программу conf грамматически, но я ищу способ не делать этого).

Я попытался установить переменную env с именем fs.azure.account.key.STORAGE_ACCOUNT.blob.core.windows.net со значением KEY, и я также попытался:

--conf "fs.azure.account.key.STORAGE_ACCOUNT.blob.core.windows.net=KEY"

но похоже, что искра поднимает их, только если свойство начинается с "искры".Кто-нибудь знает, как свойства времени выполнения могут быть установлены через среду или командную строку?

Ответы [ 2 ]

1 голос
/ 25 марта 2019

В исходном коде SparkConf функция загрузки конфигов из системных свойств содержит следующее

for ((key, value)<- Utils.getSystemProperties if key.startsWith("spark.")) { set(key, value, silent) }

Как видите, он устанавливает только те свойства, которые начинаются с "искры". что согласуется с вашим наблюдением. Вы можете изменить этот код, чтобы снять это ограничение и перекомпилировать искру, чтобы можно было подобрать вашу переданную конфигурацию из командной строки.

0 голосов
/ 25 марта 2019

Вы можете передать параметр через команду java, например,

  private void parseArgs(String[] args) throws org.apache.commons.cli.ParseException {
    DefaultParser defaultParser = new DefaultParser();
    options = new Options();
    options.addOption("h", "help");
    options.addOption(Option.builder()
                            .longOpt("profile")
                            .desc("profile to run. (dev|azure|prod)")
                            .hasArg()
                            .build());
    options.addOption(Option.builder()
                            .longOpt("azure_storage_key")
                            .desc("azure storage key")
                            .hasArg()
                            .build());
    options.addOption(Option.builder()
                            .longOpt("develop")
                            .desc("set the environment for development.")
                            .build());
    commandLine = defaultParser.parse(options, args, true);

}

Итак, когда вы получаете

if (commandLine.hasOption("azure_storage_key")) {
        String key = commandLine.getOptionValue("azure_storage_key", "key");
        spark.conf.set("fs.azure.account.key.STORAGE_ACCOUNT.blob.core.windows.net",key)
}
...