У меня есть база данных HBase, в которой хранятся списки смежности для ориентированного графа, причем ребра в каждом направлении хранятся в паре семейств столбцов, где каждая строка обозначает вершину.Я пишу задание mapreduce, которое принимает в качестве входных данных все узлы, у которых также есть ребро, указывающее из тех же вершин, что и ребро, направленное на какую-то другую вершину (назначенную в качестве субъекта запроса).Это немного сложно объяснить, но на следующей диаграмме набор узлов, взятых в качестве входных данных, при запросе к вершине 'A', будет {A, B, C}, поскольку все они имеют ребра из вершины'1':
Чтобы выполнить этот запрос в HBase, сначала я ищу вершины с ребрами в 'A' в семействе столбцов обратных ребер, получая {1}, идля каждого элемента в этом наборе ищите вершины с ребрами из этого элемента в семействе столбцов передних ребер.
Это должно привести к набору пар ключ-значение: {1: {A,B, C}}.
Теперь я хотел бы взять выходные данные этого набора запросов и передать их заданию hadoop mapreduce, однако я не могу найти способ «связывания» hbase-запросоввместе, чтобы обеспечить ввод для TableMapper в API Hbase mapreduce.До сих пор моя единственная идея состояла в том, чтобы предоставить другой начальный преобразователь, который принимает результаты первого запроса (для таблицы обратных ребер) для каждого результата, выполняет запрос к таблице прямых ребер и возвращает результаты, которые должны быть переданы ввторая работа на карте.Однако выполнение ввода-вывода из задания карты делает меня неловким, так как это, скорее всего, противоречит парадигме mapreduce (и может привести к узкому месту, если несколько картографов одновременно пытаются получить доступ к HBase).Поэтому, может ли кто-нибудь предложить альтернативную стратегию для выполнения такого рода запроса, или предложить какой-либо совет о передовых методах работы с hbase и mapreduce таким образом?Мне также было бы интересно узнать, есть ли какие-либо улучшения в моей схеме базы данных, которые могли бы смягчить эту проблему.
Спасибо,
Тим