最近怎么流量涨这么多?那我开始讲Hive特性了!

Hive架构原理

a.用户接口:Client

  • CLI(Hive shell)、JDBC/ODBC(java访问hive)、Hive WEBUI(浏览器访问hive)和Thrift服务器
    b.驱动器:Driver
  • 解析器(SQL Parser):将SQL字符串转换成抽象语法树AST,这一步一般都用第三方工具库完成,比如antlr;对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。
  • 编译器(Physical Plan):将AST编译生成逻辑执行计划
  • 优化器(Query Optimizer):对逻辑执行计划进行优化。
  • 执行器(Execution):把逻辑执行计划转换成可以运行的物理计划对于Hive来说,就是MR/Spark
    c.元数据:MetaStore
  • 通俗来说,元数据就是“数据的数据”,例如一张表里有许多数据,而元数据则是在描述该表的相关信息,例如创建时间、列数、行数等。Hive的元数据默认储存在derby数据库里,但推荐储存在MySQL里。
    d.存储和计算
  • 使用HDFS进行存储,使用MapReduce进行计算
  • 一句话概括:Hive通过给用户提供的一系列交互接口,接收到用户的指令(SQL),使用自己的Driver,结合元数据(MetaStore),将这些指令翻译成MapReduce,提交到Hadoop中执行,最后,将执行返回的结果输出到用户交互接口

索引!

  • Hive在加载数据的过程中不会对数据进行任何处理,甚至不会对数据进行扫描,因此也没有对数据中的某些Key建立索引
  • Hive要访问数据中满足条件的特定值时,需要暴力扫描整个数据,因此访问延迟较高。由于 MapReduce 的引入, Hive 可以并行访问数据,因此即使没有索引,对于大量数据的访问,Hive 仍然可以体现出优势但由于数据的访问延迟较高,决定了 Hive 不适合在线数据查询
    • 延迟原因:扫描整个表、底层MR延迟也高
    • 数据库的低延迟是有条件的,当数据库单独处理不了超大规模数据时,并行提供的优势就大于低延迟的单个个体了
  • 而在数据库中,通常会针对一个或者几个列建立索引,提升访问特定条件下数据访问的效率,并拥有较低的延迟

建表

CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name data_type [COMMENT col_comment], ...)] [COMMENT table_comment] [PARTITIONED BY (col_name data_type [COMMENT col_comment], …)]
[CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], …)] INTO num_buckets BUCKETS]
[ROW FORMAT row_format] [STORED AS file_format]
`` [LOCATION hdfs_path];

  • EXTERNAL关键字可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径(LOCATION),Hive创建内部表时,会将数据移动到数据仓库指向的路径。
  • 若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变
  • 在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据
  • STORED AS ORC:下次试一下以ORC文件存储一张表,养成这样的习惯,这个表只有优点

内部表和外部表

  • **内部表:**默认创建的表都是内部表,或称管理表managed table。Hive会::或多或少地::控制着数据的生命周期。Hive默认情况下会将这些表的数据存储在由配置项hive.metastore.warehouse.dir(例如/user/hive/warehouse)所定义的目录的子目录下。 当我们删除一个管理表时,Hive也会删除这个表中数据。++管理表不适合和其他工具共享数据++
  • 外部表:如果表是外部表,那么Hive并非认为其完全拥有这份数据删除该表并不会删除掉这份数据,不过描述表的元数据信息会被删除掉。::所以建一张外部表的实质是在元数据建立一个路径指向外部数据源::,删除外部表只是删除元数据里的信息而原始数据不会删除,当重建表时可直接读取原始数据

分区

究其实质,建一张表就是建一个文件夹,然后把数据放在该文件夹里;而分区则是指在这个文件夹(table)下又建立一个子文件夹,把归属这个分区的数据放在这个子文件夹中。最为常见的分区字段就是日期字段,如20200630的数据会放在该表下‘20200630’归属的文件夹里。::以后会出现分区删除等操作,所以掌握分区非常重要::

  • 分区的好处在于提供数据查询效率,当需要某个分区数据时Hive只需要去扫描该表下所需子文件夹即可,而不用全表扫描一遍。++是有点像跳表的索引层,不过会不会允许像跳表一样重叠,这个需要进一步学习++
  • 分区需要在建表时进行,语句为:PARTITIONED BY (col_name data_type)
  • 增加一个分区时:alter table table_name add partition(dt='20200630');
  • 增加多个分区时:alter table table_name add partition(dt='20200630') partition(dt='20200701');
  • 删除一个分区时:alter table table_name drop partition(dt='20200630');
  • 删除多个分区时(注意逗号!):alter table table_name drop partition(dt='20200630'),partition(dt='20200701');

其他科普小知识

  • 世界上最大的Hadoop 集群在 Yahoo!,2009年的规模在4000 台节点左右,美团近年来达到了6000台以上。而数据库由于** ACID 语义的严格限制,扩展性非常有限**目前最先进的并行数据库Oracle在理论上的扩展能力也只有100台左右
    • 但好像Hadoop也没有万台那种,好像也不是很厉害……

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/240094.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pvk2pfx.exe makecert.exe 文件路径

文件路径 C:\Program Files (x86)\Windows Kits\10\bin\XXXXX\x86

GBASE南大通用数据库在Windows和Linux中创建数据源

Windows 中数据源信息可能存在于两个地方:在 Windows 注册表中(对 Windows 系统), 或在一个 DSN 文件中(对任何系统)。 如果信息在 Windows 注册表中,它叫做“机器数据源”。它可能是一个“用 …

产品原型设计软件 Axure RP 9 mac支持多人写作设计

axure rp 9 mac是一款产品原型设计软件,它可以让你在上面任意构建草图、框线图、流程图以及产品模型,还能够注释一些重要地方,axure rp汉化版可支持同时多人写作设计和版本管理控制,这款交互式原型设计工具可以帮助设计者制作出高…

软件工程中关键的图-----知识点总结

目录 1.数据流图 2.变换型设计和事务型设计 3.程序流程图 4.NS图和PAD图: 5.UML图 1.用例图 2.类图 3.顺序图 4.协作图 本文为个人复习资料,包含个人复习思路,多引用,也想和大家分享一下,希望大家不要介意~ …

PCL配置记录

PCL配置记录 1. Windows10vs2019pcl win10vs2019pcl 1.11.1 1.下载与安装 https://github.com/PointCloudLibrary/pcl/releases ) 双击exe安装 注意: ( ) 解压 “pcl-1.11.0-pdb-msvc2019-win64.zip”,将解压得到的文件夹中的内容添加“…\PCL…

基于JAVA的厦门旅游电子商务预订系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 景点类型模块2.2 景点档案模块2.3 酒店管理模块2.4 美食管理模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 学生表3.2.2 学生表3.2.3 学生表3.2.4 学生表 四、系统展示五、核心代码5.1 新增景点类型5.2 查询推荐的…

TYPE C 接口知识详解

1、Type C 概述 Type-C口有4对TX/RX分线,2对USBD/D-,一对SBU,2个CC,另外还有4个VBUS和4个地线。 当Type-C接口仅用作传输DP信号时,则可利用4对TX/RX,从而实现4Lane传输,这种模式称为DPonly模式…

android 9 adb安装过程学习(四)覆盖安装

六、PackageManagerService.replacePackageLIF - 覆盖安装 一、参数分析 位置:"frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java" 这里我们来回顾下传入的参数:final int policyFlags 就是我们之前的…

背包小专题

背包小专题 1. CF106C Buns题目描述题目概况思路点拨代码实现 2. CF864E Fire题目描述题目概况思路点拨代码实现 3. CF366C Dima and Salad题目描述题目概况思路点拨背包瓶颈解决方法 代码实现 4. CF1132E Knapsack题目描述题目概况思路点拨代码实现 5. CF632E Thief in a Shop…

Leetcode 435 无重叠区间

题意理解: 给定一个区间的集合 intervals 要求需要移除区间,使剩余区间互不重叠 目标:最少需要移除几个区间。 解题思路: 采用贪心思路解题,什么是全局最优解,什么是局部最优解。 全局最优解,删…

使用Java语言判断一个年度是不是闰年

一、 代码说明 引入Scanner函数,将类命名为Judge类,使用try语句和catch语句将整体代码包围起来,使用if语句来判断是否为闰年,输入年份,然后得到相应的结论。 二、代码 import java.util.Scanner; public class Judg…

叮咚,微信年度聊天报告(圣诞节版)请查收~丨GitHub star 16.8k+

微信年度聊天报告——圣诞节特别版,快发给心仪的ta吧~ 开源地址 GitHub开源地址:https://github.com/LC044/WeChatMsg 我深信有意义的不是微信,而是隐藏在对话框背后的一个个深刻故事。未来,每个人都能拥有AI的陪伴,…

Microsoft Store 里有哪些好用的软件?

Windows 应用商店还是有不少干货软件的。 下面给大家推荐 12 款 Windows 应用商店里优秀实用的 UWP 应用软件,无广告、不流氓、体验好,强烈建议收藏! 而且经过商店审核和限制,也更加安全、干净,不用担心有乱七八糟的…

内存管理学习

内存管理 在计算系统中,通常存储空间分为两种:内部存储空间和外部存储空间。 内部存储空间通常访问速度比较快,能够按照变量地址随机访问,也就是我们通常所说的RAM(随机存储器),可以把它理解为…

Unity 问题 之 ScrollView ,LayoutGroup,ContentSizeFitter 一起使用时,动态变化时无法及时刷新更新适配界面的问题

Unity 问题 之 ScrollView ,LayoutGroup,ContentSizeFitter 一起使用时,动态变化时无法及时刷新更新适配界面的问题 目录 Unity 问题 之 ScrollView ,LayoutGroup,ContentSizeFitter 一起使用时,动态变化时无法及时刷新更新适配界面的问题 一、简单介绍…

Yolov5水果分类识别+pyqt交互式界面

Yolov5 Fruits Detector Yolov5 是一种先进的目标检测算法,可以应用于水果分类识别任务。结合 PyQT 框架,可以创建一个交互式界面,使用户能够方便地上传图片并获取水果分类结果。以下将详细阐述 Yolov5 水果分类识别和 PyQT 交互式界面的实现…

基于ssm智能社区管理系统的设计与实现+vue论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本智能社区管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息…

unity脚本API中OnCollisionEnter()、OnTriggerEnter()二者的区别

Unity中的OnCollisionEnter和OnTriggerEnter两个函数在日常的开发中很常见但也容易混淆,下面说一说两者的区别。 碰撞器(Collider)与触发器(Trigger)的概念 碰撞器(Collider)和触发器&#xff…

nodejs+vue+ElementUi医院预约挂号系统3e3g0

本医院预约挂号系统有管理员,医生和用户。该系统将采用B/S结构模式,使用Vue和ElementUI框架搭建前端页面,后端使用Nodejs来搭建服务器,并使用MySQL,通过axios完成前后端的交互 管理员功能有个人中心,用户管…

JAVA程序流程控制

程序的流程控制一般分为3种:顺序结构、分支结构、循环结构 顺序结构:就是不加任何控制,代码从main方法开始自上而下执行 分支结构:就是根据条件判断是true还是false,有选择性的执行哪些代码。在Java语言中提供了两个格…