标签: distributed-computing

Node.js可以在Chrome中使用其本机客户端运行客户端(即将发布)

谷歌Chrome的本机客户端即将发布.http://blog.chromium.org/2011/02/native-client-getting-ready-for-takeoff.html 这是否允许node.js在浏览器中运行,使分布式应用程序能够相互通信而不必通过服务器?

javascript client p2p distributed-computing node.js

11
推荐指数
2
解决办法
2万
查看次数

有效地使用速率受限的API(Echo Nest)和分布式客户端

背景

Echo Nest有一个限速API.给定的应用程序(在使用API​​密钥的请求中标识)每分钟最多可以进行120次REST调用.服务响应包括对最后一分钟呼叫总数的估计; 重复滥用API(超出限制)可能导致API密钥被撤销.

当从单个机器(向客户端提供服务的Web服务器)使用时,很容易控制访问 - 服务器完全了解请求的历史并且可以正确地调节自身.

但我正在开发一个程序,其中分布式独立客户端并行发出请求.

在这种情况下,最不理解的是什么是最佳解决方案.一般来说,问题似乎是不可判定的 - 如果超过120个客户,都没有历史记录,同时提出初始请求,那么将超过费率.

但由于这是一个个人项目,客户使用预计会是零星的(突发性的),而且我的项目从未取得过巨大的成功,因此预计这不是一个大问题.更可能的问题是,有时候较少数量的客户希望尽快发出许多请求(例如,客户可能需要,特别是在第一次启动时发出数千个请求 - 这是可能的两个客户端将在大约相同的时间启动,因此他们必须合作共享可用带宽).

鉴于以上所有,客户端的适当算法是什么,以便适当地限制速率? 请注意,有限合作可能的,因为API会返回所有客户端在最后一分钟内的请求总数.

现行解决方案

我目前的解决方案(当问题写好时 - 一个更好的方法作为答案)非常简单.每个客户端都记录了最后一次呼叫的时间以及API在该呼叫上报告的最后一分钟的呼叫数.

如果呼叫数小于60(限制的一半),则客户端不会限制.这允许快速突发少量请求.

否则(即,当有更多先前的请求时),客户端计算它将需要工作的限制速率(即period = 60 / (120 - number of previous requests)),然后等待直到前一个呼叫和当前时间之间的间隙超过该时间段(以秒为单位;在60秒内分钟;每分钟120个最大请求数).这有效地限制了速率,因此,如果单独行动,它将不会超过限制.

但上面有问题.如果你仔细考虑,你会发现,对于大量的请求,单个客户端振荡并且没有达到最大吞吐量(这部分是因为"初始突发"突然"落在窗外",部分是因为算法没有充分利用其历史).多个客户将在一定程度上合作,但我怀疑它是最优的.

改善方案

我可以想象一个更好的解决方案,它使用客户端的完整本地历史记录,并使用隐藏马尔可夫模型模拟其他客户端.因此,每个客户端都会使用API​​报告来模拟其他(未知)客户端并相应地调整其速率.

我还可以设想一个单个客户端的算法,该算法逐步从小突发的无限行为过渡到许多请求的最佳有限行为,而不会引入振荡.

这样的方法存在吗?任何人都可以提供实施或参考吗?谁能想到更好的启发式方法?

我想这是一个已知的问题.在什么领域?排队理论?

我也猜测(参见前面的评论)没有最佳解决方案,并且可能有一些传说/传统/接受的启发式在实践中运作良好.我很想知道...目前我正努力在已知的网络协议中找出类似的问题(我想如果有的话,Perlman会有一些漂亮的解决方案).

在一个需要中央服务器来协助协作的解决方案中,我也感兴趣(在较小程度上,如果程序变得流行,将来参考).

放弃

这个问题根本不是对Echo Nest的批评; 他们的服务和使用条件都很棒.但是我越想到如何最好地使用它,它变得越复杂/有趣......

此外,每个客户端都有一个本地缓存,用于避免重复调用.

更新

可能是相关的论文.

algorithm networking feedback throttling distributed-computing

11
推荐指数
1
解决办法
2171
查看次数

在证明FLP不可能性结果时存在0和1价配置

在已知的论文"一个故障过程的分布式共识的不可能性"(JACM85)中,FLP(Fisher,Lynch和Paterson)证明了令人惊讶的结果,即没有完全异步的共识协议甚至可以容忍一个未宣布的过程死亡.

在引理3中,在显示D包含0价和1价配置之后,它说:

如果一个邻居在一个步骤中产生结果,则调用两个配置邻居.通过简单的归纳,存在邻域C 0,C1∈C,使得D 6 = e(C 6)是i价,i = 0,1.

我可以按照整个证据,除非他们声称存在这样的C 0和C 1.你能给我一些提示吗?

distributed-computing consensus

11
推荐指数
1
解决办法
596
查看次数

Hadoop:将多个IP地址绑定到群集NameNode

我在Softlayer上有一个四节点Hadoop集群.主(NameNode)具有用于外部访问的公共IP地址和用于群集访问的专用IP地址.从节点(datanode)具有私有IP地址,我正在尝试连接到主节点,而无需为每个从节点分配公共IP地址.

我已经意识到设置fs.defaultFS为NameNode的公共地址允许外部访问,除了NameNode只侦听传入连接的地址,而不是私有地址.所以我在datanode日志中得到ConnectionRefused异常,因为他们试图连接NameNode的私有IP地址.

我认为解决方案可能是将公共和私有IP地址都设置为NameNode,以便保留外部访问并允许我的从属节点也连接.

那么有一种方法可以将这两个地址绑定到NameNode,以便它可以同时监听吗?

编辑:Hadoop版本2.4.1.

java hadoop network-programming distributed-computing cluster-computing

11
推荐指数
1
解决办法
4919
查看次数

谷歌数据流与Apache风暴

阅读Google的Dataflow API,我的印象是它与Apache Storm的功能非常相似.通过流水线流实时数据处理.除非我完全忽略了这一点,否则我不希望在如何执行彼此写入的管道上建立桥梁,而是期待与Google不同的东西,而不是重新发明轮子.Apache Storm已经很好地放置并可用于任何编程语言.做这样的事情的真正价值是什么?

distributed-computing apache-spark google-cloud-dataflow

11
推荐指数
1
解决办法
4061
查看次数

是否有一个商定的UML图表样式用于记录或说明(Docker)容器在系统架构规范中的作用?

我打算绘制一些UML结构图,说明Docker图像(或部署图中的容器)在我构建的软件的整体结构中的位置.我有兴趣说明容器的内容,网络端口和其他接口的映射以及多个容器互操作的方式.

我的问题空间是分布式,基于事件的系统(DEBS),所以我希望我的大多数容器都有消息队列进出.我的架构的另一部分涉及使用内存数据网格,该网格跨越集群中多个节点的多个容器.

如何用UML建模?如果不能,UML是否有计划解决此类分发问题?

architecture documentation uml distributed-computing docker

11
推荐指数
1
解决办法
4201
查看次数

杀死一个火花任务

我有一个很长的Spark工作,目前很少有任务被停止.有没有办法从驱动程序节点中杀死那些停滞的任务?

出于权限原因,我可以登录,但不能杀死从属节点上的作业,所以我正在寻找一种方法来单独从驱动程序节点执行此操作.注意,我不想杀死整个Spark工作 - 只有一两个停滞的任务.

如果它有帮助,我使用Mesos并可以访问Web UI,但是它不包含杀死任务的选项.

distributed-computing mesos apache-spark

11
推荐指数
1
解决办法
2363
查看次数

如何跨分区平衡我的数据?

编辑:答案有帮助,但我在Spark中描述了我的解决方案:memoryOverhead问题.


我有一个带有202092分区的RDD,它读取其他人创建的数据集.我可以手动看到数据在分区之间没有平衡,例如它们中的一些有0个图像而其他有4k,而平均值是432.当处理数据时,我收到了这个错误:

Container killed by YARN for exceeding memory limits. 16.9 GB of 16 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead.
Run Code Online (Sandbox Code Playgroud)

而memoryOverhead已经提升了.我觉得有些尖峰正在发生,这使得Yarn杀死我的容器,因为尖峰溢出了指定的边界.

那么我该怎么做才能确保我的数据在各个分区之间(大致)平衡?


我的想法是repartition()会工作,它会调用shuffling:

dataset = dataset.repartition(202092)
Run Code Online (Sandbox Code Playgroud)

但是我得到了同样的错误,尽管有编程指南的指示:

重新分区(numPartitions)

随机重新调整RDD中的数据以创建更多或更少的分区并在它们之间进行平衡.这总是随机播放网络上的所有数据.


检查我的玩具示例:

data = sc.parallelize([0,1,2], 3).mapPartitions(lambda x: range((x.next() + 1) * 1000))
d = data.glom().collect()
len(d[0])     # 1000
len(d[1])     # 2000
len(d[2])     # 3000
repartitioned_data = data.repartition(3)
re_d = repartitioned_data.glom().collect()
len(re_d[0])  # 1854
len(re_d[1])  # 1754 …
Run Code Online (Sandbox Code Playgroud)

python hadoop distributed-computing bigdata apache-spark

11
推荐指数
1
解决办法
5898
查看次数

pyspark:NameError:未定义名称'spark'

我正在复制官方文档网站上的pyspark.ml示例:http://spark.apache.org/docs/latest/api/python/pyspark.ml.html#pyspark.ml.Transformer

data = [(Vectors.dense([0.0, 0.0]),), (Vectors.dense([1.0, 1.0]),),(Vectors.dense([9.0, 8.0]),), (Vectors.dense([8.0, 9.0]),)]
df = spark.createDataFrame(data, ["features"])
kmeans = KMeans(k=2, seed=1)
model = kmeans.fit(df)
Run Code Online (Sandbox Code Playgroud)

但是,上面的示例不会运行并给我以下错误:

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-28-aaffcd1239c9> in <module>()
      1 from pyspark import *
      2 data = [(Vectors.dense([0.0, 0.0]),), (Vectors.dense([1.0, 1.0]),),(Vectors.dense([9.0, 8.0]),), (Vectors.dense([8.0, 9.0]),)]
----> 3 df = spark.createDataFrame(data, ["features"])
      4 kmeans = KMeans(k=2, seed=1)
      5 model = kmeans.fit(df)

NameError: name 'spark' is not defined
Run Code Online (Sandbox Code Playgroud)

需要设置哪些额外的配置/变量才能运行示例?

machine-learning distributed-computing apache-spark pyspark apache-spark-ml

11
推荐指数
3
解决办法
4万
查看次数

使用分布式Tensorflow学习Keras模型

我在两台不同的机器上安装了两个GPU.我想构建一个集群,允许我通过一起使用两个GPU来学习Keras模型.

Keras博客分布式培训部分显示两段代码并链接官方Tensorflow文档.

我的问题是我不知道如何学习我的模型,用Keras编写,使用Tensorflow文档实际描述了Tensorflow对象的过程.

例如,如果我想在多个GPU的集群上执行以下代码,我该怎么办?

# For a single-input model with 2 classes (binary classification):

model = Sequential()
model.add(Dense(32, activation='relu', input_dim=100))
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['accuracy'])

# Generate dummy data
import numpy as np
data = np.random.random((1000, 100))
labels = np.random.randint(2, size=(1000, 1))

# Train the model, iterating on the data in batches of 32 samples
model.fit(data, labels, epochs=10, batch_size=32)
Run Code Online (Sandbox Code Playgroud)

python gpu distributed-computing cluster-computing keras

11
推荐指数
1
解决办法
5091
查看次数