目录

  • 前言(Hive产生背景)
  • 一、Hive的定义
  • 二、Hive的优点&缺点
  • a、Hive的优点
  • b、Hive的缺点
  • 三、Hive环境搭建
  • 四、Hive架构
  • Hive Clients
  • Hive Services
  • Hive Storage and Compute
  • 五、Hive操作
  • 5.1交互模式
  • a.hive
  • b.beeline
  • 5.2命令行模式
  • a.hive
  • b.beeline
  • 六、Hive数据类型
  • a 基本数据类型
  • b.集合数据类型



前言(Hive产生背景)

  • &mapreduce编程的不便性、代码量较大
  • hdfs上的文件缺少schema,hdfs你存一个文件上去仅仅只是一个文件,对于schema可以这么理解,关系型数据库我们创建一张表,你要指定表名、制定列的名称、类型,这些就叫做schema,而hdfs上面是没有schema 的,那么就没有办法通过sql的方式来对分布式文件系统上的数据查询,那么这样子的话你要进行大数据处理的话,你必须要先学习java语言,或者学习mapreduce,按照mapreduce 的编程接口进行实现,这样子难度太大,门槛太高,学习成本也不低。

一、Hive的定义

        Hive是一个基于Hadoop的数据仓库工具,它可以使已经存储的数据结构化,它提供类似sql的查询语句HiveQL对数据进行分析处理。 Hive将HiveQL语句转换成一系列成MapReduce作业并执行(SQL转化为MapReduce的过程你知道吗?)。用户可以很方便的使用命令行和JDBC程序的方式来连接到hive。

  • Hive处理的数据存储在HDFS
  • Hive分析数据底层的实现是MapReduce
  • 执行程序运行在Yarn上

二、Hive的优点&缺点

a、Hive的优点

1.可通过SQL轻松访问数据的工具,从而实现数据仓库任务,如提取/转换/加载(ETL),报告和数据分析;
2.它可以使已经存储的数据结构化;
3.可以直接访问存储在Apache HDFS™或其他数据存储系统(如Apache HBase™)中的文件;
4.Hive除了支持MapReduce计算引擎,还支持Spark和Tez这两中分布式计算引擎;
5.它提供类似sql的查询语句HiveQL对数据进行分析处理;
6. 数据的存储格式有多种,比如数据源是二进制格式, 普通文本格式;

b、Hive的缺点

1.Hive的HQL表达能力有限
    Ⅰ  迭代式算法无法表达,表达能力有限(复杂的逻辑算法不好封装);
    Ⅱ  数据挖掘方面不擅长,由于MapReduce数据处理流程的限制,效率更高的算法却无法实现;
2.Hive的效率比较低
    Ⅰ  Hive自动生成的MapReduce作业,通常情况下不够智能化(机器翻译比较死板,可能不是最优解,但是一定可以实现);
    Ⅱ  Hive调优比较困难,粒度较粗(只能在框架的基础上优化,不能深入底层MR程序优化);


三、Hive环境搭建

网页链接:Hive安装&配置


四、Hive架构

hive怎么建schema hive创建schema_Hive

Hive Clients

Client是Hive的客户端,用户连接至Hive Server;在启动 Client模式的时候,需要指出Hive Server所在节点,并且在该节点启动Hive Server;

  • Thrift Client
  • JDBC Client
  • ODBC Client

Hive Services

用户接口:

  • CLI(command-line interface 命令行)
  • JDBC/ODBC(jdbc访问hive)
  • WEBUI(浏览器访问hive)

元数据:Metastore

        元数据,包括表名、表所属的数据库、表的拥有者、列/分区字段、表的类型、表的数据所在目录等内容;


驱动器:Driver

  • 实现将HQL转化为MR过程;是Hive的核心组件,整个Hive的核心,它的作用是将我们写的HQL语句进行解析、编译优化,生成执行计划,然后调用底层的MapReduce计算框架;
  • 编译过程:
  • SQL解析器:将SQL字符串(准确说HiveQL)转化为抽象语法树AST;
  • 编译器:将AST编译生成逻辑执行计划;
  • 逻辑优化器:对逻辑执行计划进行优化;
  • 物理执行器:将逻辑执行计划转成可执行的物理计划,如MR/Spark;

Hive Storage and Compute

  • Hive metastore database :元数据数据库;
  • Hadoop cluster:使用hadoop的集群进行MapReduce计算;

五、Hive操作

        Hive操作常用的客户端工具有两种,分别为:Beeline和Hive命令行(CLI);

        Hive操作又分为两种 模式 ,一种为命令行模式,一种为交互模式。

5.1交互模式

hive怎么建schema hive创建schema_bc_02

a.hive

  • 进入交互模式;
[root@single ~]# hive
  • 查看数据库;
hive> show databases;
  • 创建一个数据库;
hive> create database firsthive;

b.beeline

  • 先启动hive metastore和hiveserver2服务;
[root@single ~]# nohup hive --service metastore>/dev/null 2>&1 &
[root@single ~]# nohup hive --service hiveserver2>/dev/null 2>&1 &
  • 进入交互模式,beeline连接hiveserver2;
# 方法1:先输入beeline,再输入!connect jdbc:hive2://hadoop60:10000;
#进入beeline模式,连接hive时会提示输入用户名和密码,可以不输入,那么建表的所有者就是ambiguous;
#single是主机名,也可以写ip地址;

[root@single ~]# beeline

beeline> !connect jdbc:hive2://single:10000

0: jdbc:hive2://single:10000> 


# 方法2:直接连接;

[root@single ~]# beeline -u jdbc:hive2://single:10000

0: jdbc:hive2://single:10000>

5.2命令行模式

hive怎么建schema hive创建schema_Hive_03

a.hive

  • 使用-e参数来直接执行sql语句
# 注意sql语句末尾有分号
[root@single ~]# hive -e "show databases;"
  • 使用 –f 参数通过指定文本文件来执行sql语句,可以是本地文本文件也可以是HDFS文件
#本地系统
 [root@single ~]# hive -f hive1.sql
 
 # HDFS文件系统
[root@hadoop60 ~]# hive -f hdfs://single:8020/test/hive.sql;

b.beeline

  • 需要先后台启动HiveServer2
#hive.sql内容:show databases;

[root@single ~]# nohup hive --service hiveserver2>/dev/null 2>&1 &
  • 使用-e参数来直接执行sql语句
[root@single ~]# beeline -u "jdbc:hive2://single:10000" -e "show databases;"
  • 使用 –f 参数通过指定文本文件来执行sql语句
[root@single ~]# beeline -f hive1.sql -u "jdbc:hive2://single:10000"

六、Hive数据类型

a 基本数据类型

数据类型

长度

示例

TINYINT

1byte有符号整数

20

SMALINT

2byte有符号整数

20

INT

4byte有 符号整数

20

BIGINT

8byte有符号整数

20

BOOLEAN

布尔类型, true或 false

TRUE FALSE

FLOAT

单精度浮点数

2.372

DOUBLE

双精度浮点数

3.1415

STRING

字符系列;可以指定字符集;可以使用单引号或者双引号;

"first hive sequence"

'second hive sequence'

TIMESTAMP

时间类型

'2020 02 12 13:19:00.345'

BINARY

字节数组


b.集合数据类型

数据类型

描述

示例

STRUCT

和c语言中的 struct类似,都可以通过 “点 ”符号 访问元素内容;

struct< name:STRING, age:INT>

MAP

MAP是 一组键 值对元组集合,使用数组表示法可以访问数据;

map< string, int>

ARRAY

数组是一组具有相同类型和名称的变量的集合。这些 变量 称为数组的元素,每个数组元素都有一个编号,编号从零开始;

array< INT>



PS:如果有写错或者写的不好的地方,欢迎各位大佬在评论区留下宝贵的意见或者建议,敬上!如果这篇博客对您有帮助,希望您可以顺手帮我点个赞!不胜感谢!



原创作者:wsjslient