好程序员大数据学习路线分享hive的运行方式

异步冰川
• 阅读 162

  好程序员大数据学习路线分享hive的运行方式,hive的属性设置: 1、在cli端设置 (只针对当前的session) 3、在java代码中设置 (当前连接) 2、在配置文件中设置 (所有session有效)

设置属性的优先级依次降低。 cli端只能设置非hive启动需要的属性。(log属性,元数据连接属性)

查找所有属性: hive>set; 查看当前属性的值:通常是hadoop hive> set -v; 模糊查找属性: hive -S -e "set" | grep current; hive -S -e "set" | grep index;

hive变量:system 、 env 、hivevar 、hiveconf

system :系统级别环境变量(jvm、hadoop等),可读可写 hive> set system:min.limit = 3; hive> set system:min.limit; system:min.limit=3

env:环境变量 (HADOOP_HOME),只读不能写。 hive> set env:PWD; env:PWD=/usr/local/hive-1.2.1

hivevar:自定义临时变量(可读可写)

hive> set hivevar:min.limit=3;
hive> set hivevar:min.limit;
hivevar:min.limit=3
hive> set hivevar:min.limit=2;
hive> set hivevar:min.limit;
hivevar:min.limit=2

hiveconf:自定义临时属性变量(可读可写)

hive> set hiveconf:max.limit=10;
hive> set hiveconf:max.limit;
hiveconf:max.limit=10
hive> set hiveconf:max.limit=6;
hive> set hiveconf:max.limit;
hiveconf:max.limit=6

hive的运行方式: 1、cli端运行 (临时统计、开发) 2、hive -S -e "hql 语句"; (适合单个hql的query语句) 3、hive -S -f /hql文件; (hql文件的脚本)

不带参数

hive -S -e "use qf1603;select * from user1;" hive -S -f /home/su.hql;

hive在0.9版本以前是不支持的-f 带参数的执行:

hive --hivevar min_limit=3 -hivevar -hivevar t_n=user1 -e 'use qf1603;select * from {hive:t_n} limit {hivevar:min_limit};'

hive --hiveconf min_lit=3 -e "use qf1603;select * from user1 limit ${hiveconf:min_lit};"

hive -S --hiveconf t_n=user1 --hivevar min_limit=3 -f ./su.hql

hive中注释: --注释内容

insert overwrite local directory '/home/out/05'
select * from user1 limit 3;

三、hive 优化 1、环境优化(linux 句柄数、应用内存分配、是否负载等) 2、应用配置属性方面的优化。 3、代码优化(hql,尝试换一种hql的写法)。

1、学会看explain

explain :显示hql查询的计划。 explain extended :显示hql查询的计划。还会显示hql的抽象表达式树。(就是解释器干得事)

explain select * from user1;
explain extended select * from user1;

一个hql语句将会有一个或者多个stage构成。每一个stage相当于一个mr的job, stage可以是一个Fetch 、 map join 、 limit 等操作。 每一个stage都会按照依赖关系依次执行,没有依赖关系的可以并行执行。

2、对limit的优化:

hive.limit.row.max.size=100000
hive.limit.optimize.limit.file=10
hive.limit.optimize.enable=false

3、对join的优化:

永远是小表驱动大表(小结果集驱动大结果集) 必要时候使用小表标识 /+STREAMTABLE(小表别名)/ 将业务调整为能尽量使用map-side join: hive.auto.convert.join: smalltable:  尽量避免笛卡尔积的join查询,即便有咯也需要使用on 或者where 来过滤。 hive目前的join 只支持等值连接(= and)。其它的不行

4、使用hive本地模式(在一个jvm里面运行)

hive.exec.mode.local.auto=false
hive.exec.mode.local.auto.inputbytes.max=134217728
hive.exec.mode.local.auto.input.files.max=4

5、hive并行执行(stage之间没有相互依赖关系的可以并行执行)

hive.exec.parallel=false
hive.exec.parallel.thread.number=8

6、严格模式:

hive提供的严格模式阻挡三种查询: 1、带有分区的表的查询 2、带有orderby的查询 3、join查询语句,不带on条件 或者 where条件。

7、设置mapper 和 reduce个数

mapper个数太多,启动耗时,个数太少,资源利用不充分 reducer个数太多,启动耗时,个数太少,资源利用不充分

mapper个数: 手动设置:

set mapred.map.tasks=2;

适当调整块大小,从而改变分片数,来改变mapper个数:

通过合并文件小文件来减少mapper个数:

set mapred.max.split.size=25600000; 256M
set mapred.min.split.per.node=1
set mapred.min.split.per.rack=1
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;

reducer个数(通常手动设置):

set mapreduce.job.reduces=-1;

8、hive使用jvm重用

mapreduce.job.jvm.numtasks=1  set mapred.job.reuse.jvm.num=8; ##jvm里运行task的任务数

9、数据倾斜(查看:Hive优化.docx文档)

数据倾斜:数据某列的值分布不均匀。 造成数据倾斜的原因: 1、原本数据就倾斜 2、hql语句可能造成 3、join 极容易造成 4、count(distinct col) 5、group by语句也容易

解决方法: 1、如果数据本身倾斜,看数据能否直接分离(找到倾斜的数据) 2、将倾斜的数据单独出来计算,然后和正常的数据进行union all 3、将倾斜的数据赋予随机数来进行join查询,均衡每个task的任务量。 4、试图不变需求改写hql语句。

倾斜解决的几个属性设置:

hive.map.aggr=true
hive.groupby.skewindata=false
hive.optimize.skewjoin=false  

10、job数量的控制

连接查询的on中的连接字段类型尽可能相同。 通常是一个简单hql语句生成一个job,有join 、limit 、group by 都将有可能会生成一个独立job。

select
u.uid,
u.uname
from user1 u
where u.uid in (select l.uid from login l where l.uid=1 limit 1)
;
select
u.uid,
u.uname
from user1 u
join login l
on u.uid = l.uid
where l.uid = 1
;

分区 、分桶 、索引 这些本身就是hive的一种优化。

点赞
收藏
评论区
推荐文章
凯特林 凯特林
4年前
移动端H5开发常用技巧总结
html篇常用的meta属性设置meta对于移动端的一些特殊属性,可根据需要自行设置<meta name"screenorientation" content"portrait" //Android 禁止屏幕旋转<meta name"fullscreen" content"yes"             //全屏显示
Stella981 Stella981
3年前
Hive(七)Hive参数操作和运行方式
Hive参数操作和运行方式1、Hive参数操作1、hive参数介绍​hive当中的参数、变量都是以命名空间开头的,详情如下表所示:命名空间读写权限含义hiveconf可读写hivesite.xml当中的各配置变量例:hivehiveconf
Stella981 Stella981
3年前
Android 在Java代码中设置style属性
在andriod开发中,很大一部分都要与资源打交道,比如说:图片,布局文件,字符串,样式等等。这给我们想要开发一些公共的组件带来很大的困难,因为公共的组件可能更愿意以jar包的形式出现。但是java的jar包中只允许出现java代码而不能出现资源。当我们想要以jar包的形式提供我们自己开发的公共组件时,我们就需要把以代码的形式创建资源。下面提供一个使
Stella981 Stella981
3年前
Dbeaver连接Hive和Mysql的配置
1.连接Hive首选需要配置Hive这里我们采用的是JDBC的连接方式(1)在Hive中后台启动hiveserver2root@hadoop101hivebin/hiveserver2&(2)启动beelinebigdata@hadoop101hive$bin/be
Stella981 Stella981
3年前
HiveServer2集成LDAP做用户认证
HiveServer2支持多种认证方式,通过hive.server2.authentication参数来设置,包括nosasl,none,ldap,kerberos,pam,custom本文介绍如何在EMapReduce中使用LDAP配置HiveServer的认证。配置配置值备注hive.server2.au
Stella981 Stella981
3年前
Hive基本使用——命令行
Hive用户接口主要有三个:命令行(CLI),客户端(Client)和Web界面(WUI)。其中最常用的是CLI,启动的时候,会同时启动一个Hive服务。Client是Hive的客户端,用户连接至HiveServer。在启动Client模式的时候,需要指出HiveServer所在节点,并且在该节点启动HiveServer。
Stella981 Stella981
3年前
Hive优化的十大方法
Hive用的好,才能从数据中挖掘出更多的信息来。用过hive的朋友,我想或多或少都有类似的经历:一天下来,没跑几次hive,就到下班时间了。Hive在极大数据或者数据不平衡等情况下,表现往往一般,因此也出现了presto、sparksql等替代品。这里重点讲解hive的优化方式,例如优化分组:sethive.auto.convert.join
Stella981 Stella981
3年前
Hive基础学习
本节我们主要来学习一些hive的命令操作,同时探究一下Hive,HDFS,MySQL之间的联系,从而更好的理解其内部原理。常用的基础命令此处的命令都是指在hive命令行下执行的命令,所有的命令别忘记以分号结尾。hive show databases;查看当前数据库列表hive create databases dbna
Stella981 Stella981
3年前
HIVE 时间操作函数
日期函数UNIX时间戳转日期函数: from\_unixtime语法:   from\_unixtime(bigint unixtime\, string format\)返回值: string说明: 转化UNIX时间戳(从19700101 00:00:00 UTC到指定时间的秒数)到当前时区的时间格式举例:hive   selec
Stella981 Stella981
3年前
Hive 和普通关系数据库的异同
1.查询语言。由于SQL被广泛的应用在数据仓库中,因此,专门针对Hive的特性设计了类SQL的查询语言HQL。熟悉SQL开发的开发者可以很方便的使用Hive进行开发。2.数据存储位置。Hive是建立在Hadoop之上的,所有Hive的数据都是存储在HDFS(https://www.oschina.net/act
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
异步冰川
异步冰川
Lv1
秋已尽,日犹长,仲宣怀远更凄凉
文章
11
粉丝
0
获赞
0