Недопустимый JSON при отправке задания отправки spark через NiFi

#json #apache-spark #hadoop #apache-nifi

#json #apache-spark #hadoop #apache-nifi

Вопрос:

Я пытаюсь отправить spark задание, в котором я задаю date аргумент в conf свойстве, и я запускаю его через скрипт NiFi . Однако, когда я запускаю скрипт, я сталкиваюсь с ошибкой.
Spark Submit Код в скрипте:

 aws emr add-steps --cluster-id "$1" --steps '[{"Args":["spark-submit","--deploy-mode","cluster","--jars","s3://tvsc-lumiq-edl/jars/ojdbc7.jar","--executor-memory","10g","--driver-memory","10g","--conf","spark.hadoop.yarn.timeline-service.enabled=false","--conf","currDate='"$5"'","--class",'"$2"','"$3"','"$4"'],"Type":"CUSTOM_JAR","ActionOnFailure":"CONTINUE","Jar":"command-runner.jar","Properties":"","Name":"Spark application"}]' --region "$6"  
 

и после того, как я его запустил, я получаю следующую ошибку:

 ExecuteStreamCommand[id=5b08df5a-1f24-3958-30ca-2e27a6c4becf] Transferring flow file StandardFlowFileRecord[uuid=00f844ee-dbea-42a3-aba3-0edcabfc50a2,claim=StandardContentClaim [resourceClaim=StandardResourceClaim[id=1607082757752-507103, container=default, section=223], offset=29, length=-1],offset=0,name=6414901712887990,size=0] to nonzero status. Executable command /bin/bash ended in an error: 
Error parsing parameter '--steps': Invalid JSON:
[{"Args":["spark-submit","--deploy-mode","cluster","--jars","s3://tvsc-lumiq-edl/jars/ojdbc7.jar","--executor-memory","10g","--driver-memory","10g","--conf","spark.hadoop.yarn.timeline-service.enabled=false","--conf","currDate="Fri
 

Где я ошибаюсь?

Ответ №1:

Вы можете использовать JSONLint для проверки вашего JSON, что упрощает понимание того, почему это неправильно.

В вашем случае вы заключаете последние 3 значения в одинарные кавычки ' , а не в двойные кавычки "

Ваш steps JSON должен выглядеть так:

 [{
"Args": [
    "spark-submit",
    "--deploy-mode",
    "cluster",
    "--jars",
    "s3://tvsc-lumiq-edl/jars/ojdbc7.jar",
    "--executor-memory",
    "10g",
    "--driver-memory",
    "10g",
    "--conf",
    "spark.hadoop.yarn.timeline-service.enabled=false",
    "--conf",
    "currDate='"$5"'",
    "--class",
    ""$2"",
    ""$3"",
    ""$4""
],
"Type": "CUSTOM_JAR",
"ActionOnFailure": "CONTINUE",
"Jar": "command-runner.jar",
"Properties": "",
"Name": "Spark application"
}]
 

В частности, эти 3 строки:

 ""$2"",
""$3"",
""$4""
 

Вместо оригинала:

 '"$2"',
'"$3"',
'"$4"'