我正在考虑使用accumulo表作为输入来进行mapreduce
有没有办法将2个不同的表作为输入,就像addInputPath
之类的多个文件输入一样?
或者是否可以从文件中输入一个输入,而另一个输入来自AccumuloInputFormat
?
答案 0 :(得分:0)
您可能想看看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的单元测试。
请注意,与普通多输入不同,您无法在每个表上指定不同的Mapper。虽然,在这种情况下它不是一个大问题,因为传入的键/值类型是相同的,你可以使用:
RangeInputSplit split = (RangeInputSplit)c.getInputSplit();
String tableName = split.getTableName();
在您的映射器中锻炼记录来自哪个表(取自Accumulo手册)。