AWS文档声明此属性是“作业流程步骤运行时设置的Java属性列表。您可以使用这些属性将键值对传递到JAR文件中的主函数。”
但是没有解释(至少,我没有找到)他们是如何传递的,以及如何在主要功能方面正确访问所述键值对的集合。
快速检查证明它们不是通过环境传递的,也不是通过命令行参数传递的。可能是其他方式?
答案 0 :(得分:1)
好的,似乎这个映射转到Java系统属性,可以通过System.getProperties()调用从主函数端访问,但是有一些非明显的含义。
要记住的第一件事是,内部通过环境变量HADOOP_CLIENT_OPTS设置为-Dkey =值开关。但EMR并不打算通过shell规则来正确地转义键和值。
此外,如果存在具有不可打印字符的属性,则不会报告任何语法错误,只是省略完全设置它们。对于像*这样的特殊shell字符,它会更糟糕吗? ()\和这样 - 如果没有正确的解释,它将无法执行任务,并且日志记录将模糊地指向EMR内部shell脚本包装器内部的一些eval()调用中的模糊语法错误。
请注意这种行为。
属性必须是shell转义的,在某些情况下甚至可以进行双重转义。