Hive元数据

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值