1.hive是什么?

   hive是建立在Hadoop之上的数据仓库架构,

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

   它提供了类sql语言,可以让熟悉sql的开发人员查询数据。

   同时这个语言也允许熟悉MapReduce的开发人员自定义Mapper和Reducer来处理内建的Mapper和Reducer完成复杂的分析工作。

2.hive的缺点?

   hive是基于hadoop的,hadoop是分布式系统,不能保证低延迟,因此hive的查询也不能保证低延迟,

3.hive设计的目标?

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

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

   可伸缩,及输入格式松耦合,

4.hive的体系结构

   主要分为以下几个部分:

   4.1用户接口:包括CLI CLIENT WEBUI

   4.2中间件:包括thrift和JDBC/ODBC的服务端,用于整合hive和其他程序

   4.3元数据:通常是存储在关系数据库如 mysql, derby 中的系统参数

   4.4底层驱动:包括HiveQL解释器、编译器、优化器、执行器(引擎)

   4.5hadoop :用 HDFS 进行存储,利用 MapReduce 进行计算。(大部分查询会由MapReduce完成,包括*的查询不会生成MapReduce任务)

5.hive整个创建表的过程

   5.1用户提交hive语句,对其进行解析,分解为表,分区,字段等hive对象,

   5.2根据解析到的信息构建对应的表,分区,字段对象,从SEQUENCE_TABLE中获取构建对象的最新ID,与构建对象信息一起写到元数据表中,成功后将SEQUENCE_TABLE中对应的ID+5.

6.hive的数据存储

   6.1hive中没有专门的数据存储的格式,也没有为数据建立索引,用户可以非常自由的组织hive中的表,只需要在创建表的时候制定表的行分隔符和列分隔符,hive就可以解析数据。

   6.2hive中的数据都存储在HDFS中,hive中包含以下数据模型:

           Table,hdfs中的一个目录

           External Table,指向的是hdfs中已经存在的目录,

           Partition,分区就是表的目录下的一个子目录

           Bucket,如果有分区,桶就是分区下的一个单位,如果没有分区,桶就是表下的单位,桶一般是文件的形式。(对制定列进行hash计算,根据hash进行切分数据,目的是为了并行)

   6.3

· Table 的创建过程和数据加载过程(这两个过程可以在同一个语句中完成),在加载数据的过程中,实际数据会被移动到数据仓库目录中;之后对数据对访问将会直接在数据仓库目录中完成。删除表时,表中的数据和元数据将会被同时删除。

· External Table 只有一个过程,加载数据和创建表同时完成(CREATE EXTERNAL TABLE ……LOCATION),实际数据是存储在 LOCATION 后面指定的 HDFS 路径中,并不会移动到数据仓库目录中。当删除一个 External Table 时,仅删除


-----------------------------

7.hive和RDBMS的区别:

   7.1数据更新:

       由于hive是针对数据仓库设计的,而数据仓库的数据是读多写少的,因此hive不支持对数据的改写和添加,所有的数据都是在加载的时候确定的。



8.语言能力:

   

   hive查询语言提供基本的类sql操作,这些操作基于tablepartition,包括:
   1. 使用where语句过滤制定行
   2. 使用select查找指定列
   3. join两张table
   4. group by
   5. 一个表的查询结果存入另一张表
   6. 将一个表的内容存入本地目录
   7. 将查询结果存储到hdfs
   8. 管理tablepartition(creatdropalert)
   9. 在查询中嵌入map-reduce程序