目录
登录Hadoop和Hive
[ww@master ~]$ start-all.sh This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh Starting namenodes on [master] master: starting namenode, logging to /home/yao/hadoop-2.7.7/logs/hadoop-yao-namenode-master.out slave: starting datanode, logging to /home/yao/hadoop-2.7.7/logs/hadoop-yao-datanode-slave.out Starting secondary namenodes [0.0.0.0] 0.0.0.0: starting secondarynamenode, logging to /home/ww/hadoop-2.7.7/logs/hadoop-ww-secondarynamenode-master.out starting yarn daemons starting resourcemanager, logging to /home/yao/hadoop-2.7.7/logs/yarn-ww-resourcemanager-master.out slave: starting nodemanager, logging to /home/yao/hadoop-2.7.7/logs/yarn-ww-nodemanager-slave.out
[ww@master ~]$ jps
19123 NameNode
19960 Jps
19532 ResourceManager
19359 SecondaryNameNode
[ww@master ~]$ hive
hive>
1 在Hive中执行shell命令和hdfs命令
执行shell命令
/home/ww
hive> ! pwd;
/home/ww
hive> ! echo "hello world!";
"hello world!"
hive> ! ls /home/ww/hadoopdata;
dfs
用户可以执行简单的bash shell命令,只要在命令前加上!并且以分号结尾。Hive CLI不能使用需要用户进行输入的交互式命令,而且不支持shell的“管道符”功能和文件名的自动补全功能。
执行hdfs命令
hive> dfs -ls /;
Found 7 items
drwxr-xr-x - ww supergroup 0 2019-05-08 12:09 /0506
-rw-r--r-- 3 ww supergroup 14 2019-05-08 11:02 /0507
drwxr-xr-x - ww supergroup 0 2019-05-08 19:40 /0514
drwxr-xr-x - ww supergroup 0 2019-05-09 16:51 /data
drwxr-xr-x - ww supergroup 0 2019-05-13 17:24 /student2
drwx------ - ww supergroup 0 2019-05-13 15:40 /tmp
drwxr-xr-x - ww supergroup 0 2019-05-13 16:42 /user
需要把hadoop关键字去掉,加上dfs,然后以分号结尾。(这种使用hadoop命令的方式实际上比与其等价的在bash shell中执行的hadoop fs命令更加高效)
2 DDL操作
1.Hive中的数据库
hive> show databases;
OK
default
Time taken: 0.486 seconds, Fetched: 1 row(s)
- 创建数据库
hive> create database yw;
OK
Time taken: 0.401 seconds
hive> create database yw_test;
OK
Time taken: 0.084 seconds
hive> show databases;
OK
default
yw
yw_test
Time taken: 0.037 seconds, Fetched: 3 row(s)
如果数据库存在,则抛出异常
ive> create database if not exists ducl;
OK
Time taken: 0.112 seconds
如果数据库很多,可以使用正则表达式,模糊匹配
hive> show databases like 'yw*';
OK
yw
yw_test
Time taken: 0.054 seconds, Fetched: 2 row(s)
- 查看数据库描述信息
查看数据库具体信息
hive> describe database yw;
OK
yw hdfs://master:9000/user/hive/warehouse/yw.db ww USER
Time taken: 0.041 seconds, Fetched: 1 row(s)
hive> dfs -ls /user/hive/warehouse;
Found 3 items
drwxr-xr-x - ww supergroup 0 2019-05-13 16:44 /user/hive/warehouse/ducl.db
drwxr-xr-x - ww supergroup 0 2019-05-13 16:42 /user/hive/warehouse/yw.db
drwxr-xr-x - ww supergroup 0 2019-05-13 16:42 /user/hive/warehouse/yw_test.db
hive> drop database yw_test;
OK
Time taken: 0.305 seconds
- 删除数据库
hive> drop database yw_test; OK Time taken: 0.627 seconds
删除带有表的数据库
1)先删表再删库
2)直接强制删除
hive> drop database yw_test;
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. InvalidOperationException(message:Database yr_test is not empty. One or more tables exist.)
hive> drop database yr_test cascade;
OK
Time taken: 2.873 seconds
2.创建表
建表示例
内部表和外部表
未被external修饰的是内部表(managed table),被external修饰的为外部表(external table);
区别:
1)内部表的生命周期以及数据都由Hive自身管理,就是内部表的表结构和表中的数据都是由hive进行管理的。如果删除了内部表,那么内部表中的数据也会别删除。外部表只有表结构是hive进行管理的,数据由HDFS管理,如果删除hive中的外部表,那么表结构会删除,但是不会删除表中的数据。
2)删除内部表会直接删除元数据(metadata)及存储数据;删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除;
3)对内部表的修改会将修改直接同步给元数据,而对外部表的表结构和分区进行修改,则需要修复(MSCK REPAIR TABLE table_name;)
4)内部表的数据存储的位置是hive.metastore.warehouse.dir(默认:/user/hive/warehouse),但是内部表和外部表都可以自己指定存储位置;
创建内部表
hive> use yw;
OK
Time taken: 0.035 seconds
hive> create table student(
> id int,
> name string,
> age int)
> row format delimited //默认的hive的语句
> fields terminated by '\t' //字段与字段间用制表符分隔
> stored as textfile; //文件类型
OK
Time t