1. hive元数据库
- hive创建一张表,关联HDFS上存储的结构化数据,那么这张表存储在哪里?
其实hive会把用户创建的数据库表等抽象的信息专门存储在一个数据库中,这个数据库就是-------元数据库。 - HDFS存储的数据有两种:
①用户的真实数据,存储在datanode中
②抽象和管理这些真实数据的数据,叫做元数据,存储在namenode中
namenode类比于书本的目录,datanode类比于书本的内容,书本的内容存储的是真实的数据,而目录(元数据,管理数据的数据)可以翻到这一页内容(真实数据)。 - hive创建的数据库或者数据表,对应存储在元数据库不是一个数据库和一张表,而是一条条的记录。(下面的实操会更好理解)
- 我们在安装hive的时候,只需要对元数据库初始化一次就可以,初始化第二次会把第一次创建出来的元数据库覆盖。
2. hive实操
-
创建一个文件,写入数据
vim students.txt
-
在HDFS上创建一个目录,将students.txt文件上传到HDFS
hadoop fs -mkdir -p /student1029/input
hadoop fs -put /本地文件目录/students.txt /student1029/input
-
创建hive数据库并使用该数据库
select current_database(); //查看当前使用的数据库
create database if not exists student1029;
use student1029; -
创建hive数据表并添加数据
方法1:
create external table student(
id int,
name string,
gender string,
age int,
department string)
row format delimited fields terminated by “,”
lines terminated “\n” location “/student1029/input/”;
—external table外部数据库表,表中的数据不存储在数据库中,而是在与数据库相关联的普通外部文件里。(即表中的数据其实是存储在HDFS上的students.txt文件)
—row format delimited关键字,是用来设置创建的表在加载数据的时候,支持的列分隔符
fields terminated by “,”:列分隔符按","
lines terminated by “\n”:分隔符按"\n"换行
方法2:
create external table student(
id int,
name string,
gender string,
age int,
department string)
row format delimited fields terminated by “,”
lines terminated “\n”;
#往表中添加本地数据
load data local inpath "/home/hadoop/students.txt" into table student;
-
查看hive创建的数据库
-
查看在mysql中的数据库
hivedb就是元数据库,在安装hive的时候指定的
-
查看hive元数据库中的元数据表
元数据库中有57张表,组成一个元数据库。
其中:
DBS表中存储hive创建的数据库
TBLS表中存储hive创建的数据表
Hive创建的数据库和表在元数据库中都是以一条条记录的形式存在
student1029就是我们刚刚创建的hive数据库,在元数据库中是以记录的形式存在。
select * from DBS; #注意区分大小写
这两张表就是我们创建的hive数据表,在元数据库中是以记录的形式存在。
select * from TBLS;
-
查看表结构
desc student;
-
查看表的元数据信息
desc formatted student;
能够查看表结构,还有表的详细信息,如这个表属于哪个用户,存放位置,所属哪个数据库等,还有行列是按照什么分割符分割的。