Hive

您所在的位置:网站首页 hive统计数据库下有几张表 Hive

Hive

#Hive| 来源: 网络整理| 查看: 265

元数据--探查 1、元数据功能2、元数据存储存储位置第一种:默认的存储位置:Hive自带的Derby数据库==第二种:企业中实际的开发环境,都是将Hive元数据存储在关系型数据库中:常用MySQL== 3、实现:将Hive元数据存储在MySQL4、HDFS与Hive之间的关联Hive元数据映射了HDFS数据与Hive表之间的关系配置的仓库目录: `/user/hive/warehouse`的作用:如何区分这个目录下的目录是数据库还是表的目录呢? 5、问题:如果我手动用HDFS命令,将一份数据放入表的目录中,表中能不能读到?情况一:普通表情况二:分区表 6、总结:元数据的功能以及存储存储方式Hive与HDFS之间的存储关系

1、元数据功能

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

存储了所有数据库、表、所有字段、分隔符等信息存储了所有表与HDFS文件的映射的信息 2、元数据存储 存储位置 第一种:默认的存储位置:Hive自带的Derby数据库 存在问题:由于derby数据库以文件的形式存在,不能启动多个实例,真正在工作中不用derby来存储元数据 第二种:企业中实际的开发环境,都是将Hive元数据存储在关系型数据库中:常用MySQL 3、实现:将Hive元数据存储在MySQL step1:安装MySQLstep2:修改Hive的配置,使用MySQL来存储元数据 先构建一个Hive的配置文件:hive-site.xml tips: Hive本身没有提供这个文件 Apache版本中提供了一个hive-default.xml CDH版本什么都没有提供 将提供的hive-site.xml上传到hive的配置文件目录下

在这里插入图片描述

修改hive-site.xml文件,配置使用Mysql来存储元数据 参考官方,进行修改 https://cwiki.apache.org/confluence/display/Hive/AdminManual+Metastore+Administration

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

javax.jdo.option.ConnectionURL jdbc:mysql://node-03:3306/hivemetadata?createDatabaseIfNotExist=true

指定连接Mysql的驱动

javax.jdo.option.ConnectionDriverName com.mysql.jdbc.Driver

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

javax.jdo.option.ConnectionUserName root javax.jdo.option.ConnectionPassword 123456 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中所有的数据库、表、数据 属性 hive.metastore.warehouse.dir /user/hive/warehouse

查看配置的在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/warehouseHive中所有的数据库、表都会默认存储在这个目录下,同时也作为Hive中默认的数据库default数据库的目录在Hive中创建一个数据库,就会自动在HDFS上创建一个对应的数据库目录在Hive中创建一张表,就会自动在HDFS对应的数据库目录下创建对应的表的目录在Hive中数据如果加载到表中,数据文件就会存储在表的目录下 关联的是一个HDFS文件:Hive会将这个文件移动到表的目录下(管理表)关联的是一个本地文件:Hive 会将这个本地文件拷贝一份存储在HDFS表的目录下 结构:数据仓库/数据库目录/表的目录/数据文件即 HiveWareHouse/Database/Table/Data


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3