谷歌Chrome的本机客户端即将发布.http://blog.chromium.org/2011/02/native-client-getting-ready-for-takeoff.html 这是否允许node.js在浏览器中运行,使分布式应用程序能够相互通信而不必通过服务器?
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
在已知的论文"一个故障过程的分布式共识的不可能性"(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.你能给我一些提示吗?
我在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
阅读Google的Dataflow API,我的印象是它与Apache Storm的功能非常相似.通过流水线流实时数据处理.除非我完全忽略了这一点,否则我不希望在如何执行彼此写入的管道上建立桥梁,而是期待与Google不同的东西,而不是重新发明轮子.Apache Storm已经很好地放置并可用于任何编程语言.做这样的事情的真正价值是什么?
我打算绘制一些UML结构图,说明Docker图像(或部署图中的容器)在我构建的软件的整体结构中的位置.我有兴趣说明容器的内容,网络端口和其他接口的映射以及多个容器互操作的方式.
我的问题空间是分布式,基于事件的系统(DEBS),所以我希望我的大多数容器都有消息队列进出.我的架构的另一部分涉及使用内存数据网格,该网格跨越集群中多个节点的多个容器.
如何用UML建模?如果不能,UML是否有计划解决此类分发问题?
我有一个很长的Spark工作,目前很少有任务被停止.有没有办法从驱动程序节点中杀死那些停滞的任务?
出于权限原因,我可以登录,但不能杀死从属节点上的作业,所以我正在寻找一种方法来单独从驱动程序节点执行此操作.注意,我不想杀死整个Spark工作 - 只有一两个停滞的任务.
如果它有帮助,我使用Mesos并可以访问Web UI,但是它不包含杀死任务的选项.
编辑:答案有帮助,但我在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) 我正在复制官方文档网站上的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
我在两台不同的机器上安装了两个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) apache-spark ×4
hadoop ×2
python ×2
algorithm ×1
architecture ×1
bigdata ×1
client ×1
consensus ×1
docker ×1
feedback ×1
gpu ×1
java ×1
javascript ×1
keras ×1
mesos ×1
networking ×1
node.js ×1
p2p ×1
pyspark ×1
throttling ×1
uml ×1