消息关闭
    暂无新消息!
如题,就是多个节点都能访问到,然后都能去更新这个变量,更新完以后,其他节点访问  也是最新值,spark有这种解决方案吗?共享变量是只读的,貌似做不到

6个回答

︿ 2
只能自己封装实现,广播变量和累积变量都不能像你说的那么用。

把要共享的数据放zookeeper是个办法,就是要自己控制并发写的问题。不嫌麻烦,就开个web服务,每次从web服务上获取值,完了更新上去。
︿ 1
另外如果不是特别庞大的对象,例如字符串或者数组、不大的集合,可以序列化后放在ZooKeeper上。注意ZK的数据不能超过1MB
推荐一个库menagerie,实现了分布式锁,Leader选举,以及实现了java.util.concurrent包下的并发集合接口的分布式实现
︿ 1
广播变量是从Driver上把广播对象序列化,在Executor上反序列化。因此在Executor上对广播变量修改,只是修改Executor本地的副本,其他Executor的副本不会受到影响。
而累加器则是Driver只读,Executor只写的对象。
因此你只能通过数据库或者HDFS文件等来做数据实时共享了,封装好访问的方法在算子里面访问,注意读写锁问题。