Я не думаю, что есть что-то, что нуждается в исследовании.
Класс org.apache.hadoop.mapreduce.Partitioner
, и вы можете дополнительно реализовать org.apache.hadoop.conf.Configurable
как средство "передачи параметров" в Partitioner. Например, BinaryPartitioner позволяет вам установить левое и правое смещения в байтовом массиве для разделения по сравнению с хешем ключа. В зависимости от ваших данных, это может быть даже достаточно
Затем, расширяя класс Partitioner, вы должны реализовать метод getPartition
для возврата целого числа на основе ваших собственных входных данных и логики. В качестве параметра вы указали общее количество разделов, так что не беспокойтесь об этом.
Затем вам просто нужно указать, что ваша работа использует этот Partitioner в JobConf.
Если вы попытаетесь сделать это с помощью Spark, Hive, Pig и т. Д., Вы должны убедиться, что ваш класс находится на пути к классу YARN вашей работы