Я новичок в hadoop. Я хотел бы провести с вами несколько подходов, которые я придумал.
Проблема:
2 набора данных: A и B.
Оба набора данных представляют песни: некоторые атрибуты высшего уровня, названия (1 .. ), исполнители (1 .. ).
Мне нужно сопоставить эти наборы данных с использованием алгоритмов равенства или нечетких алгоритмов (таких как Левенштейн, Джаккард, Яро-Винклер и т. Д.) В зависимости от названий и исполнителя.
Размеры набора данных: A = 20-30M, B ~ = 1-6M.
Так что здесь есть подходы, которые я придумал:
Загрузить набор данных B (наименьший) в HDFS. Используйте mapreduce для набора данных A (самый большой), где:
фаза карты: для каждой записи в A доступ к HDFS и извлечение записей B для сопоставления;
уменьшить фазу: записывает идентификаторы пар
загрузить набор данных A в распакованный кеш (т. Е. Кэш jboss) в оптимизированном виде для ускорения поиска. Используйте mapreduce для набора данных B, где:
фаза карты: для каждой записи в запросе B распределенный кеш для сопоставления
уменьшить: записывает идентификаторы пар
использовать mapreduce для объединения обоих наборов данных, где
фаза карты: получает запись из набора A и набора B, выполняет сопоставление
уменьшить фазу: то же
(Я не совсем уверен по поводу этого. 1-й: объединение будет декартовым произведением с триллионом записей; 2-е: не уверен, как hadoop может парализовать это в кластере)
использовать улей (сейчас я пытаюсь выяснить, как подключить пользовательские функции, которые будут выполнять сопоставление строк)
Я ищу указатели, какой подход будет лучшим кандидатом или, возможно, есть другие подходы, которые я не вижу.