Hive-常见调优方式 && 两个面试sql】的更多相关文章

引导语:我曾有一种感觉,不管何种调优方式,索引是最根本的方法,是一切优化手法的内功,所以一下我们 将讨论一些和索引相关的调优方式.索引是提高数据库性能的常用方法,它可以令数据库服务器以比没有索引快得多的速度检索特定的行,尤其是在查询语句当中包含有MAX(),MIN()和ORDERBY这些命令的时候,性能提高更为明显. 那该对哪些字段建立索引呢? 一般说来,索引应建立在那些将用于JOIN,WHERE判断和ORDERBY排序的字段上.尽量不要对数据库中某个含有大量重复的值的字段建立索引.对于一个EN…
一.Fetch抓取 1.理论分析 Fetch抓取是指,Hive中对某些情况的查询可以不必使用MapReduce计算.例如:SELECT * FROM employees;在这种情况下,Hive可以简单地读取employee对应的存储目录下的文件,然后输出查询结果到控制台. 在hive-default.xml.template文件中hive.fetch.task.conversion默认是more,老版本hive默认是minimal,该属性修改为more以后,在全局查找.字段查找.limit查找等…
调优 Hive提供三种可以改变环境变量的方法,分别是: (1)修改${HIVE_HOME}/conf/hive-site.xml配置文件: 所有的默认配置都在${HIVE_HOME}/conf/hive-default.xml文件中,如果需要对默认的配置进行修改,可以创建一个hive-site.xml文件,放在${HIVE_HOME}/conf目录下.里面可以对一些配置进行个性化设定.这里做的配置都全局用户都生效,而且是永久的. (2)命令行参数: 在启动Hive cli的时候进行配置,可以在命…
调优 1 Fetch抓取(Hive可以避免进行MapReduce) Hive中对某些情况的查询可以不必使用MapReduce计算.例如:SELECT * FROM employees;在这种情况下,Hive可以简单地读取employee对应的存储目录下的文件,然后输出查询结果到控制台. 在hive-default.xml.template文件中hive.fetch.task.conversion默认是more,老版本hive默认是minimal,该属性修改为more以后,在全局查找.字段查找.l…
9.企业级调优 9.1 Fetch 抓取 Fetch 抓取:Hive 中对某些情况的查询可以不必使用 MapReduce 计算: hive.fetch.task.conversion:more 9.2 本地模式 大多数的 Hadoop Job 是需要 Hadoop 提供完整的可扩展性来处理大数据集的.不过,有时 Hive 的输入数据量是非常小的.在这种情况下,为查询触发执行任务消耗的时间可能会比实际job的执行时间要多的多.对于大多数这种情况,Hive 可以通过本地模式在单台机器上处理所有的任务…
HDFS基本命令 接触大数据挺长时间了,项目刚刚上完线,趁着空闲时间整理下大数据hadoop.Hbase等常用命令以及各自的优化方式,当做是一个学习笔记吧. HDFS命令基本格式:Hadoop  fs  -cmd < args > ls 命令 hadoop fs -ls /  列出hdfs文件系统根目录下的目录和文件 hadoop fs -ls -R /  递归列出hdfs文件系统所有的目录和文件 put 命令 hadoop fs -put < local file > <…
一.Tomcat 调优 (一).Tomcat内存优化 参数一: vim /tomcat/bin/catalina.sh CATALINA_OPTS="-server -Xms128m -Xmx512m" //修改内存参数 参数二: vim /tomcat/bin/catalina.sh //调优 JAVA_OPTS="-server -Xms1G -Xmx2G -Xss256K -Djava.awt.headless=true -Dfile.encoding=utf-8 -X…
根据.方案最右侧一栏是一个8G VM的分配方案,方案预留1-2G的内存给操作系统,分配4G给Yarn/MapReduce,当然也包括了HIVE,剩余的2-3G是在需要使用HBase时预留给HBase的. 内存调优 一.AM.Container大小设置1.tez.am.resource.memory.mb #设置 tez AM容器内存 配置文件:tez-site.xml 建议:不小于或者等于yarn.scheduler.minimum-allocation-mb值. .hive.tez.conta…
合理使用文件存储格式 建表时,尽量使用 orc.parquet 这些列式存储格式,因为列式存储的表,每一列的数据在物理上是存储在一起的,Hive查询时会只遍历需要列数据,大大减少处理的数据量. 采用合适的文件压缩 Hive最终是转为 MapReduce 程序来执行的,而 MapReduce 的性能瓶颈在于网络 IO 和 磁盘 IO,要解决性能瓶颈,最主要的是减少数据量,对数据进行压缩是个好的方式.压缩虽然是减少了数据量,但是压缩过程要消耗CPU的,但是在Hadoop中, 往往性能瓶颈不在于CPU…
一.为什么会有年轻代 我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能.你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我们要找到哪些对象没用,这样就会对堆的所有区域进行扫描.而我们的很多对象都是朝生夕死的,如果分代的话,我们把新创建的对象放到某一地方,当GC的时候先把这块存“朝生夕死”对象的区域进行回收,这样就会腾出很大的空间出来. 二.年轻代中的GC 新生代大小(PSYoungGen total 9216K)=ed…
一.为什么会有年轻代 我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能.你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我们要找到哪些对象没用,这样就会对堆的所有区域进行扫描.而我们的很多对象都是朝生夕死的,如果分代的话,我们把新创建的对象放到某一地方,当GC的时候先把这块存“朝生夕死”对象的区域进行回收,这样就会腾出很大的空间出来. 二.年轻代中的GC 新生代大小(PSYoungGen total 9216K)=ed…
一.为什么会有年轻代 我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能.你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我们要找到哪些对象没用,这样就会对堆的所有区域进行扫描.而我们的很多对象都是朝生夕死的,如果分代的话,我们把新创建的对象放到某一地方,当GC的时候先把这块存“朝生夕死”对象的区域进行回收,这样就会腾出很大的空间出来. 二.年轻代中的GC 新生代大小(PSYoungGen total 9216K)=ed…
Hive在分布式运行的时候最害怕的是数据倾斜,这是由于分布式系统的特性决定的,因为分布式系统之所以很快是由于作业平均分配给了不同的节点,不同节点同心协力,从而达到更快处理完作业的目的. Hive中数据倾斜的原因: 数据在分布式节点上分部不均衡 join时某些key可能特别大(常见null值) group by 时某个值可能特别多 count(distinct key...)时有可能会出现数据倾斜,因为其内部处理会进行group by 操作 join join时key最好是分散的,如果一个key的…
避免执行MR select * or select field1,field2 limit 10 where语句中只有分区字段或该表的本地字段 使用本地set hive.exec.mode.local.auto=true; EXPLAIN的使用 hive对sql的查询计划信息解析 EXPLAIN SELECT COUNT(1) FROM T_TABLE; EXPLAIN EXTENDED SELECT COUNT(1) FROM T_TABLE;(更为详细) 本地MR(提高本地资源利用率,一般在…
(官方文档翻译整理及总结) 一.优化数据仓库 ① Hive LLAP  是一项接近实时结果查询的技术,可用于BI工具以及网络看板的应用,能够将数据仓库的查询时间缩短到15秒之内,这样的查询称之为Interactive Query. Ambari安装好之后,还需要额外的两个步骤来开启Hive LLAP: 1.在yarn中开启Hive LLAP的优先使用权   2.打开hive中的Interactive Query开发并配置相关参数 ② HiveServer2 高效的连接管理,类似于mysql连接池…
1.简单的查询,就是只是select,不带count,sum,group by这样的,都不走map/reduce,直接读取hdfs文件进行filter过滤,即尽量让fetch task(当开启一个Fetch Task功能,就执行一个简单的查询语句不会生成MapRreduce作业,而是直接使用FetchTask,从hdfs文件系统中进行查询输出数据,从而提高效率)任务不走MapReduce. 2.遵循hive的严格模式,禁止以下3种情况的查询模式 (1)当表为分区表时,where子句后无分区字段和…
1.关于hive的优化 ->大表拆分小表 ->过滤字段 ->按字段分类存放 ->外部表与分区表 ->外部表:删除时只删除元数据信息,不删除数据文件 多人使用多个外部表操作同一份数据文件 ->分区表:hive中的数据库,表,分区来说都是文件夹 提高了检索效率 ->手动创建 ->动态分区 ->外部表+分区表 ->数据的存储 ->存储格式:列式存储 ->压缩 2.SQL的优化 ->后join先filter 3.mapreduce的优化…
1.关于hive的优化 ->大表拆分小表 ->过滤字段 ->按字段分类存放 ->外部表与分区表 ->外部表:删除时只删除元数据信息,不删除数据文件 多人使用多个外部表操作同一份数据文件 ->分区表:hive中的数据库,表,分区来说都是文件夹 提高了检索效率 ->手动创建 ->动态分区 ->外部表+分区表 ->数据的存储 ->存储格式:列式存储 ->压缩 2.SQL的优化 ->后 join 先 filter 3.mapreduce…
数据倾斜特征:个别Task处理大部分数据 后果:1.OOM;2.速度变慢,甚至变得慢的不可接受 常见原因: 数据倾斜的定位: 1.WebUI(查看Task运行的数据量的大小). 2.Log,查看log中哪一行出现OOM,查找具体哪个Stage,进而确定哪一个shuffle产生了数据倾斜. 3.查看代码,主要是join,groupByKey,reduceByKey等代码. 4.对数据特征分布进行分析.…
表分为内部表.外部表.分区表,桶表.内部表.外部表.分区表对应的是目录,桶表对应目录下的文件.…
数据的倾斜: 主要就是合理的控制我们的map个数以及reduce个数 第一个问题:maptask的个数怎么定的???与我们文件的block块相关,默认一个block块就是对应一个maptask 第二个问题:reduceTask的个数怎么定的???是我们自己手动设置的,爱设几个设几个,没人管你 第三个问题:是不是maptask的个数越多越好:不一定:有时候有些小文件,都要启动一个maptask,分配资源的时间超过了数据处理的时间 减少mapTask的个数:设置map端的小文件合并:使用combin…
hive的调优:第一个调优:fetch抓取,能够避免使用mr的,就尽量不要用mr,因为mr太慢了 set hive.fetch.task.conversion=more 表示我们的全局查找,字段查找,limit查找都不走mr 这个属性配置有三个取值 more minimal none 如果配置成none,所有的都要走mr程序 hive的本地模式: set hive.exec.mode.local.auto=true 开启本地模式,解决多个小文件输入的时候,分配资源时间超过数据的计算时间 set…
一.前言 最近整理了 Tomcat 调优这块,基本上面试必问,于是就花了点时间去搜集一下 Tomcat 调优都调了些什么,先记录一下调优手段,更多详细的原理和实现以后用到时候再来补充记录,下面就来介绍一下,Tomcat 调优大致分为两大类. 1.Tomcat的自身调优 采用动静分离节约 Tomcat 的性能 调整 Tomcat 的线程池 调整 Tomcat 的连接器 修改 Tomcat 的运行模式 禁用 AJP 连接器 2.JVM的调优 调优Jvm内存   二.Tomcat 自身调优 1.采用动…
原文地址:https://blog.csdn.net/u010520146/article/details/81161762 在项目中,SQL的调优对项目的性能来讲至关重要,所有掌握常见的SQL调优方式是必不可少的,下面介绍几种常见的SQL的调优方式,供借鉴. 一.创建索引 1. 要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引 2. (1)在经常需要进行检索的字段上创建索引,比如要按照表字段username进行检索,那么就应该在姓名字段上创建索引,如果经常…
php开发面试题---数据库SQL调优的几种方式 一.总结 一句话总结: 创建索引:尽量避免使用or或者like,或者sql中的正则 存储查询中间结果 可以加sphinx搜索技术 查询优化 主从数据库 数据库连接池 1.sql调优的一些细节调优方法? 用varchar/nvarchar 代替 char/nchar:变长字段存储空间小 使用表的别名:减少解析的时间并减少哪些友列名歧义引起的语法错误 用where字句替换HAVING字句:HAVING只会在检索出所有记录之后才对结果集进行过滤 用va…
面试官:怎么做JDK8的内存调优? 看着面试官真诚的眼神,心中暗想看起来年纪轻轻却提出如此直击灵魂的问题.擦了擦额头上汗,我稍微调整了一下紧张的情绪,对面试官说: 在内存调优之前,需要先了解JDK8的内存区域是怎么划分的: JDK8内存结构 JDK8的内存结构主要包括程序计数器(Program Counter Register).虚拟机栈(Java Virtual Machine Stacks).本地方法栈(Native Method Stacks).堆(Java Heap).元空间(Metas…
面试官:怎么做JDK8的垃圾收集器的调优? 看着面试官真诚的眼神,心中暗想看起来年纪轻轻却提出如此直击灵魂的问题.擦了擦额头上汗,我稍微调整了一下紧张的情绪,对面试官说: 在JDK8中有Serial收集器.Parallel收集器.CMS收集器.G1收集器这么几种收集器,需要根据实际硬件配置和业务需求进行选择调优. 如此浅显的回答,无法让面试官达到深入的要求,肯定不能满足面试官强烈的需求,果不其然面试官又追问到:如果是桌面应用,内存占用也就100MB,应该选择哪种垃圾收集器呢?我快速的回答:Ser…
前面三篇通过CPU.内存.磁盘三巨头,讲述了如何透过现在看本质,怎样定位服务器三巨头反映出的问题.为了方便阅读给出链接: SQL SERVER全面优化-------Expert for SQL Server 诊断系列 通过三篇文章的基本介绍,可以看出系统的语句如果不优化,可能会导致三巨头都出现异常的表现.所以本篇开始介绍系统中的重头戏--------------SQL语句! 开篇前的啰嗦 什么是SQL 语句 ?   这就是SQL 语句! 帅气吧!还有呢! 这也是SQL语句! 博主真能骗人,我读书…
# 问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用 系统提交实际应用后,随着数据库中数据的增加,系统的响应速度就成为目前系统需要解决的最主要的问题之一.系统优化中一个很重要的方面就是SQL语句的优化.对于海量数据,劣质SQL语句和优质SQL语句之间的速度差别可以达到上百倍,可见对于一个系统不是简单地能实现其功能就可,而是要写出高质量的 SQL语句,提高系统的可用性. 在多数情况下,Oracle使…
转载:http://langgufu.iteye.com/blog/1974211 Problem Description:1.每个表的结构及主键索引情况2.每个表的count(*)记录是多少3.对于创建索引的列,索引的类型是什么?count(distinct indexcol)的值是多少?4.最后一次对表进行分析是在什么时间,分析后,是否又对相关表做过大的操作5.索引最后一次rebuild,是在什么时间,此后对表的操作类型又是什么状况?索引中浪费的空间是多少?6.这些表的存储情况,表的存储参数…