Hive 如何在配置单元中强制多表联接以执行仅映射进程

Hive 如何在配置单元中强制多表联接以执行仅映射进程,hive,Hive,我正在尝试在蜂箱中进行多任务连接,但由于减速器中存在倾斜,所以工作速度很慢。因此,我的问题是如何在配置单元中强制执行多任务联接以执行仅映射进程(即无缩减器)?只有当查询处理器在运行时确定一个小而另一个大时,才可能执行仅映射作业。小表大小可由hive.smalltable.filesize配置 映射联接是如何完成的? 在正常的MR作业开始之前,将启动一个本地MR任务,将数据从小表移动到哈希表中。然后将其序列化并放入磁盘,哈希表文件压缩为tar文件,当MR作业开始时,该文件被放入分布式缓存并传递给所

我正在尝试在蜂箱中进行多任务连接,但由于减速器中存在倾斜,所以工作速度很慢。因此,我的问题是如何在配置单元中强制执行多任务联接以执行仅映射进程(即无缩减器)?

只有当查询处理器在运行时确定一个小而另一个大时,才可能执行仅映射作业。小表大小可由
hive.smalltable.filesize
配置

映射联接是如何完成的?

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

带有“斜交方式”选项:


如果reduce端存在倾斜,您可以尝试使用option创建表或使用option更改表。这会将语句中为键提供的值拆分为两个或多个不同的文件或目录。因此,理想情况下,skew值将进入一个单独的目录,而其他键将进入单独的默认目录。因为它具有扭曲列名的元数据,所以join可以利用它。我认为实现是一个单独的目录(skew值)将与另一个表(对应的dir)连接到mapside连接,但不确定。但是,这需要在metastore中进行更改。

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

映射联接是如何完成的?

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

带有“斜交方式”选项:


如果reduce端存在倾斜,您可以尝试使用option创建表或使用option更改表。这会将语句中为键提供的值拆分为两个或多个不同的文件或目录。因此,理想情况下,skew值将进入一个单独的目录,而其他键将进入单独的默认目录。因为它具有扭曲列名的元数据,所以join可以利用它。我认为实现是一个单独的目录(skew值)将与另一个表(对应的dir)连接到mapside连接,但不确定。但是,这需要在metastore中进行更改。

我的小表大小为
-rw-r--r--3 biadmin biadmin 100737 2015-10-25 19:07/biginsights/hive/warehouse/db2.db/smalltable/0000000
。我已经执行了下面的
hive>set-hive.smalltable.filesize=104857600;hive>SELECT COUNT(1)FROM db1.largetable A internal JOIN db2.smalltable B ON A.col1=B.col1;总MapReduce作业数=2阶段1由条件解析程序选择。未指定2个reduce任务中的1个正在启动作业。根据输入数据大小估计:57。。。。。。阶段1的Hadoop作业信息:映射者数量:172;还原数:57
仍在考虑57个还原数查询处理器将根据hive版本0.11中的大小自动执行映射联接。在以前的版本中,我们必须将hive.auto.convert.join设置为true。否则,您可以将注释与MAPJOIN一起使用。从x.k=y.k上的x join y中选择/+mapjoin(x)/*。
/*+mapjoin(b)*/
代表蜂巢中主要带扣的映射连接,这不是我的意图,我只希望该过程是一个仅映射的过程。没有还原程序我仍然尝试了你所说的,不知何故它不起作用
hive>set-hive.smalltable.filesize=104857600;配置单元>设置配置单元.auto.convert.join=true;hive>SELECT/*+MAPJOIN(B)*/COUNT(1)FROM db1.largetable A internal JOIN db2.smalltable B ON A.col1=B.col1;总MapReduce作业数=2阶段1由条件解析程序选择。启动作业1(共2项)。。。。。。。。。。。。。。。。。。阶段1的Hadoop作业信息:映射者数量:172;还原数:57
提示并不意味着带扣映射联接。如果必须使用bucketmapjoin,则必须将hive.optimize.bucketmapjoin设置为true。顺便问一下,您使用的是哪个版本的蜂巢?提示从0.7开始被弃用,如果使用之后的版本,只需将hive.auto.convert.join设置为true并删除提示并尝试运行它。我的小表大小为
-rw-r--r--3 biadmin biadmin 100737 2015-10-25 19:07/bigdights/hive/warehouse/db2.db/smalltable/0000000
。我已经执行了下面的
hive>set-hive.smalltable.filesize=104857600;hive>SELECT COUNT(1)FROM db1.largetable A internal JOIN db2.smalltable B ON A.col1=B.col1;总MapReduce作业数=2阶段1由条件解析程序选择。未指定2个reduce任务中的1个正在启动作业。根据输入数据大小估计:57。。。。。。阶段1的Hadoop作业信息:映射者数量:172;还原数:57
仍在考虑57个还原数查询处理器将根据hive版本0.11中的大小自动执行映射联接。在以前的版本中,我们必须将hive.auto.convert.join设置为true。否则,您可以将注释与MAPJOIN一起使用。