Ввод нескольких таблиц для mapreduce

Я имею в виду сделать mapreduce, используя в качестве входных данных таблицы накопления.
Есть ли способ иметь 2 разных таблиц в качестве входных данных, так же, как он существует для ввода нескольких файлов, таких как addInputPath?
Или возможно иметь один вход из файла и другой из таблицы с AccumuloInputFormat?

1 ответ

Решение

Вы, вероятно, хотите взглянуть на AccumuloMultiTableInputFormat, Руководство Accumulo демонстрирует, как использовать его здесь.

Пример использования:

job.setInputFormat(AccumuloInputFormat.class);

AccumuloMultiTableInputFormat.setConnectorInfo(job, user, new PasswordToken(pass));
AccumuloMultiTableInputFormat.setMockInstance(job, INSTANCE_NAME);

InputTableConfig tableConfig1 = new InputTableConfig();
InputTableConfig tableConfig2 = new InputTableConfig();

Map<String, InputTableConfig> configMap = new HashMap<String, InputTableConfig>();
configMap.put(table1, tableConfig1);
configMap.put(table2, tableConfig2);

AccumuloMultiTableInputFormat.setInputTableConfigs(job, configMap);

См. Модульный тест для AccumuloMultiTableInputFormat здесь для получения дополнительной информации.

Обратите внимание, что в отличие от обычных множественных входов, вы не можете указать разные Mappers для запуска на каждой таблице. Хотя в этом случае это не большая проблема, поскольку входящие типы Key/Value одинаковы, и вы можете использовать:

RangeInputSplit split = (RangeInputSplit)c.getInputSplit();
String tableName = split.getTableName();

Чтобы выяснить, из какой таблицы поступают записи (взяты из руководства Accumulo) в вашем картографе.

Другие вопросы по тегам