mapreduce 的多个 table 输入

Multiple table input for mapreduce

我正在考虑使用 accumulo tables 作为输入进行 mapreduce。
有没有一种方法可以将 2 个不同的 table 作为输入,就像 addInputPath 这样的多个文件输入一样?
或者是否可以从文件中输入一个,而从 table 和 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 了解更多信息。

请注意,与正常的多个输入不同,您不能为每个 table 上的 运行 指定不同的映射器。虽然,在这种情况下这不是一个大问题,因为传入的 Key/Value 类型是相同的,您可以使用:

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

在您的映射器中锻炼 table 记录来自(取自 Accumulo 手册)。