群里共享了一本hive调优的书记,名叫《Hive Tunning》,就忍不住开始看了,也顺便记录一下自己学到的东西,备忘!

首先,这是hive的数据摘要,别问我什么意思,我也没看懂。

好,我们正式开始,首先是连接的问题,我们都知道连接耗时长,但是连接无法避免,那hive又是怎么处理连接操作的呢?

下面是hive的连接策略

hive有三种类型的连接策略

(1)Shuffle Join : 这种类型的是通过map/reduce 来实现连接操作的,优点是不需要考虑数据的大小和分布,缺点是消耗大量的资源而且是最慢的。

(2)Broadcast Join:这种类型的方式是把一个小的表在所有节点中加载到内容当中,然后用mapper来扫描大表进行连接,速度非常快,但是其中一个表必须可以加载到内存当中。

(3)Sort-Merge-Bucket Join:mapper可以协同定位keys去进行高效的连接,速度很快,不需要考虑表的大小,但是数据必须先排序和整理。

Shuffle Join:

我们以这个销售订单这个例子来做演示,可以看到其中的图,它们是通过customer.id=order.cid来做连接的,首先Map把两个表中的数据处理成以连接字段为key,其他字段为value的作为输出,然后把两个表中id和cid相同的数据传递到同一个reducer中,从网络使用率上看是很奢侈的。

Broadcast Join:

这种方式比较复杂一点,首先它使用足够小的维度表来存放在所有的节点当中,单独扫描大表,然后根据模式匹配进行连接。

当两个表都很大的情况下:

第一步,首先按照连接字段排序,所有可能的匹配的都在硬盘的同一块区域。

第二步,把所有的值都移到同一个节点下面进行等值连接,不需要再进行shuffle。


Bucketing:
– Hash partition values into a configurable number of buckets.
– Usually coupled with sorting.
• Skews:
– Split values out into separate files.
– Used when certain values are frequently seen.
• Replication Factor:
– Increase replication factor to accelerate reads.
– Controlled at the HDFS layer.
• Sorting:
– Sort the values within given columns.
– Greatly accelerates query when used with ORCFilefilter pushdown.

这里就不解释了,自己看吧,这和下面的图是对应的,针对不同大小的表,hive有多种处理模式。

(1)小表,经常要用的数据,建议使用replication factor,可能是缓存的意思,具体是什么意思,等我清楚了再给大家解释。

(2)任意大小的表,有很多要精确查询的列,建议先按照最常使用的列进行排序再进行查询。

(3)大表但是又需要和另外的的大表做连接,建议先通过连接列做排序和bucket。

(4)大表,但只是利用到其中某些常用的值,可以把常用的值弄个单独的skew中。

(5)大表但是有一些自然边界,比如日期的,建议利用日期进行分区。

Map Join开启

我们可以启用连接自动转换来帮助我们转换,在执行语句之前设置一下即可。它是经过优化的Map Join,无reducer。
set hive.auto.convert.join=true;

set hive.auto.convert.join.noconditionaltask = true;

set hive.auto.convert.join.noconditionaltask.size = 10000;

Skew Join

真实数据中数据倾斜是一定的, hadoop 中默认是使用

hive.exec.reducers.bytes.per.reducer = 1000000000

也就是每个节点的reduce 默认是处理1G大小的数据,如果你的join 操作也产生了数据倾斜,那么你可以在hive 中设定

set hive.optimize.skewjoin = true;

set hive.skewjoin.key = skew_key_threshold (default = 100000)

hive 在运行的时候没有办法判断哪个key 会产生多大的倾斜,所以使用这个参数控制倾斜的阈值,如果超过这个值,新的值会发送给那些还没有达到的reduce, 一般可以设置成你

(处理的总记录数/reduce个数)的2-4倍都可以接受.

倾斜是经常会存在的,一般select 的层数超过2层,翻译成执行计划多于3个以上的mapreduce job 都很容易产生倾斜,建议每次运行比较复杂的sql 之前都可以设一下这个参数. 如果你不知道设置多少,可以就按官方默认的1个reduce 只处理1G 的算法,那么  skew_key_threshold  = 1G/平均行长. 或者默认直接设成250000000 (差不多算平均行长4个字节)

Sort-Merge-Bucket Join

如果表已经排序并且已经bucketed,可以启用SMB joins

set hive.auto.convert.sortmerge.join=true;

set hive.optimize.bucketmapjoin = true;

set hive.optimize.bucketmapjoin.sortedmerge = true;

set hive.auto.convert.sortmerge.join.noconditionaltask=true;

set hive.auto.convert.sortmerge.join.bigtable.selection.policy     = org.apache.hadoop.hive.ql.optimizer.TableSizeBasedBigTableSelectorForAutoSMJ;

Hive Tuning(一) 连接策略的更多相关文章

  1. [大牛翻译系列]Hadoop(4)MapReduce 连接:选择最佳连接策略

    4.1.4 为你的数据选择最佳连接策略 已介绍的每个连接策略都有不同的优点和缺点.那么,怎么来判断哪个最适合待处理的数据? 图4.11给出了一个决策树.这个决策树是于论文<A Compariso ...

  2. windows server 2008 R2 NPS(网络连接策略服务)设置radius,实现telent登陆交换机路由器权限分配

    windows2008NPS(网络连接策略)设置radius 实现telent登陆交换机路由器权限分配 转载请说明出处 一,安装 首先在08中添加服务器角色网络策略和访问服务(Network Poli ...

  3. Hive concat函数连接后结果为null

    Hive concat函数连接后结果为null concat函数是用来连接字符串的 使用示例: select concat('Hello','World','Java'); 运行结果: 最近我们在做需 ...

  4. Hive(三):SQuirrel连接hive配置

    熟悉了Sqlserver的sqlserver management studio.Oracle的PL/SQL可视化数据库查询分析工具,在刚开始使用hive.phoenix等类sql组件时,一直在苦苦搜 ...

  5. Hive Tuning(四) 从查询计划看hive.auto.convert.join的好处

    今天我们来讲一下如何看懂Hive的查询计划. hive的执行计划包括三部分 – Abstract syntax tree – 可以直接忽略  – Stage dependencies – 依赖 – S ...

  6. 使用Hive Rest API 连接HDInsight

    以下连接是微软最新的关于HDInsight中Hive命令的RestAPI示例地址.. 使用 HDInsight .NET SDK 运行 Hive 查询 请使用接口有异常的同学检查是否使用的是下面地址中 ...

  7. Hive的JDBC连接

    首相要安装好hive 1.首先修改配置文件文件为hive 路径下的  conf/hive-sit.xml 将内容增加 <property> <name>hive.server2 ...

  8. hive作业的优化策略

    Mapreduce自身的特点: 1.IO和网络负载大:优化策略:减少IO和网络负载. 2.内存负载不大.优化策略:增大内存使用率: 3.CPU负载不大.优化策略:增大CPU使用率: (hive的优化应 ...

  9. Hive和Spark分区策略

    1.概述 离线数据处理生态系统包含许多关键任务,最大限度的提高数据管道基础设施的稳定性和效率是至关重要的.这边博客将分享Hive和Spark分区的各种策略,以最大限度的提高数据工程生态系统的稳定性和效 ...

随机推荐

  1. php 内存管理

    内存是计算机⾮常关键的部件之⼀,是暂时存储程序以及数据的空间,CPU只有有限的寄存器可以⽤于存储计算数据,⽽⼤部分的数据都是存储在内存中的,程序运⾏都是在内存中进⾏的.和CPU计算能⼒⼀样, 内存也是 ...

  2. Android开发学习之3大类菜单

    在Android系统中,菜单可以分为三类:选项菜单(Option Menu),上下文菜单(Context Menu)以及子菜单(Sub Menu). 一.选项菜单(Option Menu) 创建选项菜 ...

  3. 史上最简单的ButterKnife配置教程

    网上的教程感觉都是抄来抄去,没一个靠谱的 还是自己丰衣足食搞一个ButterKnife配置教程吧.. 我的Android Studio版本是3.3. 1.dependencies中添加依赖 imple ...

  4.  RabbitMQ3.6.3集群搭建+HAProxy1.6做负载均衡

    目录 目录 1.基本概念 1.1.RabbitMQ集群概述 1.2.软件负载均衡器HAProxy 2.RabbitMQ的配置步骤 2.1.安装 Erlang.RabbitMQ 2.2.修改 /etc/ ...

  5. sql server分配某个用户只对某一个数据库有权限 转载 http://blog.sina.com.cn/s/blog_13554ebc70102wi3h.html

    sql server 2008新建用户只能访问指定数据库   新装的sql Server 2008,想让指定的用户可以访问sql Server客户端,sa的权限太大,所以最好禁用掉,   然后我们需要 ...

  6. oracle导表小结

    事件描述:从A主机oracle服务器导出.sql文件到B主机,发现1.导入存在乱码 2.提示USERS表空没有权限(A B主机均为window系统) 1.针对第一点乱码 首先确认系统的默认字符编码GB ...

  7. 转 jmeter使用IP欺骗压力测试

    jmeterIP 欺骗多IP 最近在使用jmeter进行压力测试时需要使用类似于loadrunner的IP欺骗功能,经问津度娘无果后决定再次耐心研究jmeter官方文 档,终于发现在jmeter2.5 ...

  8. ZOJ 1654 Place the Robots建图思维(分块思想)+二分匹配

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=654 AC一百道水题,不如AC一道难题来的舒服. 题意:一个n*m地图 ...

  9. 修改Excel默认模版(启动模版和新建Sheet模版)

    Office 2013 1.  C:\Windows\ShellNew\EXCEL12.XLSX 设置好格式后另存为, 然后复制过来覆盖掉,如果覆盖不了,注意修改所有者权限 2. 新建文件保存为模版文 ...

  10. ASP.NET 解决URL中文乱码的解决

    暂时先记录一个方法: 在Web.config文件中configuration下的system.web下加入一个配置项:globalization,主要是设置其requestEncoding,貌似中文系 ...