【解决办法】
# spark standalone模式和yarn-client模式
1. 安装web许可中心软件,配置web许可,对外提供web许可服务。需要objects for spark模块。
2. 在spark集群节点机器配置系统环境变量 BSLICENSE_SERVER=ws://ip:9183 或者 在代码里设置System.setProperty("BSLICENSE_SERVER","ws://ip:9183")
3. bdt程序里不需要做啥,运行后在日志能看见正常打印。
# yarn-cluster模式
1.在spark-default.conf设置spark.yarn.appMasterEnv.BSLICENSE_SERVER=ws://ip:9183,或者在spark-submit 设置--conf spark.yarn.appMasterEnv.BSLICENSE_SERVER=ws://ip:9183。这样driver端才能读取到变量。
# web许可原理。
spark app的driver端通过BSLICENSE_SERVER变量,通过websocket通信去动态接入许可中心,并申请分配许可。driver端得到许可后,worker节点均不需要许可了。app执行完后,就断开连接,web许可中心回收许可。一套许可同一时间只能一个app占用。因为许可与driver进程绑定的。所以要同时运行多个app就需要多套许可。
# 能不能连上web许可就在程序里通过System.getProperties()和System.getenv()把变量和属性都打印出来看看有没有BSLICENSE_SERVER变量。因为bdt底层就从这两个里面获取变量再去连接web许可的。