
Hive/MR原理剖析/优化实战
文章平均质量分 67
hive入门到精通,语法剖析,hive优化实战,hive各种异常问题排查使用。
涤生大数据
在职阿里,美团,京东,字节大数据技术专家,擅长大数据开发,集群架构/运维,爱好python数据分析/爬虫,
加 v: dsflink 可免费转行评估,职业规划,校招规划,大数据进阶指导,简历把脉
欢迎一起交流
展开
-
开发实战角度:distinct实现原理及具体优化总结
Distinct是一种常用的操作,在所有数据库的SQl语言中都是一个非常重要的操作,。基本原理是将输入的数据集按照指定的列进行分组,在每个分组内部去除重复的值,最后将每个分组的唯一值合并成一个结果集。最近一位好学的小伙伴在学习的过程中,学习到count distinct 的这块内容的时候,,今天就来给大家总结一下。group by的操作适合我们的聚合时distinct息息相关的,所以在我们总结distinct 之前 ,我们不得不先来看一下group by 操作的具体实现原理。原创 2024-01-22 09:40:56 · 1736 阅读 · 0 评论 -
企业实战总结:SQL Join执行的常见问题及解决方案
需要注意的是mapjoin括号中的表是小表侧,而且是不能当做可能会补null的一边,也就是left join的左表,right join的右表,full join的两端,否则就算是写了hint也也不起作用。数据倾斜也是join中的一类常见问题,例如要对在购物车的商品以商品id做关联,总是免不了出现部分热门商品在购物车的次数远远超出平均值的情况。这时会出现严重的长尾。这里tbl3的join key为k1,tbl2的join key是k1, k2,tbl3的join key更短,可以放在前面。原创 2023-12-20 10:00:00 · 661 阅读 · 0 评论 -
含泪整理的超全窗口函数:数据开发必备
我们首先来谈谈什么是窗口函数,窗口函数是指,在指定的数据滑动窗口中,实现各种统计分析的操作。窗口函数是与分析函数一起使用,或按照专用窗口函数使用,组成比如:窗口聚合函数、窗口排序函数等实用函数。说过了什么是窗口函数,明白什么是窗口函数,所以以后面试过程中问到什么是窗口函数,不要在简单的说排序啦,接下来我们在谈谈具体有哪些函数。相信介绍到这里,我们对于什么是窗口函数,有哪些窗口函数都有了一个全面的认识了,面试中我们就按照这样的分类一一介绍,来打动我们的面试官。划分的范围被称为窗口,这也是窗口函数的由来。原创 2023-12-02 10:00:00 · 454 阅读 · 0 评论 -
MapReduce任务个数如何影响执行效率?性能优化从这里做起
在我们的整个验证过程中, Hive中的SQL演示,在日常的数据分析工作中是很常见的。同样的SQL,同样规模数据,为啥运行时间不一样?可能并不是因为你写的SQL有问题,不妨思考下,会不会是底层存储的问题所以,课后作业来了:HDFS 小文件会带来哪些影响?原创 2023-10-17 20:15:00 · 535 阅读 · 0 评论 -
SQL之优化篇:一文搞懂如何优化线上任务性能,增效降本!
可以通过调整split size来设置task的实例数。原创 2023-08-27 09:45:00 · 1943 阅读 · 0 评论 -
SQL优化之诊断篇:快速定位生产性能问题实践
【该阶段作业卡住的可能原因 2 】小文件太多。ODPS 会根据文件大小决定 split,小文件多了会导致计算 split 的过程耗时增加。原创 2023-08-23 22:15:00 · 377 阅读 · 0 评论 -
大数据开发面试必问:Hive调优技巧系列二
当input的文件都很大,任务逻辑复杂,map执行非常慢的时候,可以考虑增加Map数,来使得每个map处理的数据量减少,从而提高任务的执行效率。增加map的方法为:根据computeSliteSize(Math.max(minSize,Math.min(maxSize,blocksize)))=blocksize=128M公式,调整maxSize最大值。让maxSize最大值低于blocksize就可以增加map的个数。原创 2023-08-07 15:14:00 · 463 阅读 · 0 评论 -
大数据开发面试必问:Hive调优技巧系列一
Hive SQL 几乎是每一位互联网分析师的必备技能,相信很多小伙伴都有被面试官问到 Hive 优化问题的经历。所以掌握扎实的 HQL 基础尤为重要,hive优化也是小伙伴应该掌握的一项技能,本篇文章具体从hive建表优化、HQL语法优化、数据倾斜优化、hivejob优化四个大块讲解,带你系统的了解hive优化。原创 2023-07-31 11:10:32 · 621 阅读 · 0 评论 -
presto查hive报错:end index must not be greater than size 问题分析和解决
presto0.208连接hive有不少坑,请尽量不要选择这个版本。presto0.208以上的版本,jdk需要8_151+原创 2022-12-17 07:00:00 · 1861 阅读 · 1 评论 -
Hive企业实战ORC表数据翻倍,颠覆你认知的Cluster by作用?
本文以企业生产上很常见的问题为案例,分析了clusterby的极大的效用原创 2022-12-03 07:00:00 · 2424 阅读 · 1 评论 -
Hive内嵌表生成函数UDTF:explode,posexplode,json_tuple,parse_url_tuple,stack
0.Hive内嵌表生成函数Built-in Table-Generating Functions (UDTF)普通的用户定义函数,如concat(),接受单个输入行并输出单个输出行。相反,表生成函数将单个输入行转换为多个输出行 Row-set columns types Name(Signature) Description T explode(ARRAY<T> a) E原创 2020-07-06 19:55:58 · 3226 阅读 · 0 评论 -
Hive内嵌字符处理函数:get_json_object,parse_url
1.Hive内嵌函数对Json字符和网址的解析处理 Return Type Name(Signature) Description string parse_url(string urlString, string partToExtract [, string keyToExtract]) Returns...原创 2020-07-06 19:08:42 · 2297 阅读 · 0 评论 -
真正让你明白Hive调优系列3:笛卡尔乘积,小表join大表,Mapjoin等问题
0.Hive中的优化分类 真正想要掌握Hive的优化,要熟悉相关的MapReduce,Yarn,hdfs底层源码,明晰Hive的底层执行流程。真正让你明白Hive调优系列,会征对下面分类逐一介绍。大类1:参数优化文件输入前看是否需要map前合并小文件 控制map个数,根据实际需求确认每个map的数据处理量,split的参数等 Map输出是否需要启动压缩,减少网络传输,OOM处理等 控制redcue个数,控制每个reduce的吞吐量,OOM处理等 是否将common-join转换成...原创 2020-07-04 20:39:09 · 9509 阅读 · 4 评论 -
大多数开发人员都弄错的Hive与MapReduce小文件合并问题
进来公司搞小文件治理(小于10Mb),小文件太多的危害就不此赘述了。公司的开发人员提供的小文件治理配置如下:-- 设置小文件合并set hive.merge.mapfiles=true;set hive.merge.mapredfiles=true;set hive.merge.size.per.task = 256000000 ;set hive.merge.smallfiles.avgsize= 256000000 ; 看上去配置的没啥问题,不管是Map-only,还...原创 2020-07-02 22:58:00 · 6658 阅读 · 7 评论 -
真正让你明白Hive参数调优系列1:控制map个数与性能调优参数
本系列几章系统地介绍了开发中Hive常见的用户配置属性(有时称为参数,变量或选项),并说明了哪些版本引入了哪些属性,常见有哪些属性的使用,哪些属性可以进行Hive调优,以及如何使用的问题。以及日常Hive开发中如何进行性能调优。1.Hive有哪些参数,如何查看这些参数Hive自带的配置属性列表封装在HiveConfJava类中,因此请参阅该HiveConf.java文件以获取Hi...原创 2019-11-07 15:48:41 · 31285 阅读 · 28 评论 -
真正让你明白Hive参数调优系列2:如何控制reduce个数与参数调优
相比map个数的控制复杂性,reduce个数的设定要相对简单多了,reduce的个数一般最后决定了输出文件的个数,二者相等,如果想多输出文件的个数(这样文件变小,但有可能程序变慢),那么可以人为增加reduce个数。如果想减少文件个数,也可以手动较少reduce个数(同样可能程序变慢)。但实际开发中,reduce的个数一般通过程序自动推定,而不人为干涉,因为人为控制的话,如果使用不当...原创 2019-11-07 15:48:05 · 13629 阅读 · 6 评论 -
hive报错:running beyond physical memory limits. Current usage: 2.0 GB of 2 GB physica终极解决方式
1.案例描述: hive有个定时任务平时正常,没有啥问题,正常一般大概执行1个小时左右,但是今天突然报错了,报错代码::running beyond physical memory limits. Current usage: 2.0 GB of 2 GB physical memory used; 3.9 GB of 4.2 GB virtual memory used. K...原创 2019-04-16 23:06:45 · 14660 阅读 · 4 评论 -
Hive内置的算术运算符与逻辑运算符
一.Hive内置算术运算符1. 加法操作: +语法: A + B操作类型:所有数值类型说明:返回A与B相加的结果。结果的数值类型等于A的类型和B的类型的最小父类型(详见数据类型的继承关系)。比如,int + int 一般结果为int类型,而int + double 一般结果为double类型举例:hive> select 1 + 9 from t_fin_demo; ...原创 2019-01-06 22:12:51 · 8488 阅读 · 1 评论 -
Hive中压缩使用详解与性能分析
HIVE底层是hdfs和mapreduce实现存储和计算的。所以HIVE可以使用hadoop自带的InputFormat和Outputformat实现从不同的数据源读取文件和写出不同格式的文件到文件系统中。同理,HIVE也可以使用hadoop配置的压缩方法对中间结果或最终数据进行压缩。1.什么是压缩及优劣? hive中数据做压缩和解压缩跟windows下的数据压缩差不...原创 2019-01-05 22:16:50 · 7151 阅读 · 4 评论 -
使用insert ....directory导出数据注意事项与使用详解
一个网友问我很简单的查询导出语句,使用insert .....directory导出数据后,无论是在hdfs上还是本地查看的,都是查看显示乱码insert overwrite directory '/user/finance/hive/warehouse/fdm_sor.db/t_tmp/'select * from t_tmp;#远程查看数据内容[robot~]$ hadoop...原创 2019-01-03 15:23:36 · 19971 阅读 · 1 评论 -
create table ,create table as 与create like三种建表方式的使用详解
Hive的hql是基于sql而来,而sql中关于表的创建有几种方式。同样,hive也支持这些表的创建方式。 官网文档关于建表的地址:hive常见建表方式官网文档1.自主创业方式create table 使用create table从无到有,按照建表的格式和要求实现建表。实际开发中较常用的方式,主要可以定制化建表。 具体参考博客:https://blo...原创 2019-01-02 18:16:34 · 79460 阅读 · 2 评论 -
linux中/etc/profile中配置了环境变量,但是程序还是无法直接启动
安装配置了Hive程序,正常可以启动,也在/etc/profile中配置了环境变量,但是直接命令行hive启动失败1./etc/profile中的部分配置信息: export HIVE_HOME=/opt/modules/hive-0.13.1-cdh5.3.6export PATH=$PATH:$HIVE_HOME/binexport HBASE_HOME=/o...原创 2018-12-29 23:47:26 · 9084 阅读 · 0 评论 -
hive中对子查询如in,exists等支持情况和使用
案例情况:同事使用公司数据探查跑一段代码,部分代码如下,报错,显示不支持in内的子查询。#解决方式使用连接的方式实现子查询的功能SELECT t1.SIGN_CODE AS bus_src ,t1.ORGANIZATION_NO ,t1.loan_amts ,t1.restSum ,NULL AS c1 ...原创 2018-07-03 22:37:15 · 42565 阅读 · 2 评论 -
为什么group by后面不能使用列的别名
同事工作中遇到一个问题:select count(billingdate),to_char(billingdate,'YYYYmm') monthfrom tu_tradewhere to_char(billingdate,'YYYY') ='2017'and reportstat = 30group by month; -----执行报错,can't resolve mo...原创 2018-06-30 15:33:14 · 25323 阅读 · 4 评论 -
真正让你明白Hive调优系列4:hive中关于所有数据倾斜的处理
1.什么是数据倾斜?数据倾斜主要表现在,map /reduce程序执行时,reduce节点大部分执行完毕,但是有一个或者几个reduce节点运行很慢,导致整个程序的处理时间很长,这是因为某一个key的条数比其他key多很多(有时是百倍或者千倍之多),这条key所在的reduce节点所处理的数据量比其他节点就大很多,从而导致某几个节点迟迟运行不完。2.常见容易出现数据倾斜的操作? 数据倾斜可能会发...原创 2018-06-30 14:59:01 · 12836 阅读 · 2 评论 -
Hive中小表与大表关联(join)的性能分析
经常看到一些Hive优化的建议中说当小表与大表做关联时,把小表写在前面,这样可以使Hive的关联速度更快,提到的原因都是说因为小表可以先放到内存中,然后大表的每条记录再去内存中检测,最终完成关联查询。这样的原因看似合理,但是仔细推敲,又站不住脚跟。 多小的表算小表?如果所谓的小表在内存中放不下怎么办?我用2个只有几条记录的表做关联查询,这应该算是小表了,在查看reduce的执...转载 2018-06-30 11:14:07 · 22459 阅读 · 5 评论 -
往hive中导入文件后查看出现中文乱码
往hive中导入.txt或者.csv文件,导入没有报错,导入后通过查询界面发现,中文字段出现乱码的情况。因为Hive默认是所有文件都是UTF-8的(utf-8本身支持中文没有问题的。hadoop涉及输出文本的默认输出编码统一用没有BOM的UTF-8的形式,但是一般我们导入的文件都是在windows下编辑的,而windows默认的中文文本输出编码格式为GBK.)Hive将按照UTF8编码格式...原创 2018-06-25 11:24:06 · 15208 阅读 · 10 评论 -
UDF函数:根据日期生日等查询星座
自定义UDF函数实现:根据用户的生日,判断用户是什么星座.import org.apache.hadoop.hive.ql.exec.Description;import org.apache.hadoop.hive.ql.exec.UDF;import org.apache.hadoop.io.IntWritable;import org.apache.hadoop.io.Text...原创 2018-05-26 23:24:52 · 5357 阅读 · 0 评论 -
UDF函数:对字符串实现sha256加密,返回64位十六进制字符串
实际需求多一些特殊数据需要加密存储。下面 实现sha256加密,返回64位十六进制字符串package cnsuning.udf.functions.string;import org.apache.commons.codec.digest.DigestUtils;import org.apache.hadoop.hive.ql.exec.Description;import org.ap...原创 2018-05-26 10:39:48 · 7245 阅读 · 0 评论 -
UDF函数:求两个字符串列表或者数组之间的交集,差集,并集,补集
求两个字符串列表或者数组之间的交集,差集,并集,补集。import org.apache.commons.collections.CollectionUtils;import org.apache.hadoop.hive.ql.exec.UDF;import org.apache.hadoop.io.IntWritable;import org.apache.hadoop.io.Text;...原创 2018-05-26 10:30:39 · 6613 阅读 · 0 评论 -
hive使用动态分区插入数据详解
往hive分区表中插入数据时,如果需要创建的分区很多,比如以表中某个字段进行分区存储,则需要复制粘贴修改很多sql去执行,效率低。因为hive是批处理系统,所以hive提供了一个动态分区功能,其可以基于查询参数的位置去推断分区的名称,从而建立分区。 1.创建一个单一字段分区表hive> create table dpartition(id int ,name string ...原创 2018-05-20 15:21:57 · 114343 阅读 · 13 评论 -
往hive表中插入与导出数据方式load ,insert ,sqoop 等方式详解
往hive数据仓库的表中导入数据,可以直接insert ,也可以选择load方式。当然也可以通过第三方工具如sqoop等将数据导入到hive当初。特别注意:hive虽然不会验证用户装载的数据和表的模式是否匹配,但是hive会验证文件的存储格式和hive定义的表结构的存储格式是否一致。比如将文本文件装载到sequencefile表中则报错。1.往hive表中导入数据 1.lo...原创 2018-05-20 13:37:46 · 15910 阅读 · 1 评论 -
hive中如何将rcfile,textfile,sequencefile,以及自定义存储格式的数据相互转换
hive中常见的文件存储格式也就3种,textfile,sequencefile,rcfile.实际开发中,很多公司都会采用自定义的存储格式来实现数据的特定存储。一方面是为了数据安全,另一方面是根据自身情况实现数据存储的效益最大化。 1.使用textfile存储格式创建表create table fdm_sor.saveas_textfile(id int ,nam...原创 2018-05-20 10:21:38 · 11738 阅读 · 1 评论 -
textfile,sequencefile和rcfile的使用与区别详解
hive在创建表时默认存储格式是textfile,或者显示自定义的stored as textfile.很多人知道hive常用的存储格式有三种,textfile,sequencefile,rcfile.但是却说不清楚这三种格式的干什么用的,本质有有什么区别?适合什么时候用? 因为hive是文本批处理系统,所以就存在一个往hive中导入数据的问题,首先数据的存储格式有多种,甚...原创 2018-05-14 00:35:23 · 21469 阅读 · 1 评论 -
hive中关于数据库和表的常见操作详解
hive是属于批处理系统,所以最大的缺点就是不支持行级别的数据插入,删除,更新,也不支持事务机制。hive中数据库的概念本质上也仅仅是mysql(或别的存储元数据的数据库)表中一个目录或者命令空间(namespace),但是对于大集群来说,这又必不可少,因为只有这样才能将生产表组成逻辑组,形成组织层次结构。官网关于数据库和表的操作:官网关于数据库和表的常见操作1.hive关于数...原创 2018-05-13 12:32:18 · 6284 阅读 · 0 评论 -
详解hive的列分隔符和行分隔符的使用
hive中在创建表时,一般会根据导入的数据格式来指定字段分隔符和列分隔符。一般导入的文本数据字段分隔符多为逗号分隔符或者制表符(但是实际开发中一般不用着这种容易在文本内容中出现的的符号作为分隔符),当然也有一些别的分隔符,也可以自定义分隔符。有时候也会使用hive默认的分隔符来存储数据。hive (fdm_sor)> create table fdm_sor.mytest_tmp...原创 2018-05-13 10:42:40 · 89673 阅读 · 5 评论 -
Hive数据类型和使用注意事项详解
了解Hive数据类型 ,是Hive编程的基础。使用hive建表,首先要明白hive常用的数据类型有哪些,可以存储哪些类型的数据。其实Hive支持关系型数据库中的大多数基本数据类型,且同时支持关系型数据库中少见的3种集合数类型(STRUCT,MAP,ARRAY)。然而学习技术最好的方式之一就是去查看官方文档。 Hive关于数据类型官网地址:Hive官网关于数据类型的介绍...原创 2018-05-11 00:56:35 · 39991 阅读 · 0 评论 -
数据仓库中mysql,hive,hdfs,mapreduce之间的关系
交流中发现很多hive转行的开发者都不是特别清楚,hive既然是数据仓库,那为什么还需要mysql数据库,还需要hdfs呢,熟悉三者之间的关系是作为一个合格的hive数据仓库开发者必须掌握的技能 一.什么是Hive与其特点 官网介绍:The Apache Hive ™ data warehouse software facilitates reading, w...原创 2018-05-05 16:02:00 · 17507 阅读 · 2 评论 -
UDF函数:删除列中的重复值(去重)
需求:import org.apache.commons.lang.StringUtils;import org.apache.hadoop.hive.ql.exec.UDF;import org.apache.hadoop.io.Text;import java.util.Arrays;import java.util.HashSet;/** * @param * ...原创 2018-04-30 18:05:37 · 5099 阅读 · 0 评论 -
UDF函数:判断日期是否为月末日期?
需求:判断一个日期是否为当月月末日期?import org.apache.commons.lang.StringUtils;import org.apache.hadoop.hive.ql.exec.UDF;import org.apache.hadoop.io.BooleanWritable;import java.text.ParseException;import java.tex...原创 2018-04-30 17:46:37 · 5542 阅读 · 0 评论