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
从上图可以看出,表是在数据库下面,而表里面又要分区、桶、倾斜的数据和正常的数据等;分区下面也是可以建立桶的。
二、Hive的元数据
Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。 由于Hive的元数据需要不断的更新、修改,而HDFS系统中的文件是多读少改的,这显然不能将Hive的元数据存储在HDFS中。目前Hive将元数据存储在数据库中,如Mysql、Derby中。我们可以通过以下的配置来修改Hive元数据的存储方式
02 |
<name>javax.jdo.option.ConnectionURL</name>
|
04 |
&createDatabaseIfNotExist= true </value>
|
05 |
<description>JDBC connect string for a JDBC metastore</description>
|
09 |
<name>javax.jdo.option.ConnectionDriverName</name>
|
10 |
<value>com.mysql.jdbc.Driver</value>
|
11 |
<description>Driver class name for a JDBC metastore</description>
|
15 |
<name>javax.jdo.option.ConnectionUserName</name>
|
17 |
<description>username to use against metastore database</description>
|
21 |
<name>javax.jdo.option.ConnectionPassword</name>
|
23 |
<description>password to use against metastore database</description>
|
当然,你还需要将相应数据库的启动复制到${HIVE_HOME}/lib目录中,这样才能将元数据存储在对应的数据库中。
本博客文章除特别声明,全部都是原创!
尊重原创,转载请注明: 转载自过往记忆(http://www.iteblog.com/)
本文链接: 【Hive的数据存储模式】(http://www.iteblog.com/archives/866)
分享到:
相关推荐
### Hive数据存储模式详解 #### 一、Hive的数据存储 Hive作为一款基于Hadoop的数据仓库工具,其核心功能之一就是提供了一种高效的管理大数据的方式。Hive的数据分为两大类:**表数据**和**元数据**。 - **表数据*...
Hive优化案例、Hive数据处理模式、Hive常见问题与优化、Hive实践 Hive是一种基于Hadoop的数据仓库工具,用于对大规模数据进行处理和分析。在大数据时代,Hive的应用非常广泛,本文将从Hive优化案例、Hive数据处理...
在Hive中,我们同样会创建一个`user`表,利用HQL(Hive Query Language)进行数据清洗、聚合和关联操作,比如找出活跃用户的特征,或者分析用户行为模式。 Hadoop是大数据处理的基础框架,它提供了分布式存储(HDFS...
Hive 的体系结构包括用户接口、元数据存储、执行引擎和HDFS存储。用户接口主要包括命令行界面(CLI)、客户端(Client)和Web界面(WUI)。元数据存储通常在MySQL或Derby这样的RDBMS中,包含了关于表的定义、列、...
1. **Hive数据源**: Hive是一个基于Hadoop的数据仓库工具,它允许用户使用SQL语法进行数据查询和分析。在本项目中,我们首先需要从Hive表中提取数据。Hive提供了丰富的接口供外部应用访问,包括Hive JDBC和Hive ...
Hive数据存储模式是理解Metastore工作原理的基础。Hive支持多种存储模式,如TEXTFILE、SEQUENCEFILE、PARQUET等。每种模式对应不同的数据存储格式,如TEXTFILE是最基本的文本格式,而PARQUET则是优化过的列式存储...
1. **数据加载**:首先,我们需要将“uaction.dat”文件上传到HDFS(Hadoop Distributed File System),这是Hive的数据存储层。然后,使用`CREATE TABLE`语句定义Hive表结构,指定字段名、字段类型以及分隔符。 2....
- 使用DDL创建内部表和外部表,内部表的数据存储在HDFS中,由Hive管理;外部表的数据存储在用户指定位置,不随表删除而删除。 - DML操作包括查看表、查看表结构,以及插入、更新和删除数据。 - 分区表的创建有助...
通常,这样的数据集可能包含CSV、JSON、Parquet或ORC格式的文件,这些格式都是Hive支持的数据存储格式。Hive会将这些文件组织成分区表或非分区表,用户可以通过HQL进行查询和分析。 在实际应用中,这些数据集可能...
5. 由于 Hive 需要将元数据存储到 MySQL 中,因此需要拷贝 mysql-connector-java-5.1.26-bin.jar 到 Hive 的 lib 目录下。 6. 配置 Hive,创建 hive-site.xml 文件,并将元数据存储到 MySQL 中。 Hive 的安装部署...
Hive与传统数据仓库相比,具有存储HDFS、理论上有无限拓展的可能、执行引擎有MR/Tez/Spark多种引擎可供选择、使用方式使用HQL(类似SQL)、灵活性元数据存储独立于数据存储之外等特点。 Hive的优点包括:HiveServer...
在大数据处理场景中,Hive 是一种广泛使用的工具,用于对存储在 Hadoop 文件系统中的数据进行数据汇总、查询和分析。随着Hive版本的不断更新,部分用户在升级至Hive 3之后遇到了数据处理中的一个常见问题——在执行...
hive-site.xml 文件用于配置 Hive 的元数据存储信息,包括数据库连接 URL、驱动程序名称、元数据存储目录等信息。 知识点 5: Derby 数据库 Derby 数据库是一个开源的关系数据库管理系统,Hive 使用 Derby 数据库来...
HBase是Apache的一个分布式、可扩展的NoSQL数据库,主要处理大规模的数据存储;而Hive则是一个基于Hadoop的数据仓库工具,用于数据ETL(提取、转换、加载)以及查询和分析。两者在大数据处理场景中常常结合使用,以...
- **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数据源”,然后勾选“允许访问整个数据源”,将HIVE数据源筛选到“已选区”,单击“保存”,完成对数据源...
使用这些文件,学习者可以实践如何在Hive中创建外部表,加载数据,执行SQL查询,进行数据清洗,分析用户评分模式,或者探索电影偏好等。这可能涉及到如JOIN操作、GROUP BY语句、聚合函数(如COUNT、SUM、AVG等)、...
- **远程模式**:元数据存储在远程的MetaStoreServer上,通过Thrift协议进行访问,适合分布式环境。 7. **Hive与Impala的对比**: Hive适合长时间批处理,Impala适合实时查询;两者共享相同元数据,但Impala内存...