2019-08-19 大数据分析利器HIVE

1.概念:Hive由Facebook开源,用于解决海量结构化日志的数据统计。

Hive是基于Hadoop的一个==数据仓库工具==,可以将==结构化的数据文件映射为一张表==,并提供类SQL查询功能。

本质是:==将Hive SQL转化成MapReduce程序==

学好HIVE可以做数据仓库开发

2.HIVE架构

1、用户接口:ClientCLI(hive shell)、JDBC/ODBC(java访问hive)、WEBUI(浏览器访问hive)2、元数据(hive中有哪些表,表里有哪些字段,字段类型,表的数据保存在哪里):Metastore元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等;默认存储在自带的derby数据库中,==推荐使用MySQL存储Metastore==3、Hadoop集群使用HDFS进行存储,使用MapReduce进行计算。4、Driver:驱动器解析器(SQL Parser)将SQL字符串转换成抽象语法树AST对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。编译器(Physical Plan):将AST编译生成逻辑执行计划。优化器(Query Optimizer):对逻辑执行计划进行优化。执行器(Execution):把逻辑执行计划转换成可以运行的物理计划。对于Hive来说默认就是mapreduce任务

hive没有队列的概念,只是把我们的程序写好后就提交。 YARN有队列的概念(谁先提交就运行谁的任务)

hive工作流程

HIVE实操

3.1 Hive JDBC服务

netstat -nlp命令查看运行了哪些服务和端口

通过beeline命令进入客户端



4、Hive的DDL操作(20分钟)

4.1 hive的数据库DDL操作

4.1.1、创建数据库

hive >createdatabase db_hive;

或者

hive >createdatabase ifnotexists db_hive;

数据库在HDFS上的默认存储路径是==/user/hive/warehouse/*.db==

4.1.2、显示数据库

  hive> show databases;

4.1.3、查询数据库

hive> show databaseslike'db_hive*';

4.1.4、查看数据库详情

hive>descdatabase db_hive;

4.1.5、显示数据库详细信息

hive>descdatabase extended db_hive;

4.1.6、切换当前数据库

hive > use db_hive;

4.1.7、删除数据库

#删除为空的数据库

hive>dropdatabase db_hive;


#如果删除的数据库不存在,最好采用if exists 判断数据库是否存在

hive>dropdatabase if exists db_hive;


#如果数据库中有表存在,这里需要使用cascade强制删除数据库

hive>dropdatabase if exists db_hive cascade;

4.2 hive的表DDL操作

4.2.1 、建表语法介绍

CREATE[EXTERNAL]TABLE[IFNOTEXISTS] table_name

[(col_name data_type [COMMENT col_comment], ...)]

[COMMENT table_comment]

[PARTITIONEDBY(col_name data_type [COMMENT col_comment], ...)] 分区

[CLUSTEREDBY(col_name, col_name, ...) 分桶

[SORTEDBY(col_name [ASC|DESC], ...)]INTOnum_buckets BUCKETS]

[ROW FORMAT row_format]   row format delimited fields terminatedby“分隔符”

[STOREDASfile_format]

[LOCATION hdfs_path]

4.2.1.1、Hive是一种建立在Hadoop文件系统上的数据仓库架构,并对存储在HDFS中的数据进行分析和管理;

(也就是说对存储在HDFS中的数据进行分析和管理,我们不想使用手工,我们建立一个工具把,那么这个工具就可以是hive)

4.2.1.2、 hive建表语法中的分隔符设定

ROW FORMAT DELIMITED 分隔符设置开始语句

FIELDS TERMINATED BY:设置字段与字段之间的分隔符

COLLECTION ITEMS TERMINATED BY:设置一个复杂类型(array,struct)字段的各个item之间的分隔符

MAP KEYS TERMINATED BY:设置一个复杂类型(Map)字段的key value之间的分隔符

LINES TERMINATED BY:设置行与行之间的分隔符

例:有以下格式的数据创建出合适的表结构,并将数据导入表中

战狼2,吴京:吴刚:卢婧姗,2017-08-16

大话西游,周星驰:吴孟达,1995-09-01


create table t_movie(movie_name string,actors array,first_date date)

row format delimited

fields terminated by ','

collection items terminated by ':'

;



4.2.1.3、load 语法

按照建表要求,新建一个movie.txt文件


load语句:load data local inpath '/home/hadoop/data/movie.txt' into table t_movie;将/home/hadoop/data/movie.txt下的所有数据文件导入t_movie表中

(终端输入pwd查看文件路径,overwrite是覆盖表中原内容)

LOAD语句:load data [local] inpath 'filepath' [overwrite]

into table tablename [partition (partcol1=val1,partcol2=val2...)]

--将/root/data下的所有数据文件导入t3表中,并且覆盖原来的数据

load data local inpath '/root/data/' overwrite into table t3;

--将HDFS中 /input/student01.txt 导入到t3

load data inpath '/input/student01.txt' overwrite into table t3;

--将数据导入分区表

load data local inpath '/root/data/data1.txt' into table partition_table partition(gender='M');

4、hive 语句区分大小写

4.2.1.4 查询出每个电影的第二个主演

select movie_name,actors[1],first_datefromt_movie;

6.2.2 、字段解释说明

create table:创建一个指定名字的表

EXTERNAL :创建一个外部表,在建表的同时指定一个指向实际数据的路径(LOCATION),指定表的数据保存在哪里

COMMENT: 为表和列添加注释

PARTITIONED BY: 创建分区表

CLUSTERED BY: 创建分桶表

SORTED BY: 按照字段排序(一般不常用)

ROW FORMAT: 指定每一行中字段的分隔符row format delimited fields terminated by ‘\t’

STORED AS:指定存储文件类型: 

常用的存储文件类型:SEQUENCEFILE(二进制序列文件)、TEXTFILE(文本)、RCFILE(列式存储格式文件)

如果文件数据是纯文本,可以使用STORED AS TEXTFILE。如果数据需要压缩,使用 STORED AS SEQUENCEFILE。

LOCATION: 指定表在HDFS上的存储位置。

4.2.3、 创建内部表

1、直接建表

使用标准的建表语句

create table if not exists student(

id int,

name string

)

row format delimited fields terminated by'\t'

stored as textfile;

2、查询建表法

通过AS 查询语句完成建表:将子查询的结果存在新表里,有数据

create table if not exists student1 as select id, name from student;

3、like建表法

根据已经存在的表结构创建表

create table if not exists student2 like student;

4、查询表的类型

hive >desc formatted student;

6.2.4、 创建外部表

create external table if not exists default.emp(

id int,

name string,

age int

)

row format delimited fields terminated by '\t'

location '/hive/bigdata';

创建外部表的时候需要加上==external== 关键字

location字段可以指定,也可以不指定

指定就是数据存放的具体目录

不指定就是使用默认目录 ==/user/hive/warehouse==

6.2.5、 内部表与外部表的互相转换

1、内部表转换为外部表

#把student内部表改为外部表

alter table student set tblproperties('EXTERNAL'='TRUE');

2、外部表转换为内部表

#把student管理表改为外部表

alter table student set tblproperties('EXTERNAL'='FALSE');

6.2.6、 内部表与外部表的区别

1、建表语法的区别

外部表在创建的时候需要加上==external==关键字

2、删除表之后的区别

内部表删除后,表的元数据和真实数据都被删除了

外部表删除后,仅仅只是把该表的元数据删除了,真实数据还在,后期还是可以恢复出来



hive cli命令窗口查看本地文件系统

与操作本地文件系统类似,这里需要使用 ! (感叹号),并且最后需要加上 ;(分号)

例如

!ls /;

hive cli命令窗口查看HDFS文件系统

与查看HDFS文件系统类似

dfs -ls / ;

hive的底层执行引擎有3种

mapreduce(默认)

tez(支持DAG作业的计算框架)

spark(基于内存的分布式计算框架)


HIVE架构

你可能感兴趣的:(2019-08-19 大数据分析利器HIVE)