Hive

  1. Hive是建立在Hadoop上的数据仓库基础架构,可以用来进行数据提取转化加载(ETL)。Hive定义了简单的类SQL查询语言。Hive没有专门的数据格式。

Hive体系结构

主要包括以下几个部分:

  • 用户接口:CLI、Client、WUI,其中最常用的是CLI,CLI启动的时候,会同时生成一个Hive副本。Client是Hive的客户端,在连接至Hive Server时需要指出Hive Server所在的节点。WUI是通过浏览器访问Hive。
  • 元数据存储,通常是存储在关系型数据库中,如MySQL、Derby。Hive的元数据包括表的名字、表的列和分区及其属性,表的属性(是否为外部表),表的数据所在目录等。Hive将元数据存储在RDBMS中,有三种模式连接到数据库,如下:

    • Single User Mode:此模式连接到一个In-memory的数据库Derby,一般用于Unit
    • Multi User Mode:通过网络连接到一个数据库中,此模式经常使用。
    • Remote Server Mode:用于非Java客户端访问元数据库,在服务器端启动一个MetaStoreServer,客户端利用Thrift协议通过MetaStoreServer访问元数据库
  • 解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化及查询计划的生成,生成的计划存储在HDFS,并由MapReduce调用执行。Hive的数据存储在HDFS种1,大部分的查询有MapReduce完成(包含 * 的查询不会生成MapReduce任务)
  • Hive 的数据存储:Hive没有专门的数据存储,也没有为数据建立索引,用户自由的组织Hive中的表,只需要在创建表的时候定义列分隔符和行分隔符,Hive就可以解析数据了。

    • Hive中所有的数据都存储在HDFS中,Hive包含数据模型有Table,External Table,Partition,Bucket。

      • Database:HDFS中表现为${hive.metastore.warehouse.dir}目录下的一个文件夹
      • Talbe:类似于关系型数据库中Table,而Hive中的Table都有一个相应的目录存储数据,在HDFS中表现所属database下的一个文件夹
      • External Table:与table类似,加载数据和创建表同时完成(create external table …… location),可以自定义数据存放在HDFS中的路径(自定义的路径在location后面)。
      • Partition:在HDFS下表现为Table目录下的子目录
      • Bucket:在HDFS中表现为同一个表目录或者分区目录下根据某个字段的hash散列后的多个文件,根据hash值切分数据,目的是为了并行每一个bucket对应一个文件
      • view:与传统数据库类似,只读,基于基本表创建
  • Hive的元数据存储在RDBMS中,除了元数据外的其他数据都基于HDFS存储。默认情况下,Hive元数据保存在内嵌的Derby数据库中,只允许一个会话连接,只适用于简单测试。在生产环境应使用mysql数据库作为元数据库。
  • Hive中的表分为:内部表、外部表、分区表和bucket表。

    • 内部表与外部表区别:

      • 删除内部表,删除表元数据和数据
      • 删除外部表,删除元数据,不删除数据
    • 内部表

命令

查询表分区 show partitions table_name;

<input autocomplete=”off” name=”keyword” id=”keyword_searchForm” type=”text” class=”search_input” value=”” ‘=””>

<” placeholder=”请输入要搜索的信息” readonly onfocus=”this.removeAttribute(‘readonly’);”/>

<” placeholder=”请输入要搜索的信息” readonly onfocus=”this.removeAttribute(‘readonly’);”/>