如何在一个hadoop节点上写多条记录

ohtdti5x  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(510)

我需要帮助解决hadoop问题。
在我的java系统中,我有一个创建n条记录的函数。在hadoop中,每条记录显然都是要写入文本文件的一行。
问题是:
如何在同一hadoop节点中保存所有n条记录?换句话说,我希望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,而不是存储在不同的节点上。
谢谢你的关注。

rjjhvcjd

rjjhvcjd1#

hadoop将基于默认的hashpartitioner对元组进行分区,并将具有相同密钥的元组发送到单个reducer进行聚合。如果默认的hashpartitioner不符合要求,那么可以编写一个自定义的partitioner。下面是 Backbone.js 中hashpartitioner的代码。
另一种方法是根据分区策略从Map器中发出键,hashpartitioner会将所有具有相同键的元组发送给其中一个reducer。
另外,从Map上思考,减少抽象级别,而不是节点级别。hadoop试图隐藏集群的网络拓扑。

xtfmy6hx

xtfmy6hx2#

将平行度设置为1。也就是说,将你的减速机数量指定为1。然后你所有的记录都会被写入一个文件。但缺点是你的工作需要更长的时间才能完成。

相关问题