我想在hadoop的不同节点存储分类数据。
,
Node - 1 >> Animal.txt
Node - 2 >> Sports.txt
Node - 3 >> Life.txt
.
.
.
Node - n >> nnnnn.txt
有办法吗?
可以对数据进行分区,以便每个子集(动物、运动、生活)位于同一节点的本地,尽管您不能可靠地选择存储它们的物理节点的标识。
只要您可以编程地将每个记录标识为集合(动物、运动、生活等)的一部分,那么您就可以实现您自己的Partitioner。这类似于实现一个哈希函数,其中具有相同哈希码的所有键将由相同的reducer减少。
[Raw Input] -> [Identity Mapper] ->[您的自定义分区器]-> [Identity Reducer]
正如其他用户提到的,HDFS默认会将输出数据复制到其他节点。因此,在这种情况下,如果希望保证数据的局部性,就必须禁用复制。当然,这是以容错为代价的。
通过将文件存储在特定节点上,您击败了HDFS的要点-它有冗余副本。我不认为你必须使用HDFS。您可以创建一个reduce作业来写本地文件系统,但我不建议这样做。
底层数据存储设施(HDFS)完全隐藏了数据实际存储的位置。因此,知道这是为你的应用程序一个"你不需要知道这个"。
另一方面,我很好奇你为什么要控制这个?