Hive常见面试问题


目录

  1. Hive 内部表和外部表的区别,以及各自使用于哪种环境?Hive和传统数据库的区别?
  2. HiveRc 文件?
  3. Hive 分区?
  4. Hive 分区过多有何坏处以及分区时的注意事项?
  5. Hive 中复杂数据类型的使用好处和坏处?
  6. Hive 分桶?

1. Hive 内部表和外部表的区别,以及各自使用于哪种环境?Hive和传统数据库的区别?

主要体现在 load 和 drop (是否同时删除元数据与数据)的操作上。

Hive 创建内部表时,会将数据移动到数据仓库指向的路径,hive 管理数据的声明周期;若创建外部表,仅记录数据所在的路径,不会对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除,同时对于一些 hive 操作不适应于外部表,比如单个查询语句创建表并向表中插入数据。

外部表只删除元数据,不删除数据。这样外部表相对来说更安全一些,数据组织也更加灵活,方便共享源数据。创建外部表时甚至不需要知道外部数据是否存在,可以把创建数据推迟到创建表之后才进行。

区别:

  1. 需要注意的是传统数据库对表数据检验是 schema on write(写时模式)而 Hive 在 load时不检查数据是否符合 schema 的,hive 遵循的是 schema on read(读时模式),只有在读的时候 hive 才检查、解析具体的数据字段、schema。读时模式的优势是 load data 非常迅速,因为它不需要读取数据进行解析,仅仅进行文件的复制或者移动。写时模式的优势是提升了查询性能,因为预先解析之后可以对列建立索引并压缩,但这样会花费较多的加载时间。即使为内部表在数据加载时也不解析数据格式,如果数据和模式不匹配,只能在查询时出现 null 才知道不匹配的行。
  2. hive 具有复杂的数据结构(数组,映射,结构体)
  3. hive 不支持实时数据处理,对索引的支持较弱。
  4. hive 不支持行级的插入。
  5. 延迟高,数据量大,多存储在 hdfs 上。
  6. 执行为 mapreducer。
  7. hive 不支持行级操作也不支持事务。

选择:内部表和外部表没有太大的区别。如果所有的数据都用hive 处理,则创建内部表。如果数据的处理需要 hive 和其他工具一起处理,则创建外部表。
但是管理部不方便和其他工作共享数据。例如,假设我们有一份由 pig 或者其他工作创建并且主要由这一工具使用的数据。同时我们还想使用 Hive 在这份数据上执行一些查询,可是并没有给与 Hive对数据的所有权,我们就可以创建一个外部表指向这份数据,而并不需要对其具有所有权。


2. HiveRc文件?

Hive 启动时,会先执行 HiveRc文件。例如每次都会使用的 UDF,UDAF 等用户自定义函数,不必每次都命名,可以直接写入HvieRc文件。


3. Hive分区?

是对 hive 表的一种组织形式,可以加快查询,是一种对表进行粗略划分的机制。使用分区时,在表目录下会有相应的子目录,当查询时若添加了分区谓词,该查询会定位到相应的子目录中进行查询,避免全表扫描,比如日志文件分析,将日志按天存储。分区并不会影响大范围的查询。

外部表也可以分区,具有很好的灵活性,例如
这种灵活性有一个有趣的优点是我们可以使用像 Amazon S3 这样的廉价的存储设备存储旧的数据,同时保持较新的数据到 HDFS 中。例如,每天我们可以使用如下的处理过程将一个月前的旧数据转移到 S3 中。


4. Hive 分区过多有何坏处以及分区时的注意事项?

  1. 当分区过多且数据很大时,可以使用严格模式,避免触发一个大的 mapreducer 任务。当分区数量过多且数据量较大时,执行宽范围的数据扫描会触发一个很大的 mapreducer 任务,在严格模式下,当 where 中没有分区过滤条件时会禁止执行。
  2. hive 如果有过多的分区,由于底层是存储在 HDFS 上,HDFS适用于存储大文件而非小文件,因此过多的分区会增加 namenode 负担。
  3. hive 会转化成 mapreducer,mapreducer 会转化为多个 task,过多的小文件的话,每个文件一个task,每个task 一个 jvm实例,jvm 开启与销毁会降低系统效率。

注意事项:合理的分区不应该有过多的分区和文件目录,并且每个目录下的文件应该足够大。


5. Hive 中复杂数据类型的使用好处和坏处?

  • 好处:由于复杂数据类型,存储数据比基本数据类型要多,在存盘上存储可以连续存储,在查询等操作时可以减少磁盘 IO;
  • 坏处:复杂数据类型可能会存在着数据的重复,而且有更大的导致数据不一致的风险。

6. Hive 分桶?

桶是更细粒度的划分,把表划分成桶的理由:

  1. 取样更高效。具体划分桶是将值进行hash,然后除以桶的个数取余,任何一个桶内部是一个随机划分的用户集合。在处理大规模数据集时,在开发和修改查询的阶段,如果能在数据集的一小部分上试运行查询,会方便很多。
  2. 获得更高的查询处理效率。桶为表加上了额外的结构,Hive 在处理有些查询时能利用这个结构。具体而言,连接两个在(包含连接列的)相同列上划分了桶的表,可以使用 Map 端连接(Map-side join)高效的实现。处理左边表的某个桶的 mapper 就知道右边表内相匹配的行在对应的桶,这样 mapper 直接就可以在对应的右边表的桶获取数据进行 join。并不一定要求两个表必须有相同的桶的个数,倍数也行。

具体划分桶是将值进行hash,然后除以桶的个数取余。


1. Hive 内部表和外部表的区别,以及各自使用于哪种环境?Hive和传统数据库的区别?


1. Hive 内部表和外部表的区别,以及各自使用于哪种环境?Hive和传统数据库的区别?


1. Hive 内部表和外部表的区别,以及各自使用于哪种环境?Hive和传统数据库的区别?


1. Hive 内部表和外部表的区别,以及各自使用于哪种环境?Hive和传统数据库的区别?

Hive常见面试问题(持续更新)相关推荐

  1. Jenkins常见问题解决(持续更新)

    Jenkins常见问题解决(持续更新) 参考文章: (1)Jenkins常见问题解决(持续更新) (2)https://www.cnblogs.com/XhyTechnologyShare/p/120 ...

  2. JAVA面试大全(持续更新中...)

    本文旨在收集Java面试过程中出现的问题,力求全面,仅作学习交流,欢迎补充,持续更新中-,部分段落选取自网上,部分引用文章已标注,部分已记不清了,如侵权,联系本人 Java基础 1.面向对象的概述 面 ...

  3. 计算机基础面试(持续更新中)

    一.计算机网络 TCP/UDP TCP/IP即传输控制协议,是面向连接的协议,发送数据前要先建立连接,TCP提供可靠的服务,也就是说,通过TCP连接传输的数据不会丢失,没有重复,并且按顺序到达.(类似 ...

  4. 2021React面试精选——持续更新

    目录 React的请求应该放在哪个⽣命周期中 jsx的本质是什么 React组件通信如何实现 React最新的⽣命周期是怎样的 setState到底是异步还是同步 React中keys的作用是什么 受 ...

  5. 嵌入式面试总结(持续更新)

    文章目录 1. 字符串数组打印(指针的步长) 1.1 指针变量+1 1.2 字符串数组的步长 1.3 跨行加⭐⭐⭐⭐⭐ 例子[1] 例子[2] 2.大端小端 3.异步IO和同步IO区别 4.变量a的不 ...

  6. 面试问题,持续更新...

    1.<label></label>标签在IE下无法使用,只需要在显示的标签后加上disabled="disabled"就好了; 2.被Native修饰的方法 ...

  7. 万能的 JS(万字、基础、原理、面试、持续更新。。。)

    万能的 JS 心无杂念,行路也将势如破竹. 万能的 JS JS(JavaScript 轻量级动态脚本语言) 面向对象思想: 作用域 预解释 (变量提声) 浏览器天生自带 JS 中内存的分类 JS 数据 ...

  8. java高级面试视频,持续更新~

    Java高级工程师面试:Java中反射机制的理解!反射机制的使用原理深入理解Java中的反射反射的概念反射的原理反射的主要用途反射的运用获得Class对象判断是否是某个类的实例创建实例获取方法获取构造 ...

  9. 京东C++开发面试(持续更新)

    京东2020秋招正式批 初面(电话面) 二面 总结 2020-08-11下午4点面试官打电话过来,整个初面大概半个多小时吧,初面主要问的可能还是简历上的东西和一些基础的技能知识. 初面(电话面) 1. ...

最新文章

  1. css3的动画特效--动画序列(animation)
  2. 每日英语:Why is Ye Shiwen’s Swim “Disturbing”?
  3. 信息学奥赛一本通(2063:【例1.4】牛吃牧草)
  4. Visual SourceSafe(VSS)使用手册(转载)
  5. Hanlp得到语义相似度的方法
  6. GitLab5.3修改项目仓库名称后wiki不能访问
  7. centos7之关于时间和日期以及时间同步的应用
  8. Qt + 运动控制 (固高运动控制卡)【2】运动控制卡初始化和关闭
  9. 实用网站汇总(不定期更新)
  10. 良心分享!最全面cmd快捷指令及使用方法,万字总结
  11. Shell脚本实现俄罗斯方块小游戏
  12. 祝贺光环2014年6月28日PMP考试通过率90.28%
  13. 不仅会编程还要会英语(博主英语小笔记)1.1名词
  14. Java打开exe文件
  15. Uva 11584 线性DP
  16. idea中的xml文件怎么直接在idea中通过浏览器打开
  17. [转载]华为的云计算转型:逼出来的开放
  18. 集群环境下,谁偷走quartz配置的定时任务
  19. 【3dsmax新手入门】-实体立方八面晶体绘制
  20. 花开再会,BIGBANG十周年回顾大展北京站于12月7日开幕

热门文章

  1. DOM与元素节点内联样式
  2. 成功更新至Win8.1 update
  3. struts2:多业务方法的处理(动态调用,DMI)
  4. cron4j的Jfinal plugin
  5. 高级语言反汇编程序的函数调用过程
  6. 查看数据库系统字符集
  7. CodeForces - 1450C2 Errich-Tac-Toe (Hard Version)(思维+构造)
  8. CodeForces - 1453D Checkpoints(概率+构造)
  9. CodeForces - 1110G Tree-Tac-Toe(博弈+构造)
  10. HDU - 3555 Bomb(数位dp)