Hive面试
文章平均质量分 58
Hive面试
我是方小磊
这个作者很懒,什么都没留下…
展开
-
请你谈谈Hive优化
Hive优化1.1 join操作进行优化join优化是个复杂的问题,可以从以下几点进行优化1)小表前置大小表在join的时候,应该将小表放在前面,Hive在解析带join的SQL语句时,会默认将最后一个表作为大表,将前面的表作为小表并试图将它们读进内存。如果表顺序写反,大表在前面,可能会引发OOM。2)key值相同多表join的时候尽量使用相同的key来关联,这样会将会将多个join合并为一个MR job来处理。3)利用map side joinmap join特别适合大小表join的情况。转载 2021-05-31 20:41:06 · 976 阅读 · 0 评论 -
行列存储的区别和优缺点
行存储和列存储由上图可以看到,在列存储中,某一个字段的所有值都是连在一起的。在行存储中,每一行的所有字段的值是连在一起的。因此行列存储的优势就很容易区分出来了:行存储的优点:行记录的更新和插入比较方便,写入效率高行存储的缺点:数据读取有冗余,如果只查某几个字段,需要进行大量的数据筛除列存储的优点:读取数据没有冗余,适合定长度的大数据计算列存储的缺点:缺乏数据完整性保证,读取数据没有冗余针对某几个字段的读取效率较高...原创 2021-05-27 16:40:50 · 3641 阅读 · 0 评论 -
Hive 数据倾斜问题及解决方案
1.什么是数据倾斜数据倾斜就是由于数据的分布不平衡,某些地方特别多,某些地方又特别少,导致的在处理数据的时候,有些很快就处理完了,而有些又迟迟未能处理完,导致整体任务最终迟迟无法完成,这种现象就是数据倾斜。针对mapreduce的过程来说就是,有多个reduce,其中有一个或者若干个reduce要处理的数据量特别大,而其他的reduce处理的数据量则比较小,那么这些数据量小的reduce很快就可以完成,而数据量大的则需要很多时间,导致整个任务一直在等它而迟迟无法完成。跑mapreduce任务时常见的r转载 2021-05-25 21:16:44 · 790 阅读 · 0 评论 -
Hive 分桶和分区的区别及应用场景
1. 表分区1.1 概念分区是指按照数据表的某列或某些列分为多个区,从形式上可以理解为文件夹,即针对每个分区都会有一个文件夹存储对应该分区的数据。1.2 使用场景比如我们要收集某个大型网站的日志数据,一个网站每天的日志数据存在同一张表上,由于每天会生成大量的日志,导致数据表的内容巨大,在查询时进行全表扫描耗费的资源非常多。那其实这个情况下,我们可以按照日期对数据表进行分区,不同日期的数据存放在不同的分区,在查询时只要指定分区字段的值就可以直接从该分区查找。即可以加快某些查询效率。2. 表分桶2转载 2021-05-24 18:36:47 · 1941 阅读 · 0 评论 -
Hive map-side join和reduce-side join
Hive多表Join的过程(reduce-side join)HiveSQL底层要转为MapReduce任务执行,那么当进行多表连接的时候,是如何进行表join的呢?这里搬运这篇博客的例子:https://blog.csdn.net/qiulinsama/article/details/90299426现在有两个表:page_view和user表这两张表都有一个相同的字段userid,根据这个字段可以将两张表连接起来,pv_users表,SQL命令是:SELECT pv.pageid, u.原创 2021-05-24 17:21:17 · 323 阅读 · 0 评论 -
hive存储元数据的方式及其特点
hive存储元数据的两种方式hive默认使用derby内存数据库存储元数据。hive可以通过配置设置mysql存储元数据两种方式的特点derby存储:元数据存储在内存中,不稳定无法并发使用hiveMysql存储:数据存储模式可以自己设置持久化好查看方便...原创 2021-05-23 11:10:13 · 818 阅读 · 0 评论 -
Hive中的索引
Hive是否支持索引Hive表中是可以对某些字段添加索引来加速某些操作Hive索引机制和原理Hive表的索引数据是存储在另一张表中的,在表里面存储索引列的值,该值对应的HDFS的文件路径,该值在数据文件中的偏移量。当Hive通过索引列执行查询时,首先通过一个MR Job去查询索引表,根据索引列的过滤条件,查询出该索引列值对应的HDFS文件目录及偏移量,并且把这些数据输出到HDFS的一个文件中,然后再根据这个文件中去筛选原文件,作为查询Job的输入。Hive索引的使用场景当数据文件的逻辑分区太多太原创 2021-05-22 10:49:45 · 861 阅读 · 0 评论 -
Hive中orderBy,sortBy,distribute by,cluster by,group by
首先我们要明白Hive的本质是将HiveSQL转成MapReduce来执行分布式计算的,和普通单机程序不同的一个特点就是最终的数据会产生多个子文件,每个reducer节点都会处理partition给自己的那份数据产生结果文件,这导致了在Hadoop环境下很难对数据进行全局排序,如果在Hadoop上进行order by全排序,会导致所有的数据集中在一台reducer节点上,然后进行排序,这样很可能会超过单个节点的磁盘和内存存储能力导致任务失败。因此OrderBy会导致全局排序。解决方案就是放弃全局排序,使用转载 2021-05-22 10:14:10 · 1729 阅读 · 0 评论 -
SQL的执行顺序
执行顺序首先要明白的就是,在我们日常写sql的过程中,往往select是从一行开始写的,但是实际上却往往是很后面才会执行的。所以sql的书写顺序并不代表执行顺序。下面列了一般的执行顺序:fromjoinonwheregroup byavg, sum等聚合函数havingselectdistinctorder bylimit以上每个步骤都会产生一个虚拟表,该虚拟表被用作下一个步骤的输入。这些虚拟表对调用者(客户端应 用程序或者外部查询)不可用。只有最后一步生成的表才会会给调用者转载 2021-05-21 21:59:52 · 2605 阅读 · 0 评论 -
数据库表的连接方式
数据库表的连接方式先总体概述一下:一般用的是join 和 union1. 笛卡尔积:join2. 内连接:inner join on3. 外连接:全外连接(full join on),左外连接(left join on),右外连接(right join on)4. 联合查询:Union 和Union all用于测试的两张表:1.笛卡尔积 (join)两表关联,把左表的列和右表的列通过笛卡尔积的形式表达出来。select * from t1 join t2结果:2.内连接 (i转载 2021-04-14 22:08:10 · 8523 阅读 · 0 评论 -
Hive的概念,作用,优缺点
1.Hive概念概述:基于Hadoop的开源的数据仓库工具,用于处理海量结构化数据。Hive把HDFS中结构化的数据映射成表。Hive通过把HiveSQL进行解析和转换,最终生成一系列在hadoop上运行的mapreduce任务,通过执行这些任务完成数据分析与处理。2.hive的优点:操作接口采用类似SQL的语法,上手容易hive对MapReduce进行了包装,开发人员不需要写MapReduce,减少了学习成本hive的优势在于处理大数据,针对小数据处理的优势不大3. hive的缺点原创 2021-05-21 11:15:02 · 4516 阅读 · 0 评论 -
Hive内部表和外部表的区别
其实主要就是两个区别:1)表数据存储位置不同:内部表数据存储的位置是hive.metastore.warehouse.dir(默认:/user/hive/warehouse),外部表数据的存储位置由自己制定(如果没有LOCATION,Hive将在HDFS上的/user/hive/warehouse文件夹下以外部表的表名创建一个文件夹,并将属于这个表的数据存放在这里);注:内部表和外部表的表数据存储位置不同,但是真实数据都是存储在HDFS上的2)删除表的影响不同:删除内部表则会将真实文件数据一起删除。而原创 2021-05-20 11:17:45 · 677 阅读 · 0 评论