我正在转换以在Spark独立模式下运行以在纱线上运行的应用程序。在独立模式下,我们通过在Spark-Env.sh。
中设置环境变量将一些配置传递到应用程序中。这在纱线中不起作用,而是设置参数spark.yarn.appmasterenv。[env_variable]在spark-submit或spark-daemon.conf中以获取驱动程序的变量。由于变量的内容,我们希望它们在spark-daemon.conf。
中设置我能够获得值设置的值,但是如果它们是JSON数据,则任何引号都是从值中删除的,使Invalid JSON。例如:
spark.yarn.appMasterEnv.MY_JSON_LIST "[{"myprop":"propval"},{"myprop":"prop2"}]"
spark.yarn.appMasterEnv.MY_JSON_OBJ "{"a":"b"}"
spark.yarn.appMasterEnv.MY_JSON_LIST2 '[{"myprop":"propval"},{"myprop":"prop2"}]'
spark.yarn.appMasterEnv.MY_JSON_OBJ2 '{"a":"b"}'
spark.yarn.appMasterEnv.MY_JSON_LIST3 "[{\"myprop\":\"propval\"},{\"myprop":\"prop2\"}]"
spark.yarn.appMasterEnv.MY_JSON_OBJ3 "{\"a\":\"b\"}"
从驾驶员中拉出环境时产生以下值:
MY_JSON_LIST: [{myprop:propval},{myprop:prop2}]
MY_JSON_OBJ: {a:b}
MY_JSON_LIST2: [{myprop:propval},{myprop:prop2}]
MY_JSON_OBJ2: {a:b}
MY_JSON_LIST3: [{myprop:propval},{myprop:prop2}]
MY_JSON_OBJ3: {a:b}
这些都不是有效的JSON。
所以问题是:如何通过服务器上设置的环境变量将任意文本(尤其是正确构建的JSON(进入驱动程序?
我无法如前所述解决这个问题。我最终使用的解决方案是base64在配置中编码JSON,然后将其在代码中取消编码。因此,该配置被视为弦,而不是在途中被纱线弄脏。
这对我有用时可能会有所帮助:
'{"foo":12345,"bar":67890}'