2020.9.20(hive的架构介绍及远程数据库模式安装)

hive简介

每一个技术的产生一定是因为出现了解决不了的问题,所以才会有新技术来解决现在需要的问题。
Hive是用来解决什么问题而存在的?
在没了解hive的知识点之前,一定要知道为什么要有它,这样的话学起来才会更有动力和感觉。一定要跟着感觉走,兴趣才是最重要的。
是用来解决什么问题的?
大家说的麻烦更多指的是在写mapreduce的时候,不管你的逻辑多么简单,必须要写什么写driver类,mapper类,reduce类,有时候还要写一些别的类。写起来确实确实比较麻烦,但这东西并不是最主要原因。
我们说了hadoop是分布式文件系统。用来存放我们的数据的,它其实是一个存储层。在公司里面你的数据比如说像BAT这样大公司它肯定有n条产品线对吧,产品线的数据一定是往我们的hdfs扔的,这样会导致什么问题?Hdshds里面存储了很多乱七八糟的数据文件。这个文件存储的时候本身没啥问题,但是你是不是需要一个东西来记录一下这些文件到底是用来干嘛用的是吧?
也就是说任何一个文件我们可以做一件事情,必须首先有文件的名称。文件里面存放着数据,而本身文件里面存放着元数据?(元数据:打开一个文件里面有什么文件名称,修改的时间,最后一次访问时间,只读还是能写,是否可以执行,这些都属于文件元数据)也就是说一个文件,你甚至可以归纳为:
第一,可以有文件数据
第二,还要有文件元数据
第三,数据的元数据

什么叫数据的元数据?
在写mapreduce的时候,读取某一个数据文件的时候,一定是有记录一个偏移量,这些偏移量的值也是一个元数据,也需要维护。
一行记录里面可能包含n多个字段,这些字段的类型和长度,也需要记录。如果在hdfs里面有11个文件。这些文件让你来存,或者说你要拿到一个新人接受你的hadoop集群,怎么知道哪个文件需求来干嘛用的,你是不是可以用一个什么比如说MySQL或者用一个txt的一个文件,或者用word文档,不管用什么东西吧,肯定需要有一个介质来存储这些元数据,而这个元数据的存储其实是比较难以管理的,这个时候就有了have的诞生。

第一个原因:用来存储我们某些元数据,方便把我们这些文件的元数据统一起来,进行一个集中化的管理
hive里面其实最最关键是什么,是因为它有了元数据存储这样一个概念,元数据这点非常重要。
在hadoop或者说hdfs里,哪些东西是元数据?
在记录文件的时候有两个非常重要的东西,fsimage和editlog,也可以被称作是元数据。
这些元数据在管理的时候,这些元数据以及数据的元数据放在hive里进行存储。所以hive里面最最最最关键的就是我们对应的元数据。
同时注意了,你要想学好hive怎么办?可以参照hadoop的学习。
第一点,首先要知道里面有哪些角色,这些角色分别有什么样的功能。在学习hive的时候可以沿着这样的一条思路来往下进行学习,hive里面有什么角色?
最重要的角色是元数据。它非常重要,为什么现在大家对于大数据的技术了解还比较少,后面的时候我们可能会讲impala,也会讲sparksql,而这些东西在进行操作的时候,使用的都是hive里的元数据,这些组件都是可以共用的。
第二个原因: 非Java编程者对hdfs的数据做mapreduce操作,提供SQL的分析方式,通过SQL来完成对应的分析功能。写mapreduce代码非常麻烦。不管多简单的逻辑,比如说wordcount,依然需要写mapper,reducer等,在公司里做数据分析,采用sql的方式更简单一点。在公司里面做数据分析的一定是开发人员吗?比如说运营人员比如说有些专业的一些数据分析师,他也会做一些数据分析。
比起学习一门语言,SQL技术培训在很多机构的一些培训往往只讲一周,依然能写一出也写出来一些比较复杂的SQL语句,学习成本比较低。hive也考虑到这一点,提供了一套SQL的接口。使用和mysql或者关系型数据库一样的sql语句,直接在hive里面进行一个基本操作就可以了。
总结:原因是因为它的元数据要非常难管理,所以现在现在要进行一个统一管理,mapreduce写起来比较麻烦不适合运维人员和专业的数据分析师。
在听说这个技术的时候,往往有人这么说它是数据仓库
第一个问题:数据仓库是数据库吗?
数据库往往支撑我们对应的一个业务系统的使用,业务系统里面要求立刻返回一个对应结果。
当使用hive数据仓库的时候,它并不是这样一个用途,
灌输第一个概念,hive的本质也是一个mapreduce,只不过现在你在写代码的方式变了,原来写的是mapreduce代码,现在换成sql语句了。
当把任务提交到yarn集群,必须要转换成一个MR任务,原来的话需要我们自己来手动完成,现在可以自动完成。
第二个概念,由hive的driver来帮我们完成mapreduce的操作

1.hive数据仓库

OLAP和OLTP的比较:
OLAP:联机分析处理
OLTP:联机事务处理。
在OLTP中,T代表transition是事物的意思。是事物级别的控制,我们接触的像关系型数据库都是事物级别的。所以,我们在使用关系型数据库的时候就用的就是用的OLTP。
OLAP指的是数据仓库方面的一个控制。一个很大量的数据集,通过写sql的方式得到一个分析结果,但是这个分析结果并没有非常高的时效性,不要求在很短时间内把结果返回来,但最终是要有一个结果的。
在OLAP里面还包括一些基本的操作。
切片,切块,旋转,上卷,下钻,这是OLAP里面的5个最主要的分析。
OLAP里有一些基本的分类,想建一个OLAP的话,必须要建立模型,比如星型模型、雪花模型、星座模型。
这些都是数据仓库相关的一些理论知识。(体系是非常庞大的)

数据库和数据库和数据库和数据库和数据区别:
第一点:数据库用来接收用户的请求,并且在很短的时效内要返回用户结果,数据仓库不需要。
第二点:仓库是用来存放货物的,数据仓库可以放置各种各样类型的数据。如果公司里面做的是一个大型网站,不可能只用其中一个数据库。可能会用MySQL,Oracle,mangoDB,redis,每一个数据库里面存放的是各种不同类型,不同产品线,不同业务线的数据。
如果有需求要把所有的数据汇总起来,如果分别从每一个数据库或者每一个数据源拿数据效率比较低。数据仓库可以把各种不同数据源的数据给同时收集回来,以后我做分析的时候,直接访问hive就可以了,而不需要访问其他数据库。
第三点:
MySQL或者关系型数据库里面的数据可以修改。做Java开发增删改查CRUD肯定是可以做修改的,但是对应到数据仓库里面,它是不能够做修改的,它的文件只能进行追加。
为什么我们先讲hadoop在讲hive?
因为hive是要依托于hadoop的,在hadoop里面,文件也只能append不能删除也不能修改,就决定了数据仓库也不能够完成修改的功能。

假如有一张用户表,今天是7月份,假如在6月份的时候做了一次数据同步,那意味着存了6月份那个时间节点里面的数据,这时候7月份我又要保存用户数据了怎么办?再把7月份的数据重新保存一次,也就是说我们在数据仓库里面会形成一个叫时间拉链表的东西。我能获取到我整个数据的在各个时刻的一个数据。
如果在MySQL里面今天修改了10条数据,那10条数据之前的历史状态就不在了。而数据仓库,可以把你各个历史状态的数据都能保证下来。

记住数据库和数据仓库的三点区别:
1.数据库用来接触我们的业务数据数据,需要在很短的时间内返回一个结果。数据仓库不需要,只要做一个分析之后,只要能得到结果就OK了,当然时间一定是越快越好,意味着后面产生计算的时候,效率越高越好。
2.数据仓库能够收纳不同数据源的数据,而数据库只能保证某一个产品线。
3.数据库里的数据是可修改的,数据仓库里面的数据是不可以进行修改的

2.hive:解释器,编译器优化器

操作hive写的是SQL语句,但是最终的任务是yarn集群里面进行资源分配,然后进行执行的。
yarn是不能识别SQL的,意味着涉及到SQL的解析/转化过程。对程序员而言,写的还是sql语句,但最终执行的任务是mapreduce,需要解释器和编译器。还有个优化器,比如mapreduce的shuffle的优化,输入获取切片的时候的优化,hive在创建之初,源代码里面有一个什么类似于优化器的东西。里面大概有100多种优化方式,当你输入不同SQL语句的时候,它会进行一个匹配过程,而进行匹配之后可以选择不同的策略进行一个最基本的优化。

3.hive运行时,元数据存储在关系型数据里面

使用hive来管理我们hdfs里面文件的一些元数据,存储的时候为什么要存到关系数据库里面?

第一点:在没有配置自己的关系型数据库的时候,每次在运行hive,把hive的组件功能启动起来的时候,它都会重新生成一份元数据文件。元数据难以管理。但是把它放到某一个关系型数据库比如MySQL里面,意味着不管是在hive集群里哪一台机器进行启动,最终的结果一定是要放那放到MySQL里面,这个时候你下一次再进行元数据访问的时候还是MySQL没有变化。也就是说进行了元数据的统一管理
第二点:MySQL也有元数据,表名称,字段名称,MySQL的字段长度。但是MySQL元数据就放在MySQL里面,那么hive为什么不能放在自己的hdfs集群里。
理论上来说是可以的,但是存在一个问题。每次在读取数据的时候,它是取一整行的数据。
比如写了一个表头,表头和普通数据对于我们的hdfs在读取的时候是一模一样的,它根本无法识别第一行就是表信息。
而是用MySQL的时候,我每次查询的时候直接去mysql里面进行查询就可以了,不需要单独做一个分辨。
这里关系型数据库可以自由选择。

Hive的架构:

在这里插入图片描述这张架构图要分开看,从中间这个地方砍一刀

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值