内部表的操作:
一开始就要先打开Hadoop集群,后面所有的操作都是在打开Hadoop集群的前提下进行的:
cd /opt/hadoop-3.1.4/sbin
./start-dfs.sh
./start-yarn.sh
./mr-jobhistory-daemon.sh start historyserver
jps
首先为了方便,先cd到hive安装路径的lib目录中,或者使用pwd可以查看当前目录的路径,然后打开hive进行操作:
cd /usr/local/hive/lib
pwd
hive
但是不知道为什么我的hive不能够直接这样打开,不管是不是在lib目录下:
然后我发现必须先切换到conf目录下重新更新一下profile文件,然后初始化metastore才可以成功打开,并且必须启动元数据服务,否则在打开hive以后输入命令会报错,具体操作如下:
cd /usr/local/hive/conf
source /etc/profile
schematool -dbType mysql -initSchema
hive --service metastore &
hive
然后这里的初始化会展示schemaTool failed是因为我最开始已经建立了hive表,所以会报错,所以不用管,接下来输入hive正常打开就好了:
进入hive之后可以使用命令查看一下目前有哪些databases,并创建一个名为train的数据库:
show databases;
create database train;
再次查看一下数据库是否成功创建,并使用use调用该数据库:
show databases;
use train;
调用数据库train之后,再创立名为person的表:
create table person(
id int,
name string,
age int)
row format delimited fields terminated by ',';
然后可以查看一下train数据库的描述:
desc database train;
接下来往数据库train中的person表上传数据,使用xftp上传到opt目录下,如图:
其中person.txt的内容如图:
然后新开一个xshell的窗口,依旧连接master主机,用于查看上传是否成功,这一步省略也可以,不开窗口查看也可以:
然后回到原本的窗口,在hive下使用dfs命令把在opt文件夹里面的person.txt文件上传到train数据库的person表格中:
dfs -put /opt/person.txt /user/hive/warehouse/train.db/person;
然后可以在网页中进行查看:
也可以选择使用命令进行查看:
select * from person;
可以做一些设置,如果想要看到每个字段的表头信息,可以使用如下命令:
set hive.cli.print.header=true;
select * from person;
试用下面的命令可以看到当前操作使用的数据库的名字:
set hive.cli.print.current.db=true;
select * from person;
hive中外部表的操作:
先创建一个外部表名为external_table:
create external table external_table(
id int,
name string,
age int)
row format delimited fields terminated by ','
location '/user/root/external/external_person';
然后就是加载数据到外部表,即将person.txt的内容加载到外部表external_table中,并进行查看:
dfs -put /opt/person.txt /user/root/external/external_person;
select * from external_table;
也可以在网页中查看:
然后查看一下外部表和内部表的区别,先查看一下 两个表格,然后对表格进行删除:
show tables;
drop table person;
drop table external_table;
show tables;
最后一次show可以看见,两个表都被删除了,然后到50070页面中查看:
在50070中:
所以我们发现使用drop删除内部表是真的完全被删除了。而删除外部表,只是删除了元数据,真实的数据依旧存在HDFS的系统上面。