1.什么是Hive

  • Hive是基于hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提空类SQL查询功能(HQL)
  • 其本质是将SQL转化为MapReduce的任务进行运算,底层由HDFS来提供数据的存储,hive可以理解成一个将SQL转换为MapReduce任务的工具

2.为什么要使用Hive

直接使用hadoop所面临的问题:

  • 人员学习成本太高
  • 项目周期要求太短
  • MapReduce实现复杂查询逻辑开发难度太大

为什么要使用Hive:

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

3.hive的特点:

  • 可扩展:Hive可以自由的扩展集群的规模,一般情况下不需要重启服务
  • 延展性:Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数
  • 容错:良好的容错性,节点出现问题SQL仍可以完成执行

4.hive的架构

架构图

Hive快速入门_hadoop

基本组成

  • 用户接口:包括CLI,JDBC/ODBC丶其中,CLI(command line interface)为shell命令行;JDBC/ODBC是hive的java实现,与传统的数据库JDBC类似;WebGUI是通过浏览器访问hive
  • 元数据存储:通常是存储在关系数据库如mysql/derby中,Hive将元数据存储在数据库中,hive中的元数据包括表名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等
  • 解释器丶编译器丶优化器丶执行器:完成HQL查询语句从词法分析,语法分析,编译,优化以及查询计划的生成,生成的查询计划存储在HDFS中,并在随后有MapReduce调用执行.

5.hive与hadoop之间的关系

  • Hive利用HDFS存储数据,利用MapReduce查询分析数据
    Hive快速入门_hive_02

6.Hive与传统数据库对比

  • Hive主要做海量数据的离线数据分析
    Hive快速入门_入门_03
  • 1.数据格式:Hive中没有定义专门的数据格式,数据格式可以由用户指定,用户数据格式需要指定三个属性:列分隔符(通常为空格,\t,\x001),行分隔符("\n")以及读取文件数据的方法(Hive中默认有三个文件格式TextFile,SequenceFile 以及 RCFile)
  • 2.Hive在加载数据的过程中,不需要从用户数据格式到hive定义的数据格式的转换
  • 3.Hive在加载的过程中==不会对数据本身进行任何修改,甚至不会对数据进行扫描.==而只是将数据内容复制或者移动到相应的HDFS目录中
  • 4.Hive中不支持对数据的改写和添加,所有的数据都是在加载的时候确定好的
  • 5.Hive在加载数据的过程中 不会对数据中心的某些key建立索引. hive要访问数据中满足条件的特定值时,需要暴力扫描整个数据,因此访问延迟较高,由于数据的访问延迟较高,决定了hive不适合在线数据查询
  • 6.Hive是建立在hadoop之上的,因此Hive的可扩展性是和Hadoop的可扩展性是一致的

总结:hive具有sql数据库的外表,但应用场景完全不同,hive只适合用来做批量数据统计分析

7.Hive的数据存储

  • 1、Hive中所有的数据都存储在 HDFS 中,没有专门的数据存储格式(可支持Text,SequenceFile,ParquetFile,ORC格式RCFILE等)
  • 2、只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符,Hive 就可以解析数据。
  • 3、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散列之后的多个文件

8.百度百科:

hive是基于Hadoop构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop分布式文件系统中的数据:可以将结构化的数据文件映射为一张数据库表,并提供完整的SQL查询功能;可以将SQL语句转换为MapReduce任务运行,通过自己的SQL查询分析需要的内容,这套SQL简称Hive SQL,使不熟悉mapreduce的用户可以很方便地利用SQL语言‘查询、汇总和分析数据。而mapreduce开发人员可以把自己写的mapper和reducer作为插件来支持hive做更复杂的数据分析。它与关系型数据库的SQL略有不同,但支持了绝大多数的语句如DDL、DML以及常见的聚合函数、连接查询、条件查询。它还提供了一系列的1:具进行数据提取转化加载,用来存储、查询和分析存储在Hadoop中的大规模数据集,并支持UDF(User-Defined Function)、UDAF(User-Defnes AggregateFunction)和USTF(User-Defined Table-Generating Function),也可以实现对map和reduce函数的定制,为数据操作提供了良好的伸缩性和可扩展性。

hive不适合用于联机(online)事务处理,也不提供实时查询功能。它最适合应用在基于大量不可变数据的批处理作业。hive的特点包括:可伸缩(在Hadoop的集群上动态添加设备)、可扩展、容错、输入格式的松散耦合。.