`

Hive的数据存储模式

 
阅读更多

Hive的数据分为表数据和元数据,表数据是Hive中表格(table)具有的数据;而元数据是用来存储表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。下面分别来介绍。

  一、Hive的数据存储
  在《Hive到底是什么》博文中我们提到Hive是基于Hadoop分布式文件系统的,它的数据存储在Hadoop分布式文件系统中。Hive本身是没有专门的数据存储格式,也没有为数据建立索引,只需要在创建表的时候告诉Hive数据中的列分隔符和行分隔符,Hive就可以解析数据。所以往Hive表里面导入数据只是简单的将数据移动到表所在的目录中(如果数据是在HDFS上;但如果数据是在本地文件系统中,那么是将数据复制到表所在的目录中)。
  Hive中主要包含以下几种数据模型:Table(表),External Table(外部表),Partition(分区),Bucket(桶)(本博客会专门写几篇博文来介绍分区和桶)。
  1、表:Hive中的表和关系型数据库中的表在概念上很类似,每个表在HDFS中都有相应的目录用来存储表的数据,这个目录可以通过${HIVE_HOME}/conf/hive-site.xml配置文件中的hive.metastore.warehouse.dir属性来配置,这个属性默认的值是/user/hive/warehouse(这个目录在HDFS上),我们可以根据实际的情况来修改这个配置。如果我有一个表wyp,那么在HDFS中会创建/user/hive/warehouse/wyp目录(这里假定hive.metastore.warehouse.dir配置为/user/hive/warehouse);wyp表所有的数据都存放在这个目录中。这个例外是外部表。
  2、外部表:Hive中的外部表和表很类似,但是其数据不是放在自己表所属的目录中,而是存放到别处,这样的好处是如果你要删除这个外部表,该外部表所指向的数据是不会被删除的,它只会删除外部表对应的元数据;而如果你要删除表,该表对应的所有数据包括元数据都会被删除。
  3、分区:在Hive中,表的每一个分区对应表下的相应目录,所有分区的数据都是存储在对应的目录中。比如wyp表有dt和city两个分区,则对应dt=20131218,city=BJ对应表的目录为/user/hive/warehouse/dt=20131218/city=BJ,所有属于这个分区的数据都存放在这个目录中。
  4、桶:对指定的列计算其hash,根据hash值切分数据,目的是为了并行,每一个桶对应一个文件(注意和分区的区别)。比如将wyp表id列分散至16个桶中,首先对id列的值计算hash,对应hash值为0和16的数据存储的HDFS目录为:/user/hive/warehouse/wyp/part-00000;而hash值为2的数据存储的HDFS 目录为:/user/hive/warehouse/wyp/part-00002。
  来看下Hive数据抽象结构图

Data Abstractions in Hive

Data Abstractions in Hive


从上图可以看出,表是在数据库下面,而表里面又要分区、桶、倾斜的数据和正常的数据等;分区下面也是可以建立桶的。
  二、Hive的元数据
  Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。 由于Hive的元数据需要不断的更新、修改,而HDFS系统中的文件是多读少改的,这显然不能将Hive的元数据存储在HDFS中。目前Hive将元数据存储在数据库中,如Mysql、Derby中。我们可以通过以下的配置来修改Hive元数据的存储方式

 

01 <property>
02   <name>javax.jdo.option.ConnectionURL</name>
03   <value>jdbc:mysql://localhost:3306/hive_hdp?characterEncoding=UTF-8
04                     &createDatabaseIfNotExist=true</value>
05   <description>JDBC connect string for a JDBC metastore</description>
06 </property>
07   
08 <property>
09   <name>javax.jdo.option.ConnectionDriverName</name>
10   <value>com.mysql.jdbc.Driver</value>
11   <description>Driver class name for a JDBC metastore</description>
12 </property>
13   
14 <property>
15   <name>javax.jdo.option.ConnectionUserName</name>
16   <value>root</value>
17   <description>username to use against metastore database</description>
18 </property>
19   
20 <property>
21   <name>javax.jdo.option.ConnectionPassword</name>
22   <value>123456</value>
23   <description>password to use against metastore database</description>
24 </property>

  当然,你还需要将相应数据库的启动复制到${HIVE_HOME}/lib目录中,这样才能将元数据存储在对应的数据库中。

本博客文章除特别声明,全部都是原创!
尊重原创,转载请注明: 转载自过往记忆(http://www.iteblog.com/)
本文链接: 【Hive的数据存储模式】(http://www.iteblog.com/archives/866)

分享到:
评论

相关推荐

    hive数据存储模式

    ### Hive数据存储模式详解 #### 一、Hive的数据存储 Hive作为一款基于Hadoop的数据仓库工具,其核心功能之一就是提供了一种高效的管理大数据的方式。Hive的数据分为两大类:**表数据**和**元数据**。 - **表数据*...

    Hive优化案例、Hive数据处理模式、Hive常见问题与优化、Hive实践

    Hive优化案例、Hive数据处理模式、Hive常见问题与优化、Hive实践 Hive是一种基于Hadoop的数据仓库工具,用于对大规模数据进行处理和分析。在大数据时代,Hive的应用非常广泛,本文将从Hive优化案例、Hive数据处理...

    大数据 hive 实战数据

    在Hive中,我们同样会创建一个`user`表,利用HQL(Hive Query Language)进行数据清洗、聚合和关联操作,比如找出活跃用户的特征,或者分析用户行为模式。 Hadoop是大数据处理的基础框架,它提供了分布式存储(HDFS...

    第7讲Hive数据仓库.pptx

    Hive 的体系结构包括用户接口、元数据存储、执行引擎和HDFS存储。用户接口主要包括命令行界面(CLI)、客户端(Client)和Web界面(WUI)。元数据存储通常在MySQL或Derby这样的RDBMS中,包含了关于表的定义、列、...

    项目实战——Spark将Hive表的数据写入ElasticSearch(Java版本)

    1. **Hive数据源**: Hive是一个基于Hadoop的数据仓库工具,它允许用户使用SQL语法进行数据查询和分析。在本项目中,我们首先需要从Hive表中提取数据。Hive提供了丰富的接口供外部应用访问,包括Hive JDBC和Hive ...

    详细调研hivemetastore管理机制.zip

    Hive数据存储模式是理解Metastore工作原理的基础。Hive支持多种存储模式,如TEXTFILE、SEQUENCEFILE、PARQUET等。每种模式对应不同的数据存储格式,如TEXTFILE是最基本的文本格式,而PARQUET则是优化过的列式存储...

    大数据Hive测试数据uaction.rar

    1. **数据加载**:首先,我们需要将“uaction.dat”文件上传到HDFS(Hadoop Distributed File System),这是Hive的数据存储层。然后,使用`CREATE TABLE`语句定义Hive表结构,指定字段名、字段类型以及分隔符。 2....

    hive实验报告.docx

    - 使用DDL创建内部表和外部表,内部表的数据存储在HDFS中,由Hive管理;外部表的数据存储在用户指定位置,不随表删除而删除。 - DML操作包括查看表、查看表结构,以及插入、更新和删除数据。 - 分区表的创建有助...

    hive数据集.zip

    通常,这样的数据集可能包含CSV、JSON、Parquet或ORC格式的文件,这些格式都是Hive支持的数据存储格式。Hive会将这些文件组织成分区表或非分区表,用户可以通过HQL进行查询和分析。 在实际应用中,这些数据集可能...

    hadoop生态圈hive数据仓库的部署详细流程

    5. 由于 Hive 需要将元数据存储到 MySQL 中,因此需要拷贝 mysql-connector-java-5.1.26-bin.jar 到 Hive 的 lib 目录下。 6. 配置 Hive,创建 hive-site.xml 文件,并将元数据存储到 MySQL 中。 Hive 的安装部署...

    华为大数据认证: Hive分布式数据仓库.pptx

    Hive与传统数据仓库相比,具有存储HDFS、理论上有无限拓展的可能、执行引擎有MR/Tez/Spark多种引擎可供选择、使用方式使用HQL(类似SQL)、灵活性元数据存储独立于数据存储之外等特点。 Hive的优点包括:HiveServer...

    hive sql + left join 数据缺失

    在大数据处理场景中,Hive 是一种广泛使用的工具,用于对存储在 Hadoop 文件系统中的数据进行数据汇总、查询和分析。随着Hive版本的不断更新,部分用户在升级至Hive 3之后遇到了数据处理中的一个常见问题——在执行...

    Hive安装指南,Hive 嵌入模式安装指南

    hive-site.xml 文件用于配置 Hive 的元数据存储信息,包括数据库连接 URL、驱动程序名称、元数据存储目录等信息。 知识点 5: Derby 数据库 Derby 数据库是一个开源的关系数据库管理系统,Hive 使用 Derby 数据库来...

    hbase与hive数据同步共4页.pdf.zip

    HBase是Apache的一个分布式、可扩展的NoSQL数据库,主要处理大规模的数据存储;而Hive则是一个基于Hadoop的数据仓库工具,用于数据ETL(提取、转换、加载)以及查询和分析。两者在大数据处理场景中常常结合使用,以...

    hive常用的开发规范

    - **HDFS 存放位置**:表的数据文件应存储在 `/user/hive/warehouse/模式名.db/表名/分区名/[子分区名]`。例如,`/user/hive/warehouse/ods.db/dwd.db/dwa.db/dwf.db/dwa_s_d_use_mb_voice_comm_d/month=201405/day...

    工业大数据分析-HIVE输入与输出教学讲义.docx

    首先,选择“数据管理”中的“数据权限”功能,然后在“组织机构”中选择一个组织机构,在数据源中选择“HIVE数据源”,然后勾选“允许访问整个数据源”,将HIVE数据源筛选到“已选区”,单击“保存”,完成对数据源...

    hive测试题(包含万级测试数据文件)

    使用这些文件,学习者可以实践如何在Hive中创建外部表,加载数据,执行SQL查询,进行数据清洗,分析用户评分模式,或者探索电影偏好等。这可能涉及到如JOIN操作、GROUP BY语句、聚合函数(如COUNT、SUM、AVG等)、...

    大数据 虚拟机 Linux VM复习题库:题库包括了60题选择题、10题填空题、10题判断题、2题简答题,助你度过期末复习

    - **远程模式**:元数据存储在远程的MetaStoreServer上,通过Thrift协议进行访问,适合分布式环境。 7. **Hive与Impala的对比**: Hive适合长时间批处理,Impala适合实时查询;两者共享相同元数据,但Impala内存...

Global site tag (gtag.js) - Google Analytics