剑指数据仓库-Hive01

一、前情回顾

二、Hive01

三、Hive的安装部署

四、Hive的DDL操作

五、可能涉及的面试题

一、前情回顾

Hadoop:
狭义:单单指apache hadoop软件(最最重要基础的一个部分)
广义:Hadoop生态圈:Hadoop、Hive、Sqoop、HBase…

每一类的组件都是为了解决特定事情,比如Hive是做sql的分析引擎,生产上需要基于多个框架进行组合来实现业务场景。

如何快速定位问题?及如何快速的解决问题

比如在Hadoop中需要处理如下业务:join/group by ,

面向mapreduce编程,复杂度会非常的高,以wordcount进行举例如下:
  • https://hadoop.apache.org/docs/stable/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html
  • 需要本地开发,测试,打包,扔到服务器运行;后期维护起来非常的麻烦

2.1、Hive产生背景(引出Schema)

===> Hive的产生背景

  • 由于面向MapReduce编程非常麻烦:比如原来从事RDBMS关系型数据库的从业者,对于他们开发起来是非常费劲的:
    所以这是基于Hadoop MapReduce处理大数据的弊端:
Schema信息:
  • 对等的去到MySQL中理解就是 --> 关系型数据库中的表名、列名、列类型
  • 在MySQL或者Oracle中,如果我们进行SQL的统计,肯定要先创建表,包括:表名、列名、列类型…
    然后再使用SQL进行相应业务的统计分析

而对于HDFS上的文件,主要分为:txt文本格式,它不存在表名、列名、列类型;关于文本格式我们顶多能做的是按照分隔符(\t):来知道第一列是什么、第二列是什么

源数据 VS 元数据:
源数据:HDFS上的数据
元数据:是描述数据的数据,比如数据的表名,列名,列类型

2.2、初识Hive

Hive官网:hive.apache.org

官网对Hive的描述:

  • The Apache Hive data warehouse software facilitates(促进)
    reading,
    writing,
    managing large datasets residing
    in distributed storage(HDFS/S3)
    using SQL.

  • A command line tool
    and JDBC driver are provided to connect users to Hive.

翻译:

  • Hive是一个数据仓库,能够读、写、管理大的数据集在分布式文件系统上使用SQL
Hive框架的产生对于RDBMS的从业者来说是很大的福音,不管是Spark还是Flink,他们推的都是批处理流处理一体,两种框架相通所以学习起来会比较方便。
拓展:Hive是由Facebook开源,用于解决海量结构化日志的数据统计问题,是基于日志来进行各种维度的统计分析;Hive是构建在Hadoop之上的数据仓库。

1、Hive中的数据是存放在hdfs上;
2、Hive底层的执行引擎有MapReduce/Spark/Tez,只需要修改一个参数即可;

(hive (ruozedata_hive)> set hive.execution.engine;
 hive.execution.engine=mr)

3、Hive的作业是提交到Yarn上运行的;
4、Hive提供了HiveQL的查询语言,这个语言和SQL类似,但是不完全相同。

面试题:HiveQL和SQL的关系?
  • 答:除了语法类似,其它完全不同
大数据“云化”:基于关系型的数据库迁移到大数据平台中去,原有的SQL都需要进行梳理,更换平台要考虑语法兼容性,理解业务逻辑,再使用HiveQL或者Spark SQL进行完成,这是一个很大的项目。

Hive适用于离线处理/批处理(一下子处理一个批次的数据),实时处理/流处理;
至此:HDFS上的数据:文本、压缩、列式存储,Hive就是使用sql来处理hadoop上的数据。

SQL on Hadoop:Hive/Presto/Impala/Spark SQL,如果sql语法兼容不是很好的话,就需要你进行自定义UDF函数。

Hive的优缺点:

优点:SQL(处理方便,受众面广)

缺点:Hive的底层执行引擎是MapReduce的话,它的执行性能必然是不高的。

2.3、Hive的架构

如下这块是Hive自动为我们完成的:

  • 一条SQL只是普通的不能再普通的字符串,它进入到Driver驱动程序,需要借助于SQL Parser(SQL解析器),把SQL的语法进行解析 --> Query Optimizer(查询优化器)–> Pyhsical Plan(逻辑执行计划)–> 如果语法不支持的话你需要自定义UDF函数 --> SerDes(序列化、反序列化)–> Execution(执行)。

  • 一个table,是属于哪个DB,table默认存放在HDFS上的路径/user/hive/warehouse,table的字段信息 --> 存储在MetaStore,这些信息需要让MapReduce知道;红色这个框中的Metastore是非常重要的,元数据默认是存放在derby和MySQL中的,derby一般不用,使用MySQL,此处的MySQL也不能使用单点,单点故障就会出现停止服务,生产上都是使用MySQL主备机制。

Hive的架构

对于上图的详细描述:

第一层是用户接口层:通过linux黑窗口、JDBC的方式

第二层是Driver驱动程序:

SQL解析:SQL --> AST(antlr抽象语法树)
查询优化:逻辑/物理执行计划
UDF/SerDes:
Execution:执行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值