建筑网站上海手机端网站开发素材
web/
2025/10/6 17:14:11/
文章来源:
建筑网站上海,手机端网站开发素材,常用h5的制作工具有哪些,江西网站建设公司电话修改jvm对象的属性值(私有)
这个想法的来源
一个spark job 在启动之后#xff0c;就会确定 executor 的数量。但是存在一种情况#xff0c;当我的队列资源宽松 可能就要调整一些job的资源#xff0c;但是spark job在启动的时候#xff0c;最大的资源就确定了#xff0c;…修改jvm对象的属性值(私有)
这个想法的来源
一个spark job 在启动之后就会确定 executor 的数量。但是存在一种情况当我的队列资源宽松 可能就要调整一些job的资源但是spark job在启动的时候最大的资源就确定了所以能否可以通过直接修改jvm 里面某些属性值来调整 job 的 资源使用大小。 通过阅读 spark on yarn 的 提交job流程代码发现在 ApplicationMaster registerAM 方法最后 会启动一个 线程
主要用来监控 失败 exetors 数量失败超过一定数据之后执行 spark stop操作执行 allocator.allocateResources() 方法这个方法里面会比较 executor 设定值 (targetNumExecutors) 与 当前已经分配的值不够的话则会 执行申请操作 那么如果直接增加 jvm YarnAllocator 实例的 targetNumExecutors的话 这个spark job executor 数据就会增加。
具体操作 通过 arthas 工具操作修改对象的私有属性值
找到 spark driver 所在的主机 执行 java -jar arthas-boot.jar选择 对应的 进程先找到 此对象的 classloader
sc -d *YarnAllocator使用 vmtool 工具 修改 私有的对象属性
vmtool --action getInstances --className org.apache.spark.deploy.yarn.YarnAllocator //先获取到所有的实例对象
vmtool --action getInstances --className org.apache.spark.deploy.yarn.YarnAllocator --express #instanceinstances[0] //再拿到第一个实例对象
vmtool --action getInstances --className org.apache.spark.deploy.yarn.YarnAllocator --express #instanceinstances[0],#fieldObjorg.apache.spark.deploy.yarn.YarnAllocatorclass.getDeclaredField(org$apache$spark$deploy$yarn$YarnAllocator$$targetNumExecutors) //反射拿到字段
vmtool --action getInstances --className org.apache.spark.deploy.yarn.YarnAllocator --express #instanceinstances[0],#fieldObjorg.apache.spark.deploy.yarn.YarnAllocatorclass.getDeclaredField(org$apache$spark$deploy$yarn$YarnAllocator$$targetNumExecutors),#fieldObj.setAccessible(true) //字段设置可访问
vmtool --action getInstances --className org.apache.spark.deploy.yarn.YarnAllocator --express #instanceinstances[0],#fieldObjorg.apache.spark.deploy.yarn.YarnAllocatorclass.getDeclaredField(org$apache$spark$deploy$yarn$YarnAllocator$$targetNumExecutors),#fieldObj.setAccessible(true),#fieldObj.get(#instance) //获取到实例的私有属性值
vmtool --action getInstances --className org.apache.spark.deploy.yarn.YarnAllocator --express #instanceinstances[0],#fieldObjorg.apache.spark.deploy.yarn.YarnAllocatorclass.getDeclaredField(org$apache$spark$deploy$yarn$YarnAllocator$$targetNumExecutors),#fieldObj.setAccessible(true),#fieldObj.set(#instance, 5) //设置实例的私有属性值注意 有些复杂的属性不好确定此时就需要 反编译代码了或者使用 vmtool express 里面通过反射 打印出 所有的 Filed class.getDeclaredFields() jad org.apache.spark.deploy.yarn.YarnAllocator //找到 targetNumExecutors 属性可以看到并不是 targetNumExecutors而是 org$apache$spark$deploy$yarn$YarnAllocator$$targetNumExecutors 5. 观察 yarn web ui 查看这个 job 的资源是不是增加了
具体操作 通过 arthas 工具操作查看对象的静态属性值、执行静态方法
ognl -c 279f2327 org.apache.spark.deploy.yarn.YarnAllocatorMEM_REGEX
ognl -c 279f2327 org.apache.spark.deploy.yarn.YarnAllocatorMEM_REGEX()
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/88025.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!