Tag: 架构

Spark:从具有不同内存/核心配置的单个JVM作业同时启动

问题解释 假设您拥有带有独立管理器的Spark集群,其中通过在客户端应用程序中创建的SparkSession来调度作业。 客户端应用程序在JVM上运行。 为了提高性能,您必须使用不同的配置启动每个作业,请参阅下面的作业类型示例 。 问题是您无法从单个JVM创建两个会话 。 那么你将如何同时启动具有不同会话配置的多个Spark作业? 通过不同的会话配置,我的意思是: spark.executor.cores spark.executor.memory spark.kryoserializer.buffer.max spark.scheduler.pool 等等 我的想法 解决问题的可能方法: 在同一SparkSession为每个Spark作业设置不同的会话配置。 可能吗? 启动另一个JVM只是为了启动另一个SparkSession ,我可以称之为Spark会话服务。 但你永远不会知道你将来会同时推出多少具有不同配置的工作。 目前 – 我一次只需要2-3种不同的配置。 这可能足够但不灵活。 针对各种工作使用相同的配置进行全局会话。 但这种方法从表现的角度来看是一个底线。 仅将Spark用于繁重的作业,并在Spark之外运行所有快速搜索任务。 但这是一团糟,因为你需要与Spark并行保留另一个解决方案(如Hazelcast),并在它们之间分配资源。 此外,这为所有人带来了额外的复杂性:部署,支持等。 工作类型示例 转储庞大的数据库任务。 它是CPU低但IO密集的长时间运行任务。 因此,您可能希望使用低内存和每个执行程序的内核启动尽可能多的执行程序。 重型句柄转储结果任务。 它是CPU密集型的,因此您将为每台集群计算机启动一个执行程序,具有最大的CPU和核心。 快速检索数据任务,每台机器需要一个执行程序,资源最少。 介于1-2和3之间的中间位置,其中作业应占用一半的群集资源。 等等

如何在Java中将示例JSON转换为JSON模式

我想将json文档转换为json模式。 我用谷歌搜索,但根据我的要求没有得到确切的想法。 这是JSON { “empId”:1001, “firstName”:”jonh”, “lastName”:”Springer”, “title”: “Engineer”, “address”: { “city”: “Mumbai”, “street”: “FadkeStreet”, “zipCode”:”420125″, “privatePhoneNo”:{ “privateMobile”: “2564875421”, “privateLandLine”:”251201546″ } }, “salary”: 150000, “department”:{ “departmentId”: 10521, “departmentName”: “IT”, “companyPhoneNo”:{ “cMobile”: “8655340546”, “cLandLine”: “10251215465” }, “location”:{ “name”: “mulund”, “locationId”: 14500 } } } 我想生成这样的 { “$schema”: “http://json-schema.org/draft-04/schema#”, “type”: “object”, “title”: “Employee”, “properties”: { “empId”: { […]

适用于大型项目的Java GUI架构

我想制作一个应用程序,它将作为多个服务器的接口。 原因:在默认情况下提供的web iface(我们无法改变它)是我们想念的一些事情,很少有人可以做得更好,并且确保某些东西的自动化会使工作变得更容易。 我有什么:几乎完成的类与服务器应用程序的Web界面进行通信。 GUI描述:对于某种版本0.1:用户名的文本字段,选择服务器的单选按钮和一个“go”按钮。 然后几个(4-12)操作按钮操作数据,2x文本区域与结果,一个标签与一些文本数据 – 我可以管理这个。 然后我需要查看数据 – 网格MxN将加载数据,预期大小:7-15列,通常10行或更少,但很少它可以超过1k(甚至更多,但我不需要所有在这种情况下对用户可见)。 我需要的:简单的建议。 我希望从一个简单的版本开始(我已经开始研究它了,但我坚持太多的东西 – 95%的cos和GUI的全新,5%的cos我是java的新手)。 我检查了很多教程,但它们都很简单。 真正的问题: 1)validation。 在MVC控制器中应该处理所有用户操作 – 它是通过view的方法完成的,类似于button.addActionListener(param); anotherButton.addActionListener(paramp; …? 1b)我已经看到所有通过一个(嵌套)类实现,然后检查源或smth – 是吗? 会有很多按钮等。 2)如何实现数据网格,当我需要对click / dbl点击进行操作时? 4)第一行是标题,其余的应该是可滚动的 – 如果它在网格中或在外面(它自己的网格): 4a)如何确保标题的大小(宽度)与数据中的相同(我不想设置直接大小) 4b)到目前为止,我没有创建任何可滚动的东西,但我认为这很糟糕。 如何确保标题将保留在某个位置,其余的可以滚动? 5)应该如何实施“数据更新”? 我有JPanel从中删除网格组件然后我创建新的并添加数据(简单,但perhapss有另一种方式)。 第一个增强function之一是排序 – 使用与新内容相同的方式? 非常感谢任何答案,我知道这不是很具体,但我发现的例子太简单了。 我计划了很多增强function,但是未来会有这样的改进,我不介意多次重做GUI / Controller,至少我会练习,但我不想完成代码的一部分并意识到我必须重写一半的控制器和1/4的视图才能实现。 注意:我打算在工作中使用它作为我的工具(如果事情是正确的,我可以通过几次点击来完成我工作的25-50%:-)所以我真的是这个意思。 注意#2:我不是编程的新手,但我从来没有创建过GUI(这就是为什么我的菜单栏有2个项目和3个组件的GUI,几乎完成了web-iface连接)。 注意#:3个可拖动数据标题,标签数据视图 – 这就是未来的计划:-)

具有强制数组大小参数的Java方法?

我想为Java类创建一个初始化方法,它接受3个参数: Employee[] method( String[] employeeNames, Integer[] employeeAges, float[] employeeSalaries ) { Employee myEmployees[] = new Employee[SIZE];// dont know what size is for ( int count = 0; count < SIZE; count++) { myEmployees[count] = new Employee( employeeNames[count], employeeAges[count], employeeSalaries[count] ); } return myEmployees; } 您可能会注意到此代码是错误的。 SIZE变量未定义。 我的问题是我想传入3个数组,但我想知道我是否可以确保三个数组都是相同的数组大小。 这样for循环不会失败,因为for循环中的构造函数使用数组的所有参数。 也许Java有一个不同的function,可以强制解决我的问题。 我可以接受另一个名为SIZE的参数,该参数将在for循环中使用,但如果参数1和2的大小为10且第3个参数是大小为9的数组,则不能解决我的问题。 所以只是为了改变我不清楚。 如何强制执行3个参数是包含完全相同数量元素的所有数组? 使用指定数组大小的额外参数不是很优雅而且很脏。 它也没有解决数组参数包含不同大小的数组的问题。

在运行时更改Guice绑定

我希望能够在运行时更改Guice注入,以支持基于用户输入的多次注入。 这就是我想要实现的目标: public interface IDao { public int someMethod(); } public class DaoEarth implements IDao { @Override public int someMethod(){ … } } public class DaoMars implements IDao { @Override public int someMethod(){ … } } public class MyClass { @Inject private IDao myDao; public int myMethod(String domain) { //If Domain == Earth, myDao should […]

调用整个应用程序的图表

是否有一个非玩具工具可以创建整个应用程序的调用图? 我并不是指通过逐个方法指向获取图片或绘制调用图。 我需要一个可以通过编程方式访问的调用图,即工具应该以文本模式(例如XML)将其刷新到文件中,或者在内存中构建调用图(这对于大型应用程序来说会成为问题)。 内置在DB中的调用图会很棒。 静态和动态呼叫图都是需求的; 虽然静态更有趣,但事实上它过于活跃是可以接受的。 到目前为止我尝试过Soot。 但是,它甚至无法处理像FreeCol这样的中型项目(Java源代码可用)。 Soot在该项目上耗尽了1.5GB内存,然后JVM崩溃,如下所述: http : //www.sable.mcgill.ca/pipermail/soot-list/2008-July/001828.html 如上所述,有人可以建议生成调用图的工具吗? Java或.NET语言都可以。 最诚挚的问候,Sarge

设计可插拔点和徽章系统

如何设计一个易于打开和关闭的可插拔点和徽章系统,以及易于变成自己的模块? 经过多次试验和错误后,我得出的结论是,点和徽章只是过于交织在应用程序的唯一业务逻辑中,它们无法以简单的方式外化(许多规则涉及理解应用程序的核心结构,这使得事物已经相当耦合) 我目前以简单的方式做所有事情 – 我在服务类的方法中外部化了所有业务逻辑(validation,持久性,游戏化,通知)。 然而,这些方法已经变得非常杂乱,我担心这种方法很紧密。 没有简单的方法来简单地关闭任何底层系统

Hibernate:检查修改了哪个实体的字段

是)我有的: 我有Hibernate实体,它包含许多非瞬态字段,包​​括集合。 用户可以单独更新每个字段或一次更新某些字段。 真是个挑战: 在处理程序中,我应该检查实体的哪个字段已被更改: public void handle(Entity newVersion) { Session session = sessionFactory.openSession(); Entity oldVersion = (Entity) session.get(Entity.class, entity.getId()); List changedFields = compareChanges(oldVersion, newVersion); //HOW TO CHECK WHICH FIELDS ARE CHANGED? } 我想出于安全和通知的原因这样做。 手段: 并非所有用户都可以修改所有字段 我应该在某些字段更改时以特定方式通知特定用户。 真是个问题: 我得到了非常难看的代码。 实际上我遍历所有字段/集合并调用equals方法。 题: 可能是Hibernate提供更优雅的方式来检查哪些字段已被修改? 怎么样? PS @victorantunes提供了一个解决方案,但对我来说似乎太全面了。 可能是一些替代品?

如何在PHP和Java程序之间进行通信?

我正在开发一个Web应用程序,它经常需要运行计算密集型查询,其结果存储在一个单独的表中。 使用MySQL,此查询大约需要500毫秒 (尽可能优化,相信我)。 为了消除这个瓶颈,我创建了一个Java程序,它将相关的DB数据加载到内存中并执行查询本身; 它需要大约8 毫秒 (我有点自豪)。 我想使用这个Java程序来获取结果,如果它失败或不可用,则故障转移到PHP运行MySQL查询。 由于将数据加载到Java应用程序需要一些时间,因此它将加载一次并继续作为后台进程运行。 现在,问题是我如何通过PHP与这个Java应用程序进行通信? 记住: 多个PHP实例可能需要同时与此Java进程通信。 如果找不到Java实例(例如:由于某种原因它崩溃),PHP应该通过使用较旧和较慢的MySQL方法来进行。 可以接受诸如Memcache之类的中间过程。 理想情况下,该解决方案可以承受竞争条件。 我最好不要使用MySQL作为中介。 我打算使用Memcache,其中PHP将写入已知密钥并轮询,直到该密钥更改为“已完成”,同时Java将轮询该密钥,并且一旦发现某些内容执行该作业并将其设置为“已完成”。 但是,由于两个原因,这不起作用。 首先,PHP和Java都使用序列化对象读/写Memcache,并且没有办法改变它,我不希望Java反序列化PHP对象,反之亦然 – 它太乱了。 其次,这不符合ACID – 如果在那里建立的队列会有竞争条件。 就目前而言,我坚持轮询MySQL“选择”以查看作业是否已脱离队列,这远非最佳解决方案,因为轮询时间需要较慢,因此MySQL不会过于频繁。 我需要更好的解决方案! 谢谢。 编辑:Duh。 看起来我将在Java中使用某种SocketServer,我对此并不熟悉。 一个例子可能有帮助:)

“架构中立”和“便携式”之间有什么区别?

我正在阅读Herbert Schildt的书“Java:The Complete Reference”,他在那里写道Java是可移植的,并且是架构中立的。 这两个概念有什么区别? 我从文中无法理解。