我正在考虑使用累积表作为输入来进行 mapreduce。
有没有一种方法可以将 2 个不同的表作为输入,就像 addInputPath
这样的多个文件输入一样?
或者是否可以使用 AccumuloInputFormat
从文件中获取一个输入,而从表中获取另一个输入?
最佳答案
您可能想看一下 AccumuloMultiTableInputFormat
。 Accumulo 手册演示了如何使用它 here .
示例用法:
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 的单元测试 here一些额外的信息。
请注意,与普通的多输入不同,您不能指定不同的映射器在每个表上运行。虽然,在这种情况下这不是一个大问题,因为传入的键/值类型是相同的,您可以使用:
RangeInputSplit split = (RangeInputSplit)c.getInputSplit();
String tableName = split.getTableName();
在您的映射器中锻炼记录来自哪个表(取自 Accumulo 手册)。
关于hadoop - mapreduce 的多表输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44755879/