大数据系列之—-02 工具 HIVE简介&使用

1. HIVE简介

官网用户手册
Hive是一种建立在Hadoop文件系统上的数据仓库架构,并对存储在HDFS中的数据进行分析和管理;它可以将结构化的数据文件映射为一张数据库表,并提供完整的 SQL 查询功能,可以将 SQL 语句转换为 MapReduce 任务进行运行,通过自己的 SQL 去查询分析需要的内容,这套 SQL 简称 Hive SQL(HQL),使不熟悉MapReduce 的用户也能很方便地利用 SQL 语言对数据进行查询、汇总、分析。

Hive是一个数据仓库基础工具在Hadoop中用来处理结构化数据。它架构在Hadoop之上,总归为大数据,并使得查询和分析方便。
Hive的表其实就是HDFS的目录/文件,按表名把文件夹分开。如果是分区表,则分区值是子文件夹,可以直接在M/RJob里使用这些数据。
Hive不支持更改数据的操作

Hive的执行流程如下图所示:

2. HIVE的优点 与 缺点

优点

  1. 简单容易上手:提供了类SQL查询语言HQL
  2. 可扩展:为超大数据集设计了计算/扩展能力(MR作为计算引擎,HDFS作为存储系统),一般情况下不需要重启服务Hive可以自由的扩展集群的规模。
  3. 提供统一的元数据管理
  4. 延展性:Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数
  5. 容错:良好的容错性,节点出现问题SQL仍可完成执行

缺点(局限性)

  1. hive的HQL表达能力有限
    1.1) 迭代式算法无法表达,比如pagerank
    1.2) 数据挖掘方面,比如kmeans
  2. hive的效率比较低
    2.1) hive自动生成的mapreduce作业,通常情况下不够智能化
    2.2) hive调优比较困难,粒度较粗
    2.3) hive可控性差

3. HIVE下载 与 安装

下载
安装HIVE前,先要安装JDK, Hadoop

验证 Hadoop 集群的所有应用程序:http://localhost:8088/

4. HIVE的使用

数据类型

分为四种类型如下:
列类型:整型,字符串型,时间戳,日期,小数点,联合类型
文字 :浮点类型,十进制类型
Null 值
复杂类型:数组,映射,结构体

创建数据库&删除数据库

#创建数据库。语法如下:
CREATE DATABASE|SCHEMA [IF NOT EXISTS] <database name>

#删除所有的表并删除数据库的语句。语法如下:
DROP DATABASE StatementDROP (DATABASE|SCHEMA) [IF EXISTS] database_name [RESTRICT|CASCADE];

创建表、修改表、删除表

#创建表的语句。语法:
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.] table_name
[(col_name data_type [COMMENT col_comment], ...)]
[COMMENT table_comment]
[ROW FORMAT row_format]
[STORED AS file_format]

#内部表与外部表转换
##内部表转外部表
#修改表语法:
ALTER TABLE TABLEA SET TBLPROPERTIES('EXTERNAL'='true');
#修改表语法:
ALTER TABLE TABLEA SET TBLPROPERTIES('EXTERNAL'='false');

#使用LOAD DATA语句插入数据。加载数据有两种方法:一种是从本地文件系统,第二种是从Hadoop文件系统。
#语法:
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]

#修改表语法:
ALTER TABLE name RENAME TO new_name
ALTER TABLE name ADD COLUMNS (col_spec[, col_spec ...])
ALTER TABLE name DROP [COLUMN] column_name
ALTER TABLE name CHANGE column_name new_name new_type
ALTER TABLE name REPLACE COLUMNS (col_spec[, col_spec ...])

#删除表语法:
DROP TABLE [IF EXISTS] table_name;

#查看创建表语句
SHOW CREATE td_part;

#查看表分区
SHOW partitions td_part;

HIVE分区

Hive组织表到分区。方便对数据进行部分查询。表或分区是细分成桶,桶的工作是基于表的一些列的散列函数值。

#添加分区,可以通过添加分区表改变所述表。语法:
ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION partition_spec [LOCATION 'location1'] partition_spec [LOCATION 'location2'] ...;

#重命名分区。语法:
ALTER TABLE table_name PARTITION partition_spec RENAME TO PARTITION partition_spec;

#删除分区。语法:
ALTER TABLE table_name DROP [IF EXISTS] PARTITION partition_spec, PARTITION partition_spec,...;

视图和索引

#创建一个视图, 语法:
CREATE VIEW [IF NOT EXISTS] view_name [(column_name [COMMENT column_comment], ...) ]
[COMMENT table_comment]
AS SELECT ...

#删除一个视图, 语法:
DROP VIEW view_name

#创建索引, 语法:
CREATE INDEX index_name
ON TABLE base_table_name (col_name, ...)
AS 'index.handler.class.name'
[WITH DEFERRED REBUILD]
[IDXPROPERTIES (property_name=property_value, ...)]
[IN TABLE index_table_name]
[PARTITIONED BY (col_name, ...)]
[
   [ ROW FORMAT ...] STORED AS ...
   | STORED BY ...
]
[LOCATION hdfs_path]
[TBLPROPERTIES (...)]

#删除索引, 语法:
DROP INDEX <index_name> ON <table_name>

内置运算符

关系运算符
算术运算符
逻辑运算符
复杂运算符

Hive内置函数

5. HIVE相关

5.1 HIVE中sort by、order by、cluster by、distribute by的区别:

1、sort by: 不是全局排序,分区内有序。其在数据进入reducer前完成排序。
2、order by:全局排序,因此只有一个reducer,如果有多个reducer无法保证全局的排序。计算规模较大,时间可能会很长。
3、distribute by: 按照指定的字段对数据进行划分输出到不同的reduce中。类似MR中Partition。
4、cluster by: 除了具有distribute by的功能,还具有了sort by的功能。但排序只能是升序,不能指定排序规则为ASC或者DESC。

在生产环境中Order By用的比较少,容易导致OOM。Sort By+ Distrbute By用的多。

5.2 Hive几种基本表类型

内部表、外部表、分区表、桶表

5.3 Hive中的外部表和内部表的区别:

①创建内部表的时候,会将数据移动到数据仓库指向的路径,创建外部表的时候,仅记录数据所在的位置,不对数据做任何的该表。
②删除外部表的时候,只是删除元数据,不会删除数据,删除内部表的时候,元数据和数据都会被删除,相对来说,外部表更加安全和灵活,易于数据的共享。

5.4 Hive有哪些方式保存元数据,各有哪些特点?

Hive支持三种不同的元存储服务器,分别为:内嵌式元存储服务器、本地元存储服务器、远程元存储服务器,每种存储方式使用不同的配置参数。

内嵌式元存储主要用于单元测试,在该模式下每次只有一个进程可以连接到元存储,Derby是内嵌式元存储的默认数据库。
在本地模式下,每个Hive客户端都会打开到数据存储的连接并在该连接上请求SQL查询。
在远程模式下,所有的Hive客户端都将打开一个到元数据服务器的连接,该服务器依次查询元数据,元数据服务器和客户端之间使用Thrift协议通信。

原文地址:https://www.cnblogs.com/liuyitan/p/14178483.html