Hive基础

*爱你&永不变心* 提交于 2020-01-10 03:21:10

概述

1.什么是Hive

Hive是建立在Hadoop上的数据仓库基础架构。可以将结构化的数据映射为一张数据库表,并提供类SQL查询功能。

详解

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行。

它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。

架构

Hive提供了一个SQL命令的操作接口,允许用户可以使用类似SQL的Hive的Query Language执行一些离线的SQL分析。但是Hive和传统的数据库不同,Hive只是构建在Hadoop的MapReduce之上的SQL解析工具,并不参与数据的管理和存储,Hive中所有的数据都是在运行任务的时候才会真正的加载。

具体流程为:
1.Hive读取用户的SQL脚本。
2.到数据库中(Mysql)中查询所映射的元数据信息。(Mysql主要负责存储Hive逻辑表到HDFS物理文件的映射信息,因此,Hive在做计算之前,需要查询Mysql生成逻辑计划,然后生成MapReduce可以执行的物理计划)
3.生成SQL的逻辑执行计划。
4.由MapReduce执行物理计划。
5.读取MapReduce的结构。
6.将结构返回用户。
第2到4步就体现了Hive的本质,用来将SQL语句转换为MapReduce执行。

2.为什么使用Hive

  • 直接使用hadoop所面临的问题
    人员学习成本太高、项目周期要求太短、MapReduce实现复杂查询逻辑开发难度太大。

  • 为什么要使用Hive
    操作接口采用类SQL语法,提供快速开发的能力。
    避免了去写MapReduce,减少开发人员的学习成本。
    扩展功能很方便。

3.Hive和关系型数据库的区别

  • Hive和关系数据库存储文件的系统不同,Hive使用的是Hadoop的HDFS,关系数据库则是服务器本地的文件系统。
  • Hive使用的计算模型是MapReduce,而关系数据库则是自己设计的计算模型。
  • 关系数据库都是为OLTP进行设计的,而Hive则是为海量数据做数据挖掘设计的,实时性很差,实时性的区别导致Hive的应用场景和关系数据库有很大的不同。
  • Hive很容易扩展自己的存储能力和计算能力,这个是继承Hadoop的特性,而关系数据库在这个方面要比Hive差很多。

4.Hive的特点

  • 可扩展
    Hive可以自由的扩展集群的规模,一般情况下不需要重启服务。

  • 延展性
    Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。

  • 容错
    良好的容错性,节点出现问题SQL仍可完成执行。

5.Hive与Hadoop的关系

Hive利用HDFS存储数据,利用MapReduce查询数据

6.Hive的数据存储

  • Hive中所有的数据都存储在 HDFS 中,没有专门的数据存储格式(可支持Text,SequenceFile,ParquetFile,RCFILE等)
  • 只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符,Hive 就可以解析数据。
  • Hive 中包含以下数据模型:DB、Table,External Table,Partition,Bucket。
    db:在hdfs中表现为${hive.metastore.warehouse.dir}目录下一个文件夹
    table:在hdfs中表现所属db目录下一个文件夹
    external table:与table类似,不过其数据存放位置可以在任意指定路径
    partition:在hdfs中表现为table目录下的子目录
    bucket:在hdfs中表现为同一个表目录下根据hash散列之后的多个文件

7.Hive表的数据类型

Hive支持原始数据类型和复杂类型,原始类型包括数值型,Boolean,字符串,时间戳。复杂类型包括数组,map,struct。下面是Hive数据类型的一个总结:
原始类型
在这里插入图片描述
复杂类型
在这里插入图片描述

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!