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

标签 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 表输入,因为输入表名和扫描设置为独占配置。我们可以做些什么来支持多个表和文件吗?

最佳答案

也许你可以尝试使用 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/

相关文章:

java - 无法使用Java连接到HBase

hbase - 如何使用 HBASE Shell 创建带有预拆分和压缩或其他选项的表

hbase - HBASE 中扫描命令的格式化结果

mysql - 将日期转换为配置单元中的时间戳

java - 如何从 Hadoop MR 中的非结构化数据生成 JSON 对象?

hadoop - ClassCastException : org. apache.hadoop.io.LongWritable 无法转换为 org.apache.hadoop.hbase.io.ImmutableBytesWritable

hadoop - Hadoop Hive MAX提供多个结果

hadoop - 将 csv 数据加载到 Hbase

hadoop - 如何让配置单元同时运行 mapreduce 作业?

mysql - 在 Apache Phoenix 中聚合和分组