我正在寻找一种方法来设置多个表和文件作为 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 表输入,因为输入表名和扫描设置为独占配置。我们可以做些什么来支持多个表和文件吗?
最佳答案
也许你可以尝试使用 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);
关于hadoop - 添加多个表和文件作为 Hadoop 作业的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50445808/