Ввод нескольких таблиц для 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) в вашем картографе.