`
wbj0110
  • 浏览: 1602610 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

让你彻底明白hive数据存储各种模式

阅读更多

1.hive数据分为那两种类型?
2.什么表数据?
3.什么是元数据?
4.Hive表里面导入数据的本质什么?
5.表、分区、桶之间之间的关系是什么?
6.外部表和表的区别是什么?




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数据抽象结构图

<ignore_js_op style="word-wrap: break-word; color: rgb(68, 68, 68); font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px;"> 

Data Abstractions in Hive



从上图可以看出,表是在数据库下面,而表里面又要分区、桶、倾斜的数据和正常的数据等;分区下面也是可以建立桶的。

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

  1. <property>
  2.   <name>javax.jdo.option.ConnectionURL</name>
  3.   <value>jdbc:mysql://localhost:3306/hive_hdp?characterEncoding=UTF-8
  4.                     &createDatabaseIfNotExist=true</value>
  5.   <description>JDBC connect string for a JDBC metastore</description>
  6. </property>
  7. <property>
  8.   <name>javax.jdo.option.ConnectionDriverName</name>
  9.   <value>com.mysql.jdbc.Driver</value>
  10.   <description>Driver class name for a JDBC metastore</description>
  11. </property>
  12. <property>
  13.   <name>javax.jdo.option.ConnectionUserName</name>
  14.   <value>root</value>
  15.   <description>username to use against metastore database</description>
  16. </property>
  17. <property>
  18.   <name>javax.jdo.option.ConnectionPassword</name>
  19.   <value>123456</value>
  20.   <description>password to use against metastore database</description>
  21. </property>
复制代码


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

http://www.aboutyun.com/forum.php?mod=viewthread&tid=7414

 

 

分享到:
评论

相关推荐

    hive数据存储模式

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

    Hive的数据存储模式

    Hive的数据存储模式Hive的数据存储模式Hive的数据存储模式Hive的数据存储模式

    《Hive数据仓库案例教程》教学课件 第5章 Hive数据操作.pdf

    《Hive数据仓库案例教程》教学课件 第5章 Hive数据操作.pdf《Hive数据仓库案例教程》教学课件 第5章 Hive数据操作.pdf《Hive数据仓库案例教程》教学课件 第5章 Hive数据操作.pdf《Hive数据仓库案例教程》教学课件 第...

    《Hive数据仓库案例教程》教学大纲.pdf

    8. **Hive数据压缩**:讨论Hive如何进行数据压缩,提高存储效率和查询性能,理解各种压缩算法在Hive中的应用。 9. **Hive优化**:讲解如何优化Hive查询性能,包括表设计优化、查询语句优化和资源管理优化,以提高大...

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

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

    Hive数据仓库之垃圾分类数据分析系统

    (1)Flume数据采集,HDFS数据储存 (2)hive数据仓库分层设计,包含ODS、DWD、ADS层 (3)sqoop数据迁移,完成HIve与MySQL数据库中的数据交互 (4)Echarts搭建动态可视化大屏 (5)SpringBoot搭建可视化后台系统,...

    大数据 hive 实战数据

    让我们深入探讨一下这两个部分以及与Hive、大数据、Hadoop和数据仓库相关的知识点。 首先,`video`数据可能包含了关于视频的各种信息,如视频ID、视频标题、时长、分类、上传日期、播放次数、评论数量等。这些数据...

    林子雨Hive数据集下载

    林子雨Hive数据集下载

    Hive metastore 使用达梦数据库存储元数据

    《Hive metastore 使用达梦数据库存储元数据详解》 在大数据处理领域,Hive作为一个分布式数据仓库工具,被广泛用于存储和管理大规模结构化数据。Hive的元数据是其核心组成部分,它包含了表、分区、列等信息,使得...

    项目实战——钉钉报警校验ElasticSearch和Hive数据仓库内的数据质量(Java版本)

    因为你不知道将Hive的数据导入到了ElasticSearch后,数据量是否准确,所以需要钉钉报警校验ElasticSearch和Hive数据仓库内的数据质量,注意,这个项目打包后,最好另起一个进程调用,并且开始时间为文章1或者2最大...

    ES-HIVE数据互通

    ### ES-HIVE数据互通知识点详解 #### 环境配置 在进行Elasticsearch与Hive的数据互通之前,首先需要确保环境配置正确无误。本文档提到的环境为实验性的单节点集群,具体配置如下: - **操作系统**:Vagrant + ...

    基于 Hive的数据分析案例 -MM聊天软件数据分析

    基于 Hive 的数据分析案例 -MM 聊天软件数据分析 本资源摘要信息主要介绍了基于 Hive 的数据分析案例,通过对 MM 聊天软件的数据进行统计分析,了解用户行为,实现精准的用户画像,并为公司的发展决策提供精确的...

    datax数据从hive导入mysql数据缺失解决

    Hive 通常用于存储海量数据并进行批处理分析,而 MySQL 则用于存储结构化数据并提供快速查询服务。为了实现两者之间的数据交换,DataX 作为一种开源的数据同步工具被广泛应用。 #### 问题描述 在使用 DataX 将数据...

    第7讲Hive数据仓库.pptx

    Hive的主要设计目标是让具备 SQL 技能的分析师能够方便地查询和分析存储在Hadoop中的大规模数据,而无需深入理解 MapReduce。它支持类似于 SQL 的查询语言,称为HiveQL,允许用户进行数据提取、转换和加载(ETL)...

    Hive几种数据导入方式

    ### Hive 数据导入方式详解 Hive 是一种广泛应用于大数据处理领域的工具,它为用户提供了类 SQL 的查询语言 HiveQL,使用户能够更加便捷地进行数据提取、转换与加载(ETL)。本文主要针对 Ambari 搭建的 Hadoop ...

    hive元数据生成建表语句

    在大数据处理领域,Hive是一个基于Hadoop的数据仓库工具,它允许用户使用SQL(HQL,Hive Query Language)查询和管理存储在Hadoop文件系统(HDFS)中的大规模数据集。Hive元数据是Hive操作的核心部分,它包含了...

    Hive数据文件以及CLI操作命令

    在大数据处理领域,Hive是一个非常重要的工具,它提供了一个基于Hadoop的数据仓库框架,用于存储、查询和分析大规模数据集。本资料包包含了两个关键文件:2013_12.csv 和 Hive指令样例.txt,分别用于理解Hive中的...

    hive数据加载导出查询

    在使用 Hive 进行数据分析之前,首先需要创建一张表来存储数据。以下是一段创建分区表的 SQL 语句示例: ```sql CREATE TABLE db_0309.emp ( empno INT, ename STRING, job STRING, mgr INT, hiredate STRING,...

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

    在本项目实战中,我们将探讨如何使用Java编程语言,结合Spark和Hive,将Hive中的数据高效地导入到ElasticSearch(ES)中,并利用ES的别名机制实现数据更新的平滑过渡。以下是对这个流程的详细解析: 1. **Hive数据...

Global site tag (gtag.js) - Google Analytics