hive 初认识

结构
Hive 是建立在hadoop上的数据仓库架构,它提供了一系列的工具,可以进行数据提取转换加载(这个过程叫做ETL),这是一种可以存储,查询和分析存储在hadoop中的大规模数据的机制.Hive定义了简单的类SQL查询语句 成为hql,他允许数据SQL的用户查询数据.同时 这个语言也允许数据mapreduce开发者的开发自定义mapper和reducer来处理内建的复杂的分析工作.
image

Hive的核心
hive的核心是Driver驱动引擎,驱动驱动有四部分组成:
1>解释器:解释器的作用是将HiveSQL语句转换为语法树(AST)
2>编译器:编译器是讲语法树编译为逻辑执行计划
3>优化器:优化是对逻辑执行计划进行优化
4>执行器:执行器是调用底层的运行康佳执行逻辑执行计划.

Hive的底层存储
Hive的数据是存储在HDFS上的 Hive中的库和表可以看做是HDFS上数据做的一个映射,所以Hive必须是运行在Hadoop集群上的.

Hive程序的执行过程
hive中的执行器,试讲最终要执行的MapReduce程序放在YARN上以一系列的Job的方式执行.

Hive的元数据的存储
HIve的元数据是一般是存储在MYSQL这种关系型数据库上的,Hive和MYSQL之间通过MetaStore服务交互.

image

Hive客户端
1>cli命令行客户端:采用交互窗口.用hive命令行和Hive进行通信
2>HiveSever2客户端:yongThrift写进行通信,Thrift是不同语言之间的转化器,是连接不同语言程序间的协议,通过JDBC或者ODBC去访问Hive
3>HWI客户端:hive自带的一个客户端,一般不用
4>HUE客户端:通过Web页面来和Hive进行交互,使用的比较多.

Hive与HADHOOP的关系
image

Hive构建在Hadoop之上
1>HQL中对查询语句的解析,优化,生成查询计划是由Hive完成的
2>所有的数据都是存储在Hadoop中
3>查询计划被转换为MapReduce任务,在Hadoop中执行(有些查询没MR任务,入select * from table)
4>Hadoop和Hive都是使用UTF-8编码的

Hive和普通关系数据库的异同
image

(1)查询语言.有SQL被广泛的应用在数据仓库中.因此,专门针对Hive的特性设计了类SQL的查询语言HQL 数据SQL开发者可以很方便的使用Hive进行开发的
(2)数据存储位置,Hive是建立在HAdoop之上的.所以HIve的数据都是存储在HDFS中的,而数据库则可以将数据保存在这块设备或者本地文件系统中
(3)数据格式.Hive中没有定义专门的数据格式,数据格式可以有用户指定,用户定义数据格式需要指定三个属性:列分隔符(通常为空格,'t','x001'),行分隔符以及读取文件数据的方法(Hive中默认有三个文件格式TextFile,SequenceFile以及RCFile),由于加载数据的过程中,不需要从用户数据格式到Hive定义的数据格式转换,因此Hive在加载的过程中不会对数据本身进行任何的修改,而只是将数据内容复制或者移动到相应的HDFS目录中.而在数据库中,不同的数据库有不同的存储引擎,定义了自己的数据格式,所有的数据都会按照一定的住址存储,因此数据库加载数据的过程会比较耗时.
(4)数据更新.由于Hive是针对数据仓库应用设计的.而数据仓库的内容都铎写少的,因此Hive中不支持数据的改写和添加,所有的数据都是在加载的时候中确定好的.而数据库中的数据通常是需要经常进行修改的,因此可以使用insert into ...values 添加数据,使用update ....set修改数据.
(5)索引,之前已经说过Hive在加载数据的过程中不会对数据进行任何处理,甚至不会对数据进行扫描,因此也没有对数据中的某些Key建立索引,Hive要访问数据中满足条件的特定值时,需要暴力扫描整个数据,因此访问延迟较高,数据库中,通常会针对一个或者几个列建立索引,因此对于少量的特定条件的数据的访问,数据库中有很高的效率,较低的延迟,由于数据的访问延迟较高没界定了Hive不适合在线数据查询.
(6)执行,Hive中的大多数查询的执行师通过Hadoop提供的MapReduce来实现的,而数据库通常有自己的执行引擎.
(7)执行延迟:之前提到,Hive在查询数据的时候,由于没有索引,需要扫描整个表,因此延迟较高,另外一个导致Hive执行延迟较高的因素是MapReduce框架,由于MapReduce本身具有较高的延迟,因此在利用MapReduce执行Hive查询时,也会有较高的延迟,相对的,数据库的执行延迟较低,当然,这个是有条件的,即数据量小,如果数据量很大,则延迟会远超过Hive
(8)可扩展性,由于Hive是建立在Hadoop之上的.因此Hive的可扩展性适合Hadoop的可扩展性是一致的,而数据库由于ACID语句的严格限制,扩展性非常有限,目前先进的并行数据库Oracle在理论上的扩展能力也只有100台左右
(8)数据规模:由于Hive建立在集群上并行利用MapReduce进行并行计算,因此可以支持很大规模的数据,对饮的,数据库可以支持的数据库规模较小.

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

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

相关文章

git使用(2)

1.远程仓库 a SSHKEY 第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shel…

邮件中的商务英语

一、常见缩写 CC carbon copy:抄送 FYI for your information:供你参考 EOD end of the day BTW By the way:顺便提一下 COB close of the business 这两个词都是指下班前。需要催促某人在下班前给到回复的时候可以用用它们。 eg: Ple…

vue 横向菜单滚动定位_使用vue组件+iscroll实现一个横向菜单,不能正确滑动

使用vue组件iscroll实现一个横向菜单,可是却不能滑动,给父元素ul写死一个宽度可以滑动。但是,我在computed里计算宽度,直接路由进去不能滑动,当我进入别的组件(切换路由)回来又可以滑动了示例地址:http://o…

leetcode1353. 最多可以参加的会议数目(贪心算法)

给你一个数组 events&#xff0c;其中 events[i] [startDayi, endDayi] &#xff0c;表示会议 i 开始于 startDayi &#xff0c;结束于 endDayi 。 你可以在满足 startDayi < d < endDayi 中的任意一天 d 参加会议 i 。注意&#xff0c;一天只能参加一个会议。 请你返…

计算机组成原理实验读r1,计算机组成原理实验一

计算机组成原理实验一 (5页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;8.90 积分计算机组成原理实验计算机组成原理实验第一章、TEC-5 计算机组成实验箱简介运算器运算器74181通用寄存器通用寄存器…

如何使用Kotlin构建具有在线状态的Android Messenger应用

by Neo Ighodaro由新Ighodaro When building a chat application, it is essential to have an online presence feature. It is essential because your users will like to know when their friends are online, and are more likely to respond to their messages in real …

Spark常见问题解决办法

以下是在学习和使用spark过程中遇到的一些问题&#xff0c;记录下来。 1、首先来说说spark任务运行完后查错最常用的一个命令&#xff0c;那就是把任务运行日志down下来。 程序存在错误&#xff0c;将日志down下来查看具体原因!down日志命令&#xff1a;yarn logs -application…

linux下安装php的swoole扩展模块(安装后php加载不出来?)

应开发同事要求&#xff0c;需要安装php的扩展模块swoole。 swoole是一种PHP高级Web开发框架&#xff0c;框架不是为了提升网站的性能&#xff0c;而是为了提升网站的开发效率&#xff0c;以最少的性能损耗&#xff0c;换取最大的开发效率。 假设服务器上php服务版本为php5.6.2…

autosar工具链_Autosar开发与手写代码开发的区别

Autosar开发流程1.BSW开发主要应用工具链&#xff08;Vector等工具&#xff0c;具体可以百度搜索Autosar配置工具&#xff09;来配置&#xff0c;复杂驱动的代码需要手写&#xff0c;但是也要符合Autosar的接口标准&#xff0c;主要包括&#xff0c;CAN通信配置、数字输入配置、…

山东计算机类好的民办大学,2021年山东所有民办大学名单及排名(教育部)

高考考上一个好的大学&#xff0c;是每位考生和家长的一个梦想,但是选择一个适合自己的大学也非常重要。本文高考助手网帮各位考生整理了关于山东本地区所有的民办大学名单、山东所有的民办大学分数线排名、山东民办大学文理科投档线等相关知识&#xff0c;各位考生在填报志愿的…

leetcode1536. 排布二进制网格的最少交换次数(贪心算法)

给你一个 n x n 的二进制网格 grid&#xff0c;每一次操作中&#xff0c;你可以选择网格的 相邻两行 进行交换。 一个符合要求的网格需要满足主对角线以上的格子全部都是 0 。 请你返回使网格满足要求的最少操作次数&#xff0c;如果无法使网格符合要求&#xff0c;请你返回 …

xml文档包含html代码_为什么文档很重要,以及为什么应将其包含在代码中

xml文档包含html代码There are a plethora of acronyms when it comes to software development. KISS, DRY, SOLID… and so on and so forth. But, when it comes to documenting or commenting your code, there is no simple catchphrase.关于软件开发&#xff0c;有很多首…

python 版本分布式锁

此文章&#xff0c;实现python 版本的分布式锁&#xff0c;java版本的可以使用curator很容易实现&#xff0c;python版本如下在做分布式系统开发的时候&#xff0c;分布式锁可以说是必需的一个组件。最近做了一些调研和尝试&#xff0c;经过对比&#xff0c;基于ZooKeeper的分布…

JavaScript数组(2)---遍历/迭代方法 8种

最近工作中经常涉及到数据的处理&#xff0c;数组尤其常见&#xff0c;经常需要对其进行遍历、转换操作&#xff0c;网上的文章零零散散&#xff0c;不得已自己又找出红宝书来翻出来看&#xff0c;顺便记一笔&#xff0c;便于以后查询。 数组常用的方法 ECMAScript5为数组定义了…

用例设计:思维导图orExcel

一、 某次紧急发版时使用思维导图来进行了用例的设计&#xff0c;很被导图多分支罗列、在单一分支上层层递进设计模式的吸引&#xff0c;最终看到由版本主题开枝散叶衍发出的结构性用例时非常开心。从此&#xff0c;几个版本的迭代都使用思维导图进行用例设计。 然而部门制度关…

class对象和class文件_Class文件格式

我们知道Java是一门跨平台的语言&#xff0c;我们编写的Java代码会被编译成中间class文件以让Java虚拟机解析运行。而Java虚拟机规范仅仅描述了抽象的Java虚拟机&#xff0c;在实现具体的Java虚拟机时&#xff0c;仅指出了设计规范。Java虚拟机的实现必须体现规范中的内容&…

2018计算机应用基础考试6,2018结构工程师《计算机应用基础》试题(6)

大家做好准备迎接2018考试了吗?出国留学网为您整理了“2018结构工程师《计算机应用基础》试题(6)”&#xff0c;跟着出国留学网来了解一下吧。要相信只要自己有足够的实力&#xff0c;无论考什么都不会害怕!2018结构工程师《计算机应用基础》试题(6)1、下列存储器中&#xff0…

leetcode1282. 用户分组(贪心算法)

有 n 位用户参加活动&#xff0c;他们的 ID 从 0 到 n - 1&#xff0c;每位用户都 恰好 属于某一用户组。给你一个长度为 n 的数组 groupSizes&#xff0c;其中包含每位用户所处的用户组的大小&#xff0c;请你返回用户分组情况&#xff08;存在的用户组以及每个组中用户的 ID&…

mysql解锁_mysql 解锁

show OPEN TABLES where In_use > 0;show processlist;show status like Table%;show status like %lock%;show OPEN TABLES where In_use > 0&#xff1b;//1.查看当前数据库锁表的情况SELECT * FROM information_schema.INNODB_TRX;//2.杀掉查询结果中锁表的trx_mysql_…

强制换行和禁止换行

强制换行&#xff1a;word-break: break-all; 只对英文起作用&#xff0c;以字母作为换行依据word-wrap: break-word; 只对英文起作用&#xff0c;以单词作为换行依据white-space: pre-wrap; 只对中文起作用&#xff0c;强制换行禁止换行&#xff1a;white-space: now…