添加多个表和文件作为Hadoop作业的输入

时间:2018-05-21 09:32:48

标签: hadoop hbase

我正在寻找一种方法来设置多个表格和文件作为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 表输入,因为输入表名称和扫描仅设置为配置。我们可以做些什么来支持多个表格和文件吗?

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);