3

我正在尝试在两个数据集之间进行连接,一个存储在 Hive 表中,另一个不存储。我看到根据人们的做法,这不是很正常,例如,他们要么将所有内容定义为 Hive 表,要么不定义。

现在有了 MultipleInputs 类,但是 addInputPath 方法需要 Configuration、Path、InputFormat、Mapper

我可以在那里使用输入格式并尝试将表名伪装成路径,但这听起来充其量只是一个疯狂的猜测。

有一个更新版本的 Hive 的补丁(我在 CDH4 上,所以这意味着 hive 0.10 和 hcat 0.5 可悲)。我发现这个补丁不能直接翻译成我当前的版本,而且似乎只适用于多个表而不是它们的混合。

https://issues.apache.org/jira/browse/HIVE-4997

这可能吗?或者你有什么建议吗?

我唯一能想到的是在不使用表格的情况下读取原始数据,但这意味着我宁愿避免使用配置单元特定格式的逻辑。

4

3 回答 3

1

HCatMultipleInputs可用于读取多个配置单元表。

这是一个补丁(适用于 0.13),我们可以安装它以支持多表。它有 HCatMultipleInputs 来支持多个配置单元表。

https://issues.apache.org/jira/i#browse/HIVE-4997

 
示例用法:
HCatMultipleInputs.addInput(job,Table1, db1,properites1, Mapper1.class);

您可以使用以下链接中的工作代码: https ://github.com/abhirj87/training/tree/master/multipleinputs

于 2015-09-10T15:13:40.717 回答
0

这里的解决方案显然是升级到 0.14.0(或修补旧版本)或不使用 HCatalog 而是直接读取元存储并手动将每个分区子目录添加到 MultipleInputs。

就我个人而言,由于我无法轻松升级并且子分区工作量太大,因此我只专注于以其他方式优化作业,并且现在对运行一系列作业不屑一顾。

于 2014-07-24T09:41:46.887 回答
0

有没有办法在单独的 mapreduce 程序中单独实现补丁。似乎补丁仍未提交,但我想在我的工作中使用该解决方案。

于 2016-10-26T06:55:32.197 回答