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

转载 2016年05月31日 12:42:24
问题导读
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数据抽象结构图
 
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目录中,这样才能将元数据存储在对应的数据库中。


转载自:让你彻底明白hive数据存储各种模式
http://www.aboutyun.com/thread-7414-1-1.html
(出处: about云开发)


让你真正明白什么是hive

导读: 对于一个事物的认识,存在几种情况 1.没有接触,不知道这个事物是什么,所以不会产生任何问题。 2.接触了,但是不知道他是什么,反正我每天都在用。 3.有一定的了解,不够透彻。 那么h...
  • JIAOSHOUJIE
  • JIAOSHOUJIE
  • 2014年07月12日 11:22
  • 1041

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

问题导读 1.hive数据分为那两种类型? 2.什么表数据? 3.什么是元数据? 4.Hive表里面导入数据的本质什么? 5.表、分区、桶之间之间的关系是什么? 6.外部表和表的区别是什么...
  • yanhan_huang
  • yanhan_huang
  • 2015年07月08日 11:34
  • 1188

彻底理解窗口,视口,以及SDI各种映射模式

最近在学习《windows程序设计》k
  • han7741
  • han7741
  • 2014年11月15日 22:26
  • 643

hive数据存储各种模式

Hive的数据分为表数据和元数据,表数据是Hive中表格(table)具有的数据;而元数据是用来存储表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。下面分别来介绍。  ...
  • tianbianlan
  • tianbianlan
  • 2015年07月09日 12:48
  • 426

红黑树----第四篇:一步一图一代码,一定要让你真正彻底明白红黑树 --- 很好

一步一图一代码,一定要让你真正彻底明白红黑树   作者:July   二零一一年一月九日 ----------------------------- 本文参考: I、  The Art of Com...
  • JK198310
  • JK198310
  • 2013年08月12日 16:05
  • 1887

Hive数据存储的各种模式

Hive的数据分为表数据和元数据,表数据是Hive中表格(table)具有的数据;而元数据是用来存储表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。下面分别来介绍。一、...
  • silentwolfyh
  • silentwolfyh
  • 2016年03月22日 22:04
  • 495

两分钟彻底让你明白Android Activity生命周期

大家好,今天给大家详解一下Android中Activity的生命周期,我在前面也曾经讲过这方面的内容,但是像网上大多数文章一样,基本都是翻译Android API,过于笼统,相信大家看了,会有一点点的...
  • liuxiyangyang
  • liuxiyangyang
  • 2013年09月02日 17:16
  • 773

两分钟让你彻底明白Activity生命周期

大家好,今天给大家详解一下Android中Activity的生命周期,我在前面也曾经讲过这方面的内容,但是像网上大多数文章一样,基本都是翻译Android API,过于笼统,相信大家看了,会有一点点的...
  • berber78
  • berber78
  • 2012年02月17日 12:25
  • 886

让你彻底明白this的指向问题

关于this指向的问题,想必困扰了很多初学JavaScript的同学,一会指向这个一会指向那个,让初学者一脸懵逼。今天我们就来聊聊js面向对象里this的指向问题,让初学者看完对this有个大概的了解...
  • Yu_kris
  • Yu_kris
  • 2017年08月09日 08:51
  • 148

【三分钟让你彻底明白LinearLayout线性布局】

线性布局是我们在android开发中经常会使用的布局控件,今天我们一起来总结一下在线性布局使用的过程中的注意事项。我只是搬运工,知识大多来自于网络。 最常用的属性是: ...
  • bear_huangzhen
  • bear_huangzhen
  • 2017年05月16日 11:56
  • 190
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:让你彻底明白hive数据存储各种模式
举报原因:
原因补充:

(最多只允许输入30个字)