如何在单个 Hadoop 节点上写入多个记录



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

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

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

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

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

感谢您的关注。

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

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

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

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