Hive的基本操作:内表与外表

本文档详细介绍了在Hadoop集群上操作Hive的步骤,包括启动Hadoop服务,初始化Hive metastore,创建并管理数据库和表,上传及查询数据。还对比了内部表和外部表的删除差异,强调了外部表删除仅移除元数据,数据仍保留在HDFS上。
摘要由CSDN通过智能技术生成

内部表的操作:

一开始就要先打开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的系统上面。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值