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 by '\n'
location '/student1029/input/';
—external table外部數據庫表,表中的數據不存儲在數據庫中,而是在與數據庫相關聯的普通外部文件裏。(即student外部表中的數據其實是連接了存儲在HDFS上的students.txt文件)
—row format delimited關鍵字,是用來設置創建的表在加載數據的時候,支持的列分隔符
fields terminated by “,”:列分隔符按","
lines terminated by “\n”:分隔符按"\n"換行
方法2:內部表
create table student2(
id int,
name string,
gender string,
age int,
department string)
row format delimited fields terminated by ','
lines terminated by '\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;
能夠查看錶結構,還有表的詳細信息,如這個表屬於哪個用戶,存放位置,所屬哪個數據庫等,還有行列是按照什麼分割符分割的。