4.hive优化
1)跑sql的时候会出现的参数: In order to change the average load for a reducer (in bytes):
set hive.exec.reducers.bytes.per.reducer=<number>
如果大于<number>,就会多生成一个reduce
<number> =1024 <1k 一个reduce
1m 10个reduce set hive.exec.reducers.bytes.per.reducer=20000;
select user_id,count(1) as order_cnt
from orders group by user_id limit 10;
--结果number of mappers: 1; number of reducers: 1009 In order to limit the maximum number of reducers:
set hive.exec.reducers.max=<number>
set hive.exec.reducers.max=10;
-- number of mappers: 1; number of reducers: 10 In order to set a constant number of reducers:
set mapreduce.job.reduces=<number>
set mapreduce.job.reduces=5;
--number of mappers: 1; number of reducers: 5
set mapreduce.job.reduces=15;
--number of mappers: 1; number of reducers: 15
对你当前窗口,或者执行任务(脚本)过程中生效 2)where条件使得group by冗余
map 和 reduce执行过程是一个同步的过程
同步:打电话
异步:发短信
1:map执行完 reduce在执行 1+2=》3:reduce
2:map reduce map 60% reduce=3% 3)只有一个reduce
a.没有group by
set mapreduce.job.reduces=5;
select count(1) from orders where order_dow='0';
--number of mappers: 1; number of reducers: 1
b.order by
set mapreduce.job.reduces=5;
select user_id,order_dow
from orders where order_dow='0'
order by user_id
limit 10;
-- number of mappers: 1; number of reducers: 1
c.笛卡尔积 cross product
tmp_d
1
2
3
4
5
select * from tmp_d
join (select * from tmp_d)t
where tmp_d.user_id=t.user_id; --相当于on join没有on的字段关联
1 1
2 1
3 1
1 2
2 2
3 2
1 3
2 3
3 3
user product(库中所有商品中调小部分觉得这个用户喜欢 召回(match) 候选集1000) top10
users 母婴类 products
要同时考虑users和products信息来给它们做一个筛选(粗粒度) 5)map join
select /*+ MAPJOIN(aisles) */ a.aisle as aisle,p.product_id as product_id
from aisles a join product p
on a.aisle_id=p.aisle_id limit 10; dict hashMap {aisle_id : aisle}
for line in products:
ss = line.split('\t')
aisle_id = ss[0]
product_id = ss[1]
aisle = dict[aisle_id]
print '%s\t%s'%(aisle,product_id) 6)union all + distinct == union
--运行时间:74.712 seconds 2job
select count( *) c
from (
select order_id,user_id,order_dow from orders where order_dow='0' union all
select order_id,user_id,order_dow from orders where order_dow='0' union all
select order_id,user_id,order_dow from orders where order_dow='1'
)t; --运行时间122.996 seconds 3 job
select *
from(
select order_id,user_id,order_dow from orders where order_dow='0'
union
select order_id,user_id,order_dow from orders where order_dow='0'
union
select order_id,user_id,order_dow from orders where order_dow='1')t; 7)
set hive.groupby.skewindata=true;
将一个map reduce拆分成两个map reduce
‘-’(‘’,-1,0,null)1亿条 到一个reduce上面, 1个reduce处理6000w ‘-’ 1% 200w求和 =》1条
29 reduce处理剩余的4000w 99% 1.随机分发到不同的reduce节点,进行聚合(count)
2. 最终的一个reduce做最终结果的聚合(200w求和 =》1条) select add_to_cart_order,count(1) as cnt
from order_products_prior
group by add_to_cart_order
limit 10; select user_id,count(1) as cnt
from order_products_prior
group by user_id
limit 10; -- 没指定set hive.groupby.skewindata=true;
--Launching Job 1 out of 1
-- 1m 41s --指定了set hive.groupby.skewindata=true;
--Launching Job 1 out of 2
-- 2m 50s 如果在不导致reduce一直失败起不来的时候,就不用这个变量
如果确实出现了其中一个reduce的处理数据量太多,导致任务一直出问题,运行时间长。这种情况需要设置这个变量。 凌晨定时任务,近一周报表,跑了3个小时。
洗出来的基础表,3点出来,7点出来,后面接了70任务 8)MR的数量
--Launching Job 1 out of 1
select
ord.order_id order_id,
tra.product_id product_id,
pri.reordered reordered
from orders ord
join train tra on ord.order_id=tra.order_id
join order_products_prior pri on ord.order_id=pri.order_id
limit 10; --两个MR任务
select
ord.order_id,
tra.product_id,
pro.aisle_id
from orders ord
join trains tra on ord.order_id=tra.order_id
join products pro on tra.product_id=pro.product_id
limit 10; 9)/*+ STREAMTABLE(a) */ a是大表
类似map join 放到select中的,区别:它是指定大表
select /*+STREAMTABLE(pr)*/ ord.order_id,pr.product_id,pro.aisle_id
from orders ord
join order_products_prior pr on ord.order_id=pr.order_id
join products pro on pr.product_id=pro.product_id
limit 10; 10)LEFT OUTER JOIN
select od.user_id,
od.order_id,
tr.product_id
from
(select user_id,order_id,order_dow from orders limit 100)od
left outer join
(select order_id,product_id,reordered from train)tr
on (od.order_id=tr.order_id and od.order_dow='0' and tr.reordered=1)
limit 30; --join默认是inner 11)set hive.exec.parallel=true
1:map执行完 reduce在执行 1+2=》3:reduce
2:map reduce 12)
1. '-' ,where age<>'-' 直接丢掉这个数据
select age,count(1) group by age where age<>'-' 1_- 2_- 3_- 怎么定位具体哪几个key发生倾斜?
sample
SELECT COUNT(1) FROM (SELECT * FROM lxw1 TABLESAMPLE (200 ROWS)) x;
SELECT * FROM udata TABLESAMPLE (50 PERCENT);
select * from table_name where col=xxx order by rand() limit num;
SELECT * FROM lxw1 TABLESAMPLE (30M); 长尾数据

hive2的更多相关文章

  1. hive2.1.0安装

    下载hive(http://mirrors.cnnic.cn/apache/hive/) 或者 http://archive.apache.org/dist/hive/(hive历史版本) 在本地进行 ...

  2. CentOS7安装hive-2.1.0

    环境: CentOS7 Hadoop-2.6.4,配置两个节点:master.slave1 mysql-server 过程: 下载.解压hive-2.1.0到/usr/hadoop-2.6.4/thi ...

  3. Hive2 jdbc test

    package andes; import java.io.BufferedWriter; import java.io.FileOutputStream; import java.io.IOExce ...

  4. Hive 8、Hive2 beeline 和 Hive jdbc

    1.Hive2 beeline  Beeline 要与HiveServer2配合使用,支持嵌入模式和远程模式 启动beeline 打开两个Shell窗口,一个启动Hive2 一个beeline连接hi ...

  5. 通过 Sqoop1.4.7 将 Mysql5.7、Hive2.3.4、Hbase1.4.9 之间的数据导入导出

    目录 目录 1.什么是 Sqoop? 2.下载应用程序及配置环境变量 2.1.下载 Sqoop 1.4.7 2.2.设置环境变量 2.3.设置安装所需环境 3.安装 Sqoop 1.4.7 3.1.修 ...

  6. Hadoop 3.1.2(HA)+Zookeeper3.4.13+Hbase1.4.9(HA)+Hive2.3.4+Spark2.4.0(HA)高可用集群搭建

    目录 目录 1.前言 1.1.什么是 Hadoop? 1.1.1.什么是 YARN? 1.2.什么是 Zookeeper? 1.3.什么是 Hbase? 1.4.什么是 Hive 1.5.什么是 Sp ...

  7. 【原创】大数据基础之Drill(2)Drill1.14+Hive2.1.1运行

    问题 Drill最新版本是1.14,从1.13开始Drill支持hive的版本升级到2.3.2,详见1.13的release notes The Hive client for Drill is up ...

  8. 【原创】大叔经验分享(18)hive2.0以后通过beeline执行sql没有进度信息

    一 问题 在hive1.2中使用hive或者beeline执行sql都有进度信息,但是升级到hive2.0以后,只有hive执行sql还有进度信息,beeline执行sql完全silence,在等待结 ...

  9. hive2.3.2安装使用

    hive的安装简单一些,使用也比较简单,基础hadoop搭建好之后,只要初始化一些目录和数据库就好了 安装需要做几件事: 1.设立一个数据源作为元数据存储的地方,默认是derby内嵌数据库,不过不允许 ...

  10. 初次安装hive-2.1.0启动报错问题解决方法

    首次安装hive-2.1.0,通过bin/hive登录hive shell命令行,报错如下: [hadoop@db03 hive-2.1.0]$ bin/hive which: no hbase in ...

随机推荐

  1. Tomcat是如何加载Spring和SpringMVC及Servlet相关知识

    概述 大家是否清楚,Tomcat是如何加载Spring和SpringMVC,今天我们就弄清下这个过程(记录最关键的东西) 其中会涉及到大大小小的知识,包括加载时候的设计模式,Servlet知识等,看了 ...

  2. 【题解】The Last Hole! [CF274C]

    [题解]The Last Hole! [CF274C] 传送门:\(\text{The Last Hole!}\) \(\text{[CF274C]}\) [题目描述] 给出平面上 \(n\) 个圆的 ...

  3. 数据结构与算法——循环链表的算法实现(Joseph 问题)

    Joseph 问题: 如果有10 个人,按编号顺序1,2,...,10 顺时针方向围成一圈.从1 号开始顺时针方向1,2,...,9 报数,凡报数9 者出列(显然,第一个出圈为编号9 者). 最后一个 ...

  4. JAVA中关于set()和get()方法的理解以及使用

    set()和get()方法的理解 set和get这两个词的表面意思,set是设置的意思,而get是获取的意思,顾名思义,这两个方法是对数据进行设置和获取用的. 而且,在类中使用set和get方法时,都 ...

  5. Jenkins的war包安装

    安装Jenkins首先要安装jdk,在官网下载jdk安装并配置环境变量 1.Jenkins下载地址,下载war包 https://www.jenkins.io/download/ 2.打开命令行窗口, ...

  6. 11g RAC 集群数据库不能跟随集群启动

    1.查看集群资源详细情况 [oracle@rac01-+ASM1 ~]$ crsctl stat res -p 2.修改集群资源ora.rac.db的auto_start属性改为always [ora ...

  7. Java基础数据类型详解

    在Java中的数据类型一共有8种,大致分为整型(4个)浮点型(2个)布尔(1)字符(1个) 分类 类型 默认值 占用字节 范围 整型 byte 0 1 = 8 bit -2^7 - 2^7 short ...

  8. Kubernetes【K8S】(三):资源清单

    K8S中的资源 K8S中所有的内容都抽象为资源,资源实例化之后叫做对象.一般使用yaml格式的文件来创建符合我们预期的pod,这样的yaml文件我们一般成为资源清单. 名称空间级资源 工作负载型资源( ...

  9. Spring Boot 2.4 对多环境配置的支持更改

    在目前最新的Spring Boot 2.4版本中,对配置的加载机制做了较大的调整.相关的问题最近也被问的比较多,所以今天就花点时间,给大家讲讲Spring Boot 2.4的多环境配置较之前版本有哪些 ...

  10. Kafka客户端编程入门介绍

    1.maven依赖 <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka ...