我们的云中有数百台服务器。这些服务器中的任何一个都可以随时调用一个脚本。我必须确保在任何给定时间只有一台服务器正在运行该脚本。当一台服务器已获取脚本锁定,而另一台服务器尝试执行时,只需写入日志文件并退出即可。可以有多个这样的脚本,每个脚本都有一个单独的互斥锁。这意味着我想要一个能够容纳多个服务器多个脚本的解决方案。我正在寻找一个非常简单的解决方案。请向我指出任何可用的工具或建议我实现这一点的流行方法。
Spark 相对较新,并尝试在独立的 12 核三机器集群上运行 SparkPi 示例。我无法理解的是,与使用 12 个切片相比,使用单个切片运行此示例可以提供更好的性能。当我使用并行函数时也是如此。随着添加每个切片,时间几乎呈线性缩放。如果我做错了什么,请告诉我。代码片段如下:
val spark = new SparkContext("spark://telecom:7077", "SparkPi",
System.getenv("SPARK_HOME"), List("target/scala-2.10/sparkpii_2.10-1.0.jar"))
val slices = 1
val n = 10000000 * slices
val count = spark.parallelize(1 to n, slices).map {
i =>
val x = random * 2 - 1
val y = random * 2 - 1
if (x * x + y * y < 1) 1 else 0
}.reduce(_ + _)
println("Pi is roughly " + 4.0 * count / n)
spark.stop()
Run Code Online (Sandbox Code Playgroud)
更新:问题在于随机函数,因为它是同步方法,所以无法扩展到多个核心。
我正在开发一个 Spring Boot 应用程序。
由于 Spring Boot 为应用程序创建了 .jar 文件。我想将这个特定的应用程序集群到不同的服务器上。假设我构建了一个 jar 文件并运行了一个项目,那么它应该从多个定义的服务器以集群模式运行,并且应该能够满足最终用户的需求。
我的 jar 将仅驻留在一台服务器上,但它将聚集在多个服务器上。当最终用户从我的 Spring Boot 应用程序调用 Web 服务时,他永远不知道它是从哪里调用的。
集群背后的原因是假设将来任何服务器出现故障,最终用户仍然可以从另一台服务器访问 Web 服务。但我不知道如何使其聚集。
任何人都可以给我对此的见解吗?
java distributed-computing cluster-computing embedded-tomcat-7 spring-boot
在OpenMPI代码库中,每个模块都有多个变体。调用时,您可以从模块化组件架构 (MCA)中选择您想要使用的mpirun模块。选项包括...
您可以像这样指定 MCA 组件的选择:
mpirun --mca btl self,openib --mca pml ob1 -np $nProcs ./myprogram
我的问题:
-v到我的mpirun命令中,但它没有打印任何额外的内容。)我有一个 Spark 应用程序,需要大量使用它unions,我将在不同时间、不同情况下将大量 DataFrame 合并在一起。我正在努力使这项工作尽可能高效地进行。我对 Spark 还很陌生,我突然想到了一件事:
如果我有dfA具有 X 个分区 ( ) 的 DataFrame 'A' ( ) numAPartitions,并将其联合到dfB具有 Y 个分区 ( ) 的DataFrame 'B' ( numBPartitions) ,那么生成的联合 DataFrame ( unionedDF) 会是什么样子,结果如何分区?
// How many partitions will unionedDF have?
// X * Y ?
// Something else?
val unionedDF : DataFrame = dfA.unionAll(dfB)
Run Code Online (Sandbox Code Playgroud)
对我来说,理解这一点似乎非常重要,因为 Spark 性能似乎严重依赖于 DataFrames 采用的分区策略。因此,如果我左右合并 DataFrame,我需要确保不断管理合并后的 DataFrame 的分区。
我唯一能想到的(以便正确管理联合数据帧的分区)是对它们重新分区,然后在联合它们后立即将数据帧持久保存到内存/磁盘:
val unionedDF : DataFrame = dfA.unionAll(dfB) …Run Code Online (Sandbox Code Playgroud) partitioning distributed-computing unions apache-spark apache-spark-sql
我是 Condor 的新手,正在尝试在 Condor 上运行我的 Python 程序,但很难做到这一点。我发现的所有教程都假设单个文件 Python 程序,但我的 Python 程序由多个包和文件组成,并且还使用其他库,例如 numpy 和 scipy。那么,我怎样才能让Condor运行我的程序呢?我应该将程序转换为某种可执行文件吗?或者,有什么方法可以将Python源代码转移到Condor机器上并让Python在Condor上运行源代码吗?
谢谢,
我知道 Kafka 不是 ak/v 商店,但请耐心听我说。假设它是使用下面的 k/v API 来粗略实现的。每个键都是一个主题,键的当前“值”是写入该主题的最后一条消息:
put(key, value) --> publish(topic=key, message=value)
get(key) --> consume(topic=key, offset = last_offset - 1)
Run Code Online (Sandbox Code Playgroud)
此外,假设状态在不同的 Kafka 集群之间复制(使用 MirrorMaker 双向),以允许用户读/写到更近的数据中心以减少延迟。
我已经知道这样做的一些明显的副作用,例如:
这里主要关注的是延迟,尤其是不同集群之间的延迟。与 Redis、memcached 或 etcd 等传统 k/v 解决方案相比,您认为该解决方案在压力大的工作负载(例如,给定键/主题上每秒数千次写入)和压力网络条件下的表现如何?
想法?
非常感谢你。
为什么 Paxos 需要两个阶段(prepare/promise+ accept/accepted)而不是一个阶段?也就是说,仅使用prepare/promise部分,如果提议者收到了大多数接受者的回复,则选择该值。
问题出在哪里,它是否破坏了安全性或活力?
我正在评估 Microsoft Orleans 作为自定义分布式缓存(以及其他功能)的基础。
我能够使用 MembershipTableGrain 创建一个用于评估目的的不可靠集群。一切都按照文档中的描述进行。
现在我计划使用本地服务器建立一个可靠的集群(Azure 不是一个选项)。我似乎倾向于使用关系存储 (SqlServer/ADO.net) 会员提供程序
我的问题是:
如果筒仓成员数据库关闭或无法访问(服务器中断、网络问题等),集群内筒仓的状态会发生什么情况?据我了解奥尔良成员协议,我认为这会影响整个集群。
apache-spark ×2
apache-kafka ×1
cloud ×1
condor ×1
distributed ×1
hpc ×1
java ×1
latency ×1
mpi ×1
openmpi ×1
orleans ×1
partitioning ×1
paxos ×1
python-2.7 ×1
scala ×1
snapshot ×1
spring-boot ×1
unions ×1