具有Spark的JSON值的环境变量(Spark.yarn.Appmasterenv)



我正在转换以在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}'

相关内容

  • 没有找到相关文章

最新更新