Hive元数据

  • Post author:
  • Post category:其他



HIVE

元数据库

Hive 将元数据存储在 RDBMS 中,一般常用的有MYSQL和DERBY。


  1. DERBY

启动HIVE的元数据库

进入到hive的安装目录

Eg:

1、启动derby数据库

/home/admin/caona/hive/build/dist/

运行startNetworkServer -h 0.0.0.0

2、连接Derby数据库进行测试

查看/home/admin/caona/hive/build/dist/conf/hive-default.xml。

找到<property>

<name>javax.jdo.option.ConnectionURL</name>

<value>jdbc:derby://hadoop1:1527/metastore_db;create=true</value>

<description>JDBC connect string for a JDBC metastore</description>

</property>

进入derby安装目录

/home/admin/caona/hive/build/dist/db-derby-10.4.1.3-bin/bin

输入./ij

Connect ‘jdbc:derby://hadoop1:1527/metastore_db;create=true’;

3、元数据库数据字典


表名


说明


关联键


BUCKETING_COLS


COLUMNS


Hive


表字段信息(字段注释,字段名,字段类型,字段序号)


SD_ID


DBS


元数据库信息,存放HDFS路径信息


DB_ID


PARTITION_KEYS


Hive


分区表分区键


PART_ID


SDS


所有hive表、表分区所对应的hdfs数据目录和数据格式。


SD_ID,SERDE_ID


SD_PARAMS


序列化反序列化信息,如行分隔符、列分隔符、NULL的表示字符等


SERDE_ID


SEQUENCE_TABLE


SEQUENCE_TABLE


表保存了hive对象的下一个可用ID,如’org.apache.hadoop.hive.metastore.model.MTable’, 21,则下一个新创建的hive表其TBL_ID就是21,同时SEQUENCE_TABLE表中271786被更新为26(这里每次都是+5?)。同样,COLUMN,PARTITION等都有相应的记录


SERDES


SERDE_PARAMS


SORT_COLS


TABLE_PARAMS


表级属性,如是否外部表,表注释等


TBL_ID


TBLS


所有hive表的基本信息


TBL_ID,SD_ID

从上面几张表的内容来看,hive整个创建表的过程已经比较清楚了

  1. 解析用户提交hive语句,对其进行解析,分解为表、字段、分区等hive对象
  2. 根据解析到的信息构建对应的表、字段、分区等对象,从SEQUENCE_TABLE中获取构建对象的最新ID,与构建对象信息(名称,类型等)一同通过DAO方法写入到元数据表中去,成功后将SEQUENCE_TABLE中对应的最新ID+5。

实际上我们常见的RDBMS都是通过这种方法进行组织的,典型的如postgresql,其系统表中和hive元数据一样裸露了这些id信息(oid,cid等),而Oracle等商业化的系统则隐藏了这些具体的ID。通过这些元数据我们可以很容易的读到数据诸如创建一个表的数据字典信息,比如导出建表语名等。

导出建表语句的shell脚本见

附一


待完成


2.


Mysql

将存放元数据的Derby数据库迁移到Mysql数据库

步骤:


  1. HIVE

    的数据存储

首先,Hive 没有专门的数据存储格式,也没有为数据建立索引,用户可以非常自由的组织 Hive 中的表,只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符,Hive 就可以解析数据。

其次,Hive 中所有的数据都存储在 HDFS 中,Hive 中包含以下数据模型:Table,External Table,Partition,Bucket。

  1. Hive 中的 Table 和数据库中的 Table 在概念上是类似的,每一个 Table 在 Hive 中都有一个相应的目录存储数据。例如,一个表 htduan,它在 HDFS 中的路径为:/ warehouse /htduan,其中,wh 是在 hive-site.xml 中由 ${hive.metastore.warehouse.dir} 指定的数据仓库的目录,所有的 Table 数据(不包括 External Table)都保存在这个目录中。
  2. Partition 对应于数据库中的 Partition 列的密集索引,但是 Hive 中 Partition 的组织方式和数据库中的很不相同。在 Hive 中,表中的一个 Partition 对应于表下的一个目录,所有的 Partition 的数据都存储在对应的目录中。例如:htduan 表中包含 dt 和 city 两个 Partition,则对应于 dt = 20100801, ctry = US 的 HDFS 子目录为:/ warehouse /htduan/dt=20100801/ctry=US;对应于 dt = 20100801, ctry = CA 的 HDFS 子目录为;/ warehouse /htduan/dt=20100801/ctry=CA
  3. Buckets 对指定列计算 hash,根据 hash 值切分数据,目的是为了并行,每一个 Bucket 对应一个文件。将 user 列分散至 32 个 bucket,首先对 user 列的值计算 hash,对应 hash 值为 0 的 HDFS 目录为:/ warehouse /htduan/dt =20100801/ctry=US/part-00000;hash 值为 20 的 HDFS 目录为:/ warehouse /htduan/dt =20100801/ctry=US/part-00020
  4. External Table 指向已经在 HDFS 中存在的数据,可以创建 Partition。它和 Table 在元数据的组织上是相同的,而实际数据的存储则有较大的差异。
  • Table 的创建过程和数据加载过程(这两个过程可以在同一个语句中完成),在加载数据的过程中,实际数据会被移动到数据仓库目录中;之后对数据对访问将会直接在数据仓库目录中完成。删除表时,表中的数据和元数据将会被同时删除。
  • External Table 只有一个过程,加载数据和创建表同时完成(CREATE EXTERNAL TABLE ……LOCATION),实际数据是存储在 LOCATION 后面指定的 HDFS 路径中,并不会移动到数据仓库目录中。当删除一个 External Table 时,仅删除

  1. 其它

    HIVE操作
  1. 启动HIVE的WEB的界面


sh $HIVE_HOME/bin/hive –service hwi

2、查看HDFS上的文件数据

hadoop fs -text /user/admin/daiqf/createspu_fp/input/cateinfo |head



版权声明:本文为wonderful_life_mrchi原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。