Hadoop:如何创建自增ID

3

我需要在hadoop中找到一个与AUTO_INCREMENT id等价的SQL语句。

当我的reduce任务识别出一个新项目时,这些项目需要分配唯一的ID。

  • 我该如何在整个集群中共享原子计数器?报告器计数器似乎只是增量计数器,我没有看到getAndIncrement功能。

  • 在map/reduce任务开始之前,我如何设置该计数器?


2
可能是Distributed sequence number generation?的重复问题。 - Praveen Sripati
1个回答

2
要执行分布式ID生成,您可以仅生成UUID或使用在Apache Zookeeper中找到的功能,在Hadoop集群上进行分布式协调。免责声明:我从未使用过Zookeeper,因此不知道是否真正(甚至理论上)可以获得全局连续的ID集,这似乎是问题所问的。

但是,生成UUID确实有成本;它们需要一些时间来生成。

有关分布式ID生成的良好通用信息,请参见此Stack Overflow问题


是的,它们必须是在特定范围内递增的ID,而不仅仅是唯一的。 - David Parks
我想这就是你想要的。那你可以看看zookeeper。虽然我已经在hadoop上做了很多事情,但我总是生成UUID,因为构建全局原子整数的想法听起来很奇怪。在一个1000个节点的集群上,你希望有999台机器等待吗?说真的,我相信Zookeeper的人已经解决了这个问题,无论它看起来有多么棘手。如果你不能得到你想要的东西,在map阶段生成uuid,然后在reduce阶段或MR作业完成后的一个单独的连续进程中创建一个连续集。 - Ray Toal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接