mapreduce的多表输入

时间:2017-06-26 08:41:24

标签: hadoop mapreduce accumulo

我正在考虑使用accumulo表作为输入来进行mapreduce 有没有办法将2个不同的表作为输入,就像addInputPath之类的多个文件输入一样? 或者是否可以从文件中输入一个输入,而另一个输入来自AccumuloInputFormat

1 个答案:

答案 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手册)。