如何使用HadoopJarStepConfig.StepProperties?

How to use HadoopJarStepConfig.StepProperties?

AWS 文档声明此 属性 是 "A list of Java properties that are set when the job flow step runs. You can use these properties to pass key-value pairs to your main function in the JAR file."

但是没有解释(至少我没有找到)它们是如何传递的,以及如何在主函数端正确访问所述键值对集合。

快速检查证明它们不是通过环境或命令行参数传递的。可以用其他方式吗?

好吧,似乎这个映射转到 Java 系统属性,并且可以通过 System.getProperties() 调用从主函数端访问,但是有一些不明显的含义。

首先要记住的是,它们在内部通过环境变量 HADOOP_CLIENT_OPTS 设置为 -Dkey=value 开关。但是 EMR 不会根据 shell 规则正确转义键或值。

此外,如果存在具有不可打印字符的属性,它不会报告任何语法错误,只是完全忽略设置它们。对于像 * 这样的特殊 shell 字符,效果更差? ( ) \ 等等 — 如果没有适当的解释,任务执行将失败,并且日志记录将仅模糊地指向 EMR 内部 shell 脚本包装器内部深处的某些 eval() 调用中模糊的语法错误。

请注意这种行为。

属性必须 shell-转义,在某些情况下甚至双重 shell-转义。