1

我需要 Hadoop 问题的帮助。
在我的 Java 系统中,我有一个创建n条记录的函数。显然,每条记录都是要写入 Hadoop 文本文件中的一行。

问题是:
如何将所有n条记录保存在同一个 Hadoop 节点中?换句话说,我希望将n条记录视为唯一记录,以确保如果这些记录之一(或其副本之一)在节点上,那么其他n-1条记录当然也在同一个节点。

例如,假设我的函数创建:

record1: 5     los angeles    rainy
record2: 8     new york       sunny
record3: 2     boston         rainy

当我在 Hadoop 的文本文件中附加这三个记录(三行)时,可能会发生 record1 到 node1,record2 到 node2,record3 到 node3。我想知道是否有办法确保所有三个记录都存储在同一个节点上,例如 node2,并且它们不会存储在不同的节点上。

感谢您的关注。

4

2 回答 2

0

Hadoop 将基于默认的 HashPartitioner 对元组进行分区,并将具有相同键的元组发送到单个 reducer 进行聚合。如果默认 HashPartitioner 不符合要求,则可以编写自定义分区器。是主干中 HashPartitioner 的代码。

另一种方法是根据分区策略从映射器发出键,HashPartitioner 会将具有相同键的所有元组发送到一个reducer。

此外,请考虑 Map 和 Reduce 级别的抽象,而不是节点级别。Hadoop 试图隐藏集群的网络拓扑。

于 2013-10-14T16:52:31.200 回答
0

通过将并行度设置为 1。这意味着通过将减速器的数量指定为一个。然后您的所有记录将被写入一个部分文件。但缺点是你的工作需要更长的时间才能完成。

于 2014-01-08T15:57:50.557 回答