Hive--元数据--探查

1、元数据功能

保存了Hive中所有关键性的数据

  • 存储了所有数据库、表、所有字段、分隔符等信息
  • 存储了所有表与HDFS文件的映射的信息

2、元数据存储

存储位置

第一种:默认的存储位置:Hive自带的Derby数据库

  • 存在问题:由于derby数据库以文件的形式存在不能启动多个实例,真正在工作中不用derby来存储元数据

第二种:企业中实际的开发环境,都是将Hive元数据存储在关系型数据库中:常用MySQL

3、实现:将Hive元数据存储在MySQL

  • step1:安装MySQL
  • step2:修改Hive的配置,使用MySQL来存储元数据
    • 先构建一个Hive的配置文件:hive-site.xml
tips:
	Hive本身没有提供这个文件
	Apache版本中提供了一个hive-default.xml
	CDH版本什么都没有提供
	将提供的hive-site.xml上传到hive的配置文件目录下

在这里插入图片描述

在这里插入图片描述指定存储元数据的Mysql的地址 tips:value中的node-03为测试虚拟机

<property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://node-03:3306/hivemetadata?createDatabaseIfNotExist=true</value>
  </property>

指定连接Mysql的驱动

  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
  </property>

Mysql的用户名和密码 tips:value中的账号密码自己修改

  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>root</value>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>123456</value>
  </property>
  • step3:将mysql的连接驱动包,放入Hive的lib目录tips:我的路径为/export/servers/hive-1.1.0-cdh5.14.0/lib/
    在这里插入图片描述
  • step4:启动Hive
cd /export/servers/hive-1.1.0-cdh5.14.0/
bin/hive
  • step5:测试
    • 创建数据库
create database db_lianjia;
use db_lianjia;
  • 创建表
create table tb_lianjia(
 xiaoqu string,
 huxing string,
 area double,
 region string,
 floor string,
 chaoxiang string,
 tprice double,
 sprice double,
 nianfen string
) row format delimited fields terminated by ',';
  • 关联数据
load data local inpath '/export/datas/2nd_house_price.csv' into table tb_lianjia;
  • 测试查询
select xiaoqu,region,tprice,sprice from tb_lianjia limit 10;
select count(*) from tb_lianjia;
  • 查看Mysql中是否创建了元数据的数据库
    在这里插入图片描述
  • 查看元数据
    DBS:存储了Hive中所有的数据库
    在这里插入图片描述TBLS:存储了Hive中所有表的信息
    在这里插入图片描述

SDS:记录了Hive中的表与HDFS文件的映射关系
在这里插入图片描述
在这里插入图片描述

4、HDFS与Hive之间的关联

Hive元数据映射了HDFS数据与Hive表之间的关系

  • 存储关系:
  • Hive作为数据仓库会对应HDFS中一个目录,这个目录是Hive数据仓库的目录
  • 用于存储Hive中所有的数据库、表、数据
    属性
  <property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/user/hive/warehouse</value>
  </property>

查看配置的在hdfs上的仓库路径
在这里插入图片描述

  • Hive中所有的数据库都对应HDFS数据仓库目录下的一个目录
  • 所有表的目录都在对应的数据库目录下
  • 表中数据文件都在对应的表的目录下
    在这里插入图片描述

配置的仓库目录: /user/hive/warehouse的作用:

  • 作为Hive数仓的目录下面放的是数据库的目录
  • 也作为default数据库的目录下面放的是default数据库中表的目录

如何区分这个目录下的目录是数据库还是表的目录呢?

  • 如果是目录以.db结尾,说明这是一个数据库的目录

5、问题:如果我手动用HDFS命令,将一份数据放入表的目录中,表中能不能读到?

情况一:普通表

  • 可以读到
  • 因为在Hive的元数据中:数据的处理就是读取表的最后一级目录
  • 普通表的最后一级目录就是表的目录,只要表的目录中有数据,就会在Hive中读取到
select * from table
select * from hdfs://node:8020/user/hive/warehouse/db/table

情况二:分区表

不能
由于这个分区目录是你自己建的,Hive中没有这个分区对应的元数据

select * from table
select * from 元数据中这张表对应的所有分区的目录

解决

  • 第一种方案:修复表结构:根据HDFS中分区的情况,来反过来修复元数据
msck repair table tb_emp_part2;
  • 第二种方案:手动构建这个元数据
ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION partition_spec [LOCATION 'location']

alter  table tb_emp_part2 add partition 'dept=40' location '/user/hive/warehouse/db_emp.db/tb_emp_part2/dept=40';

6、总结:

元数据的功能以及存储

  • 功能:存储Hive 中关键性数据
    • 存储了Hive中所有数据库、表的信息
      DBS、TBLS
    • 存储了Hive中表与HDFS的映射关系
      SDS

存储方式

  • 方式一:默认的方式,存储在Hive自带的Derby数据库【工作中是不用的】
  • 方式二:远程连接Mysql实现元数据存储,工作中选用的方式

Hive与HDFS之间的存储关系

  • Hive会在HDFS创建一个数据仓库的目录(配置文件中指定):/user/hive/warehouse
  • Hive中所有的数据库、表都会默认存储在这个目录下,同时也作为Hive中默认的数据库default数据库的目录
  • 在Hive中创建一个数据库,就会自动在HDFS上创建一个对应的数据库目录
  • 在Hive中创建一张表,就会自动在HDFS对应的数据库目录下创建对应的表的目录
  • 在Hive中数据如果加载到表中,数据文件就会存储在表的目录下
    • 关联的是一个HDFS文件:Hive会将这个文件移动到表的目录下(管理表
    • 关联的是一个本地文件:Hive 会将这个本地文件拷贝一份存储在HDFS表的目录下
  • 结构:数据仓库/数据库目录/表的目录/数据文件即 HiveWareHouse/Database/Table/Data
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值