问题标签 [distributed-system]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 运行 Hadoop MapReduce 作业时,如何获取文件名/文件内容作为 MAP 的键/值输入?
我正在创建一个程序来分析 PDF、DOC 和 DOCX 文件。这些文件存储在 HDFS 中。
当我开始我的 MapReduce 工作时,我希望 map 函数将文件名作为键,将二进制内容作为值。然后我想创建一个流阅读器,我可以将它传递给 PDF 解析器库。如何实现 Map Phase 的键/值对是文件名/文件内容?
我正在使用 Hadoop 0.20.2
这是开始工作的旧代码:
我知道还有其他输入格式类型。但是有没有一个可以完全满足我的要求?我发现文档很模糊。如果有可用的,那么 Map 函数输入类型应该如何?
提前致谢!
network-programming - Understanding how good is a Pastry-P2P-like resource allocation via DHT
I am about to develop a distributed system. The system, among all functionalities, needs to allocate some resources (large resources that can be fragmented in smaller blocks). In order to do that, I want to use the Chord/Pastry P2P approach (stations on a logic ring-net). Pastry has a very interesting approach for resource allocation: when a user station needs to send something, the hash of the station guid is used to find the key in the dht, so something like this is considered:
User Station -> GUID (hash on user station ip) -> HASH -> I obtain a value called X -> Use this hash and find in the Pastry ring-net the station having that same GUID (hash on Pastry node public key) value is located (or the immediate predecessor) -> put data there.
Well, this means that, ideally, every user always locates its own data in the same Patry station (Pastry node). Well, the protocol also mirrors data on neighbours so a user can find its data in few nodes.
Is this a good approach? Are there any possible side effects on proceeding as before?
file-io - 为什么 Hadoop 文件系统不支持随机 I/O?
像 Google File System 和 Hadoop 这样的分布式文件系统不支持随机 I/O。
(它不能修改之前写入的文件。只能写入和附加。)
他们为什么要设计这样的文件系统?
设计的重要优势是什么?
PS 我知道 Hadoop 将支持修改写入的数据。
但是他们说,它的性能会很不好。为什么?
distributed-system - 什么是垂直和水平分布?
- 垂直分布:分布式处理相当于将a组织
client-server application
为amultitiered architecture
。将逻辑上不同的组件放在不同的机器上。 - 横向分布:分布
clients and servers
在现代建筑中较为常见。Aclient
orserver
可能physically
被拆分为logically
等效的部分,但每个部分都在完整数据集的自己的份额上运行,从而平衡负载。
我试图了解vertical
和之间有什么不同horizontal
?logically
“ ”和“ ”是什么意思physically
?...但我不能!有人知道.. ??
java - 常识题:网络访问时间、缓存访问时间、磁盘访问时间
我编写了一个基于客户端-服务器的分布式文件系统的模拟器。现在要计算平均块访问时间,我想要以下内容:
- 本地缓存访问时间
- 客户端到客户端缓存访问时间(同一网络)
- 客户端到服务器缓存访问时间(不同网络)
- 客户端到磁盘访问时间
假设块大小为 64MB...
谁能给我大概的时间...证明它的链接将不胜感激...
谢谢。
networking - 了解如何在 P2P Chord/Pastry-like 网络中管理消息路由方向
这是一个关于大型可扩展 P2P 网络方法的问题:逻辑环网 ovrlay。
考虑 P2P 网络的环境。有 N 台计算机通过一个环将每个人相互连接起来。每个节点都有一个路由表,用于存储前任节点和后继节点。这是路由表只存储前驱和后继的最简单的情况。每个节点都有一个 id,它是一个数字。环的组织方式使升序的数字按顺时针方向分配。
所以我们可以有这样的情况: * - 12 - 13 - 45 - 55 - 180 - 255 - * 这个网络有 6 个节点,它们相互连接。
当一个节点必须向另一个节点发送消息时,使用路由表,如果通用节点有传入消息,它会查看目标地址,如果不在他的路由表中,则后继或前任将由路由决定它。
现在让我们考虑这个例子。在我的简单网络中,节点 13 想向节点 255 发送消息。由于每个节点只能看到前任和后继,所以每个节点都无法考虑全局网络,在 P2P 中,实际上一个节点只能看到网络的一部分。所以节点 13 需要做出决定:将消息路由到哪里(因为目的地不在其附近)?消息必须发送到 45 还是 12?(顺时针还是逆时针?)。
好吧,显然,发送到 12 是一个更好的决定,但是节点 13 是如何知道这一点的呢?
最简单的解决方案是:总是顺时针走,但在这种情况下,一个非常近的节点将在很长一段时间内到达......而它在拐角处......
如何处理?
PS:有一些解决方案Fingering
适用于基于顺时针路由的方法。指法将其他地址放入路由表中以创建跳转链接...这是一种可以使用但仅使用顺时针路由的解决方案...
http://en.wikipedia.org/wiki/File:Chord_route.png
我想知道一个好的解决方案以找到正确的路由方向......它存在吗?Chord 如何处理这个问题?
谢谢你。
database - 小型数学数据的最佳数据存储解决方案,但速度快且具有聚合函数
我正在为具有以下要求的项目寻找数据存储解决方案:
- 应用程序在商店中动态创建容器/表。
- 在一小段时间内(例如两周),该表/容器并行获得大量插入。最后一次阅读必须立即可用。
- 插入的数据非常小,有 4 到 6 个数字列。
- 需要小型查询/过滤支持,但不需要连接或交叉查询。
- 需要执行一些聚合函数,如“Count”、“Sum”、“Max”、“Min”和“Avg”。
基本上,我需要类似 Windows Azure 表存储但具有聚合函数的东西。
你会推荐什么?
algorithm - 关于领导人选举的一些想法
我正在尝试执行领导者选举。这些天我正在考虑使用键值存储来实现这一点,但我不太确定这个想法在可伸缩性和一致性问题上是否可靠。真正的部署将有数千个节点,并且选举应该在没有任何中央机构或像 zookeeper 这样的服务的情况下进行。
现在,我的问题是:
我可以使用键值存储(最好是像 riak 这样的 CA 可调参数)来执行领导者选举吗?使用 KV 存储进行领导人选举有哪些可能的优点/缺点?
谢谢!
编辑:我不再对欺负算法方法感兴趣。
ruby - DRb 方法访问
我正在 DRb 中编写一个简单的分布式系统。
我有所有的同行,还有一台服务器来做引导。在该服务器中,我有一些方法,例如“suggest_peer”、“start_service”和“stop_service”。
当对等点连接到服务器时,他可以调用所有三个方法。我希望他只能打电话给第一个。
另外,我有一个初始化服务器的文件,并且有一个小 cmd 行,所以我可以启动服务、调试、日志等等。我希望该 cmd 行能够调用第二种和第三种方法,以及第一种方法。
我怎样才能做到这一点?如何防止对等方停止服务?
如果我将服务方法设为私有,则无法从 cmd 行调用它们。
real-time - 处理实时分布式系统中的延迟
我正在尝试实现扑克服务器。http 服务器将数据包转发到处理所有扑克手状态的后端服务器。在任何一手牌中,玩家行动的时间为 10 秒(下注、弃牌、跟注、加注等)。如果 10 秒内没有响应,服务器会自动为他们折叠。为了检查 10 秒是否已经过去,维护了必须接收动作的事件列表。这是一个按时间排序的优先级队列,当前正在玩的每一手牌在优先级队列中都有一个条目。
考虑以下场景,因为最后一个动作在下一个动作到达 http 服务器之前 9.99 秒过去了。当操作被转发到后端服务器时,额外的时间过去了,所以现在总共过去了 10.1 秒。后端服务器将宣布手折叠,但我希望处理该操作,因为从技术上讲它在 9.99 秒后到达 http 服务器。现在一种解决方案是让后端在宣布弃牌之前等待一些额外的时间,以查看时间戳为 9.99 秒的动作是否到来。但这会导致下一个人开始行动的时间延迟。
我想要的目标是
- 处理在 9.99 秒到达 http 服务器的操作,而不是折叠他们的手。
- 积极减少由于必须进行空闲等待以“解决”要点 1 中提到的问题而导致的延迟。
有哪些不同的解决方案?对于分布式系统的专家来说,有关于各种解决方案的权衡是什么的已知文献。我想知道分布式系统文献认为可以接受的各种解决方案。不仅仅是各种临时解决方案。