hive.groupby.skewindata环境变量与负载均衡

HiveQL 去重操作

和SQL一样,HiveQL中同样支持DISTINCT操作,如下示例:
(1) SELECT 
count(DISTINCT uid) FROM log
(2) SELECT ip, count(DISTINCT uid) FROM log GROUP BY ip
(3) SELECT ip, count(DISTINCT uid, uname) FROMlog GROUP BY ip
(4) SELECT ip, count(DISTINCTuid), count(DISTINCT uname) FROMlog GROUP BY ip

当我们使用Hive QL中的去重关键字DISTINCT时,需要注意的一点是:
在多个列上进行的去重操作与hive环境变量hive.groupby.skewindata存在关系。
当hive.groupby.skewindata=true时,hive不支持多列上的去重操作,并报错:
Error in semantic analysis: DISTINCT on different columns notsupported with skew in data.
注意:上面示例中的(3)不属于多列上的DISTINCT操作。

Group By 语句
• Map 端部分聚合:
• 并不是所有的聚合操作都需要在 Reduce 端完成,很多聚合操作都可以先在 Map 端进行部分聚合,最后在 Reduce端得出最终结果。
• 基于 Hash
• 参数包括:
• hive.map.aggr = true 是否在 Map 端进行聚合,默认为True
• hive.groupby.mapaggr.checkinterval =100000 在 Map 端进行聚合操作的条目数目

• 有数据倾斜的时候进行负载均衡
• hive.groupby.skewindata = false
• 当选项设定为 true,生成的查询计划会有两个 MR Job。第一个 MR Job 中,Map 的输出结果集合会随机分布到Reduce 中,每个 Reduce 做部分聚合操作,并输出结果,这样处理的结果是相同的 Group By Key有可能被分发到不同的 Reduce 中,从而达到负载均衡的目的;第二个 MR Job 再根据预处理的数据结果按照 Group ByKey 分布到 Reduce 中(这个过程可以保证相同的 Group By Key 被分布到同一个 Reduce中),最后完成最终的聚合操作。

hive.groupby.skewindata变量
从上面groupby语句可以看出,这个变量是用于控制负载均衡的。当数据出现倾斜时,如果该变量设置为true,那么Hive会自动进行负载均衡。

HIVE-2416
Currently when multiple distinct function is used,hive.groupby.skewindata optimization parameter shall be set false,or else an exception is raised:
Error in semantic analysis: DISTINCT on different columns not supported with skew in data
Skew groupby should support multiple distinct function.

时间: 2024-08-04 05:28:17

hive.groupby.skewindata环境变量与负载均衡的相关文章

hive.groupby.skewindata为

如果设置hive.map.aggr为true,hive.groupby.skewindata为true,执行流程如下: 会生成两个job来执行group by,第一个job中,各个map是平均读取分片的,在map阶段对这个分片中的数据根据group by 的key进行局部聚合操作,这里就相当于Combiner操作.在第一次的job中,map输出的结果随机分区,这样就可以平均分到reduce中在第一次的job中,reduce中按照group by的key进行分组后聚合,这样就在各个reduce中又

分布式环境中的负载均衡策略

在分布式系统中相同的服务常常会部署很多台,每一台被称为一个服务节点(实例).通过一些负载均衡策略将服务请求均匀地分布到各个节点,以实现整个系统支撑海量请求的需求.本文描述一些简单的负载均衡策略. Round-robin 简单地轮询.记录一个选择位置,每次请求来时调整该位置到下一个节点: curId = ++curId % nodeCnt 随机选择 随机地在所有节点中选择: id = random(nodeCnt); 本机优先 访问后台服务的访问者可能本身是一个整合服务,或者是一个proxy,如果

生产环境下的负载均衡配置

一.简介 最近新上了一个营销项目(和微信结合),后台用的是Tomcat.开始上线的时候因为人数不多感觉没太多问题,随着正式环境的发布,开人有人反映服务器页面无法打开,连入tomcat查看时发现连接数已满且CPU也用到了极限,初始的架构如下图所示,其使用1台tomcat和一台数据库服务器. 该业务系统主要用于微信营销,顾客在微信上下单购买(抢)对应的商品,抢购成功后该商品(券)会自动生成条形码保存在该用户的注册信息中.用户凭券到实体店完成支付和取货操作.因为涉及券核销的问题(支付完成后即时核销),

Node环境下的负载均衡

环境:Koa nginx 1.概念 负载均衡(Load Balance,简称LB)是一种服务器或网络设备的集群技术.负载均衡将特定的业务(网络服务.网络流量等)分担给多个服务器或网络设备,从而提高了业务处理能力,保证了业务的高可用性. 2.简单实现 步骤1:Koa框架中开启两个http server,监听两个端口 步骤2:配置nginx: pstream tomcatserver1 { server 127.0.0.1:3000 weight=3; server 127.0.0.1:3001;

Apache负载 均衡

Apache学习之二.HTTPD的负载均衡 博客分类: Apache Apache学习之 一. HTTPD的安装与配置 Apache学习之 二. HTTPD的负载均衡 第2章 负载均衡 (黎明你好原创作品,转载请注明) 2.1 Tomcat链接方式 首先我们先介绍一下为什么要让http server与Tomcat之间进行连接.事实上Tomcat本身已经提供了HTTP服务,该服务默认的端口是8080,装好tomcat后通过8080端口可以直接使用Tomcat所运行的应用程序,你也可以将该端口改为8

Nginx 负载均衡-加权轮询策略剖析

本文介绍的是客户端请求在多个后端服务器之间的均衡,注意与客户端请求在多个nginx进程之间的均衡相区别(Nginx根据每个工作进程的当前压力调整它们获取监听套接口的几率,那些当前比较空闲的工作进程有更多机会获取到监听套接口,从而客户端的请求到达后也就相应地被它捕获并处理).如果Nginx是以反向代理的形式配置运行,那么对请求的实际处理需要转发到后端服务器运行,如果后端服务器有多台,如何选择一台合适的后端服务器来处理当前请求,就是本文要说的负载均衡.这两种均衡互不冲突并且能同时生效. nginx不

Nginx学习——负载均衡

负载均衡 Nginx提供了较多的负载均衡策略,包括加权轮询.IP哈希.fair.一致哈希等.前两个是Nginx官方源码内置的策略,而后面几个都是第三方模块,所以下面我们重点来看前两个内置策略. Nginx默认采用round_robin加权算法,如果要采用IP哈希策略,那么必须在Nginx的配置文件里通过配置指令ip_hash明确指定. 当整个http配置块被Nginx解析完毕之后,会调用各个http模块对应的初始函数.对于模块ngx_http_upstream_module而言,对应的main配

[转]Nginx+mysql+php-fpm负载均衡配置实例

转 : http://www.jbxue.com/article/7923.html 介绍一个nginx.mysql.php-fpm环境下配置负载均衡的例子,有需要的朋友,可以参考下. 系统环境如下:前端Nginx:192.168.93.137后端web1:192.168.0.11后端web2:192.168.0.12 1.前端nginx配置: 复制代码代码示例: http {      ……        client_max_body_size 300m;        client_bod

nginx负载均衡,读写分离

负载均衡 安装nginx 配置conf文件 设置虚拟主机 在keepalive后面/server(虚拟主机)前面加上upstream upstream jf1 { server 192.168.1.25:80; server 192.168.1.26:80; server 192.168.1.27:80; server 192.168.1.28:80; server 192.168.1.29:80; server 192.168.1.30:80; server 192.168.1.31:80;