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 手册)。
我正在考虑使用 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 手册)。