如何在hive中强制执行多表连接以执行仅限映射的过程

时间:2015-10-27 03:45:19

标签: hive

我正在尝试在hive中进行多重连接,因为在reducers中存在偏差,因此工作缓慢。所以我的问题是如何在hive中强制执行多个连接来进行MAP ONLY过程(即没有减速器)?

1 个答案:

答案 0 :(得分:0)

仅当查询处理器在运行时决定一个较小而另一个较大时,可以通过hive.smalltable.filesize配置小表大小,才能执行仅映射作业。

如何完成地图加入?

在正常MR作业启动之前,将启动本地MR任务以将数据从小表移动到哈希表中。然后将其序列化并放入磁盘并将哈希表文件压缩为tar文件,当MR作业启动时,将其放入分布式缓存并传递给所有映射器,并在该任务跟踪器的本地路径中将文件解压缩并保留进行连接。传递大表记录并通过查找缓冲区(TT的本地目录)完成连接。这样做很好,而且你可以进行查找操作。

使用SKEWED BY选项:

如果reduce方面存在偏差,您可以尝试使用SKEWED BY选项创建表,或者使用SKEWED BY选项更改表。这会将您为语句中的键提供的值拆分为两个或多个不同的文件或目录。理想情况下,skew值将进入一个单独的目录,而其他键则进入单独的默认目录。因为它具有倾斜列名称的元数据,因此连接可以使用它。我认为实现是具有单独目录(skew值)的实现将与另一个表(对应的dir)连接到mapside连接但不确定。然而,这需要改变Metastore。