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

时间:2013-10-14 14:10:48

标签: hadoop hdfs distributed-computing apache-pig hdfstore

我需要帮助解决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,并且它们不存储在不同的节点上。

感谢您的关注。

2 个答案:

答案 0 :(得分:0)

Hadoop将根据默认的HashPartitioner对元组进行分区,并将具有相同密钥的元组发送到单个reducers进行聚合。如果默认的HashPartitioner不符合要求,则可以写入custom partitionerHere是主干中HashPartitioner的代码。

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

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

答案 1 :(得分:0)

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