我正在寻找一种方法来设置多个表格和文件作为hadoop作业的输入。
要将多个表设置为输入,我们可以使用此API
TableMapReduceUtil.initTableMapperJob(scans, MyMapper.class, Text.class, Text.class, job);
要向作业添加文件输入,我们可以使用此API
MultipleInputs.addInputPath(job, path, TextInputFormat.class, myMapper);
但是,它们的组合不起作用。似乎第一种方法是独一无二的。我知道一种方法来添加 1 hbase表和文件作为输入:
conf.set(TableInputFormat.INPUT_TABLE, new String(tableName));
conf.set(TableInputFormat.SCAN, convertScanToString(scan));
MultipleInputs.addInputPath(job, new Path("HT_" + new String(tableName)), TableInputFormat.class, myMapper);
// here we can file inputs as before
仅适用于 1 表输入,因为输入表名称和扫描仅设置为配置。我们可以做些什么来支持多个表格和文件吗?
答案 0 :(得分:0)
可能您可以尝试使用MultiTableInputFormat而不是TableInputFormat,它具有参数MultiTableInputFormat.SCANS。扫描设置为扫描参数scan.attributes.table.name
的表名称。例如。
scan1.setAttribute(`scan.attributes.table.name`, tableName1)
scan2.setAttribute(`scan.attributes.table.name`, tableName2)
conf.setStrings(MultiTableInputFormat.SCANS,
convertScanToString(scan1),
convertScanToString(scan2));
MultiTableInputFormat.addInputPath(job, new Path("HT_" + new String(tableName)), MultiTableInputFormat.class, myMapper);