1 什么是hive?

Hive 是基于Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL 查询功能。
本质是:将HQL 转化成MapReduce 程序

  • 1)Hive 处理的数据存储在HDFS
  • 2)Hive 分析数据底层的实现是MapReduce
  • 3)执行程序运行在Yarn 上

2 Hive的优缺点

优点:

  • 1 操作接口采用类SQL 语法,提供快速开发的能力(简单、容易上手)。
  • 2 避免了去写MapReduce,减少开发人员的学习成本。
  • 3 Hive 的执行延迟比较高,因此Hive 常用于数据分析,对实时性要求不高的场合。
  • 4 Hive 优势在于处理大数据,对于处理小数据没有优势,因为Hive 的执行延迟比较高。
  • 5 Hive 支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。

缺点:

  • 1 Hive 的HQL 表达能力有限
    (1)迭代式算法无法表达
    (2)数据挖掘方面不擅长
  • 2 Hive 的效率比较低
    (1)Hive 自动生成的MapReduce 作业,通常情况下不够智能化
    (2)Hive 调优比较困难,粒度较粗

Hive 架构原理

  • 1.用户接口:Client
    CLI(hive shell)、JDBC/ODBC(java 访问hive)、WEBUI(浏览器访问hive)
  • 2.元数据:Metastore元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等;
    默认存储在自带的derby 数据库中,推荐使用MySQL 存储Metastore
  • 3.Hadoop
    使用HDFS 进行存储,使用MapReduce 进行计算。
  • 4.驱动器:Driver
    (1)解析器(SQL Parser):将SQL 字符串转换成抽象语法树AST,这一步一般都用
    第三方工具库完成,比如antlr;对AST 进行语法分析,比如表是否存在、字段是否存
    在、SQL 语义是否有误。
    (2)编译器(Physical Plan):将AST 编译生成逻辑执行计划。
    (3)优化器(Query Optimizer):对逻辑执行计划进行优化。
    (4)执行器(Execution):把逻辑执行计划转换成可以运行的物理计划。对于Hive 来说,就是MR/Spark。

    Hive 通过给用户提供的一系列交互接口,接收到用户的指令(SQL),使用自己的Driver,结合元数据(MetaStore),将这些指令翻译成MapReduce,提交到Hadoop 中执行,最后,将执行返回的结果输出到用户交互接口。

Hive和数据库比较

由于 Hive 采用了类似SQL 的查询语言 HQL(Hive Query Language),因此很容易将 Hive 理解为数据库。其实从结构上来看,Hive 和数据库除了拥有类似的查询语言,再无类似之处。本文将从多个方面来阐述 Hive 和数据库的差异。数据库可以用在 Online 的应用中,但是Hive 是为数据仓库而设计的,清楚这一点,有助于从应用角度理解 Hive 的特性。

  • 1 查询语言
    由于SQL 被广泛的应用在数据仓库中,因此,专门针对Hive 的特性设计了类SQL 的查询语言 HQL 。熟悉 SQL 开发 的开发者可以很方便的使用 Hive 进行开发。
  • 2 数据存储位置
    Hive 是建立在 Hadoop 之上的,所有 Hive 的数据都是存储在 HDFS 中的。而数据库则
    可以将数据保存在块设备或者本地文件系统中。
  • 3 数据更新
    由于 Hive 是针对数据仓库应用设计的,而 数据仓库的内容是读多写少的。 因此, Hive中不 建议 对数据的改写,所有的数据都是在加载的时候确定好的。 而数据库中的数据通常是需要经常进行修改的,因此可以使用 INSERT INTO VALUES 添加数据,使用 UPDATE SET 修改数据。
  • 4 索引
    Hive 在加载数据的过程中不会对数据进行任何处理,甚至不会对数据进行扫描,因此 也没有对数据中的某些 Key 建立索引。 Hive 要访问数据中满足条件的特定值时,需要 暴力扫描整个数据 ,因此访问延迟较高。由于 MapReduce 的引入, Hive 可以并行访问数据,因此即使没有索引,对于 大数据 量的访问, Hive 仍然可以体现出优势。 数据库中,通常会针对一个或者几个列建立索引,因此对于少量的特定条件的数据的访问,数据库可以有很高的效率,较低的延迟。由于数据的访问延迟较高,决定了 Hive 不适合在线数据查询。
  • 5 执行
    Hive 中大多数查询的执行是通过 Hadoop 提供的 MapReduce 来实现的。而数据库通常有自己的执行引擎。
  • 6 执行延迟
    Hive 在查询数据的时候,由于没有索引,需要扫描整个表,因此延迟较高。另外一个导致 Hive 执行延迟高的因素是 MapReduce 框架。由于MapReduce 本身具有较 高的延迟,因此在利用 MapReduce 执行 Hive 查询时,也会有较高的延迟。相对的,数据库的执行延迟较低。当然,这个低是有条件的,即数据规模较小,当数据规模大到超过数据库的处理能力的时候, Hive 的并行计算显然能体现出优势。
  • 7 可扩展性
    由于 Hive 是建立在 Hadoop 之上的,因此 Hive 的可扩展性是和 Hadoop 的可扩展性是。一致的(世界上最大的 Hadoop 集群在 Yahoo! 2009 年的规模在 4000 台节点左右)。而数据库由于 ACID 语义的严格限制,扩展行非常有限。目前最先进的并行数 据库 Oracle 在理论上的扩展能力也只有 100 台左右。
  • 8 数据规模
    由于Hive 建立在集群上并可以利用 MapReduce 进行并行计算,因此可以支持很大规模的数据;对应的,数据库可以支持的数据规模较小。

Hive数据类型

  • 基本数据类型
    -

Hive 管理表和外部表

  • 管理表
    默认创建的表都是所谓的管理表,有时也被称为内部表。因为这种表,
    Hive 会(或多或少地) 控制着数据的生命周期。 Hive 默认情况下会将这些表的数据存储在由配置项hive.metastore.warehouse.dir( 例如, ,/user/hive/ 所定义的目录的子目录下。 当我们删除一个管理表时,Hive 也会删除这个表中数据。管理表不适合和其他工具共享数据。
  • 外部表
    Hive 并非认为其完全拥有这份数据。删除该表并不会删除掉这
    份数据,不过描述表的元数据信息会被删除掉。

Hive分区表

分区表实际上就是对应一个HDFS 文件系统上的独立的文件夹,该文件夹下是该分区所有的数据文件。 Hive 中的分区就是分目录 ,把一个大的数据集根据业务需要分割成小的数据集。在查询时通过 WHERE 子句中的表达式选择查询所需要的指定的分区,这样的查询效率会提高很多。

Hive排序

  • 全局排序(Order by)
    Order By:全局排序,一个Reducer
    ASC: 升序(默认)
    DESC: 降序
  • 内部排序(Sort by)
    每个 Reducer 内部进行排序,对全局结果集来说不是排序。
  • 分区排序 (Distribute By)
    类似 MR 中 partition ,进行分区,结合 sort by 使用。
    注意: Hive 要求 DISTRIBUTE BY 语句要写在 SORT BY 语句之前。
    对于 distribute by 进行测试,一定要分配多 reduce 进行处理,否则无法看到 distribute by的效果。
  • Cluster by
    当distribute by 和sorts by 字段相同时,可以使用cluster by 方式。
    cluster by 除了具有distribute by 的功能外还兼具sort by 的功能。但是排序只能是升序排序,不能指定排序规则为ASC 或者DESC。
    以下两种写法等价:
    hive (default)> select * from emp cluster by deptno;
    hive (default)> select * from emp distribute by deptno sort by deptno;
    注意:按照部门编号分区,不一定就是固定死的数值,可以是20 号和30 号部门分到一个分区里面去。

Hive分桶

分区针对的是数据的存储路径;分桶针对的是数据文件。
分区提供一个隔离数据和优化查询的便利方式。不过,并非所有的数据集都可形成合理的分区,特别是之前所提到过的要确定合适的划分大小这个疑虑。
分桶是将数据集分解成更容易管理的若干部分的另一个技术。

分桶抽样查询

对于非常大的数据集,有时用户需要使用的是一个具有代表性的查询结果而不是全部结果。 Hive 可以通过对表进行抽样来满足这个需求。查询表stu_buck 中的数据。
hive (default)> select * from stu_buck tablesample(buck et 1 out of 4 on id);
注:tablesample 是抽样语句,语法: TABLESAMPLE(BUCKET x OUT OF y) 。
y必须是 table 总 bucket 数的倍数或者因子。 hive 根据 y 的大小,决定抽样的比例。例如, table 总共分了 4 份,当 y=2 时,抽取 (4/2=)2 个 bucket 的数据,当 y=8 时,抽取 (4/8=)1/2个 bucket 的数据。
x表示从哪个 bucket 开始抽取 ,如果需要取多个分区,以后的分区号为当前分区号加上y 。例如, table 总 bucket 数为 4 ta blesample(bucket 1 out of 2 )),表示总共抽取 4/ 2 2 个bucket 的数据,抽取第 1 x) 个和第 3 (x +y 个 bucket 的数据。
注意:
x 的值必须小于等于 y 的值,否则FAILED: SemanticException [Error 10061]: Numerator should not be bigger than
denominator in sample clause for table stu_buck

Hive调优

  • Fetch抓取
    Fetch抓取是指, Hive 中对某些情况的查询可以不必使用 MapReduce 计算 。例如:SELECT * FROM employees; 在这种情况下, Hive 可以简单地读取 employee 对应的存储目录下的文件,然后输出查询结果到控制台。
    在hive default.xml.template 文件中 hive.fetch.task.conversion 默认是 more ,老版本 hive默认是 minimal ,该属性修改为 more 以后,在全局查找、字段查找、 limit 查找等都不走mapreduce 。
  • 本地模式
    大多数的Hadoop Job 是需要 Hadoop 提供的完整的可扩展性来处理大数据集的。不过,有时 Hive 的输入数据量是非常小的。在这种情况下,为查询触发执行任务消耗的时间可能会比实际 job 的执行时间要多的多。对于大多数这种情况, Hive 可以通过本地模式在单台机器上处理所有的任务。对于小数据集,执行时间可以明显被缩短。用户可以通过设置hive.exec.mode.local.auto 的值为 true ,来让 Hive 在适当的时候自动
    启动这个优化。

Hive面试题汇总大全相关推荐

  1. Java面试题汇总大全(重点)

    Java相关的面试题大全 Java相关的面试题汇总 javase:se 1: 语法:syntax 1.1 源文件中类的定义: 1.2 &和&&的区别 1.3 如何结束多层for ...

  2. 前端面试题汇总大全(含答案)-- 持续更新

    汇总了一些前端常见的面试题. 文章目录 一.HTML 篇 1. 简述一下你对 HTML 语义化的理解? 2. 标签上 title 与 alt 属性的区别是什么? 3. iframe的优缺点? 4. h ...

  3. Vue 2 - 常见面试题汇总大全

    文章目录 一 基础知识 1.vue 的生命周期 1-1 钩子函数 1-2 钩子函数的使用方法 1-3 父子组件生命周期构造函数执行顺序 2 v-show 与 v-if v-for 2-1.v-show ...

  4. 前端面试题汇总大全 -- 持续更新!

    文章目录 一.html 系列 ⭐⭐⭐⭐⭐ 1.H5新增特性和css3新增特性? 2.什么是HTML5,以及和HTML的区别是什么? 3.说说你对 Dom 树的理解? 4.跨域时怎么处理 cookie? ...

  5. Spark面试题汇总大全

    1 RDD 简介 RDD是Spark最基本也是最根本的数据抽象,它具备像MapReduce等数据流模型的容错性,并且允许开发人员在大型集群上执行基于内存的计算.现有的数据流系统对两种应用的处理并不高效 ...

  6. access汇总含义_2020最新大厂内部 PHP 高级工程师面试题汇总(二)

    51.数据库中的存放了用户 ID, 扣费很多行,redis 中存放的是用户的钱包,现在要写一个脚本,将数据库中的扣费记录同步到 redis 中,每 5 分钟执行一次.请问要考虑哪些问题? 思路:生产者 ...

  7. 2018 大厂高级前端面试题汇总

    (给前端大全加星标,提升前端技能) 作者:木易杨 本人于7-8月开始准备面试,过五关斩六将,最终抱得网易归,深深感受到高级前端面试的套路.以下是自己整理的面试题汇总,不敢藏私,统统贡献出来. 面试的公 ...

  8. 2020最新大厂内部 PHP 高级工程师面试题汇总(一)

    1.给你四个坐标点,判断它们能不能组成一个矩形,如判断 ([0,0],[0,1],[1,1],[1,0]) 能组成一个矩形. 我们分析这道题, 给4个标点,判断是否矩形 高中知识,矩形有4条边,两两相 ...

  9. 常见大数据面试题汇总带答案

    大数据面试题汇总 **牛客网刷sql题** redis flume flink(大部分知识点写过的帖子里都有) mr,java ,集群 算法题 kafka 维度建模分为哪几种? SQL高频面试题 hb ...

  10. 深圳公司大数据面试题汇总

    点击上方 "大数据肌肉猿"关注, 星标一起成长 后台回复[加群],进入高质量学习交流群 2021年大数据肌肉猿公众号奖励制度 相关阅读: 上海小公司大数据面试题汇总 背景 本文为# ...

最新文章

  1. jquery-validae
  2. dede config.chche.inc.php,dede/config.php · 辉辉菜/三强源码 - Gitee.com
  3. Cookie 和 Session的区别 1
  4. (转)WCF教程系列(1)-创建第一个WCF程序
  5. [html] 当html中使用map标签时,area中coords值如何精确定位呢?
  6. SparkContext解析
  7. 02-方法-课后思考
  8. openvswitch dpdk
  9. Linux服务器问题排查工具sar命令 sysstat工具集使用
  10. java中static和final修饰符
  11. Android Studio 使用魅族手机调试时,不显示 Log 的解决方法
  12. php如何让图片大小自适应,dedecms怎么让图片自适应屏幕大小
  13. Sftp中文件名乱码
  14. websocket错误码盘点
  15. ppm调制matlab程序,求助:谁能帮我编写一个4ppm的解调程序 谢谢了
  16. 如何夏普比率在量化交易中的价值
  17. fatal: Needed a single revision, invalid upstream “xxxx“ 问题解决
  18. OpenCV从摄像头中检测人脸
  19. 锐捷交换机系统版本升级11.X平台
  20. 从勾股定理到立方公式的整数解

热门文章

  1. 科普两个著名人工智能思想实验:图灵测试和中文房间
  2. MATLAB-绘图-散点图绘制
  3. excel制作跨职能流程图_一款小白轻松上手流程图绘制工具亿图图示
  4. java计算机毕业设计教务排课系统MyBatis+系统+LW文档+源码+调试部署
  5. 微信小程序之上传图片功能
  6. jenkins 安装maven 插件
  7. 在线考试系统软件测试总结,基于智慧校园平台的在线考试系统应用研究
  8. 随机抽奖程序_Excel VBA(7) – 自制九宫格抽奖器
  9. android随机抽奖代码_Android自己定义效果——随机抽奖
  10. 高校计算机实验室安全自查报告,学校实验室安全检查自查报告