Реализация разделения диапазона для перекоса данных в Hadoop MapReduce - PullRequest
0 голосов
/ 17 ноября 2018

У меня есть набор данных со значением даты в качестве ключа. Тем не менее, мои данные искажены, это означает, что чем более поздняя дата, тем больше записей с этой датой в качестве ключа. Таким образом, разбиение хеша (по умолчанию в Hadoop MR) не подходит, так как оно будет равномерно распределять ключи, перегружая определенные редукторы. Вот почему я решил написать собственный разделитель. Любые подсказки о том, как можно реализовать разделение диапазонов в Hadoop MR, потому что мои исследования до сих пор приводили только к исследовательским работам.

1 Ответ

0 голосов
/ 18 ноября 2018

Я не думаю, что есть что-то, что нуждается в исследовании.

Класс org.apache.hadoop.mapreduce.Partitioner, и вы можете дополнительно реализовать org.apache.hadoop.conf.Configurable как средство "передачи параметров" в Partitioner. Например, BinaryPartitioner позволяет вам установить левое и правое смещения в байтовом массиве для разделения по сравнению с хешем ключа. В зависимости от ваших данных, это может быть даже достаточно

Затем, расширяя класс Partitioner, вы должны реализовать метод getPartition для возврата целого числа на основе ваших собственных входных данных и логики. В качестве параметра вы указали общее количество разделов, так что не беспокойтесь об этом.

Затем вам просто нужно указать, что ваша работа использует этот Partitioner в JobConf.

Если вы попытаетесь сделать это с помощью Spark, Hive, Pig и т. Д., Вы должны убедиться, что ваш класс находится на пути к классу YARN вашей работы

...