Hive基础—Hadoop生态圈(五)


前言(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 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交互模式

在这里插入图片描述

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命令行模式

在这里插入图片描述

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 基本数据类型

数据类型长度示例
TINYINT1byte有符号整数20
SMALINT2byte有符号整数20
INT4byte有 符号整数20
BIGINT8byte有符号整数20
BOOLEAN布尔类型, true或 falseTRUE 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>
MAPMAP是 一组键 值对元组集合,使用数组表示法可以访问数据;map< string, int>
ARRAY数组是一组具有相同类型和名称的变量的集合。这些 变量 称为数组的元素,每个数组元素都有一个编号,编号从零开始;array< INT>


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

原创作者:wsjslient

作者主页:https://blog.csdn.net/wsjslient

参考来源:https://blog.csdn.net/qq_43771096/article/details/109481655

                  https://blog.csdn.net/yu0_zhang0/article/details/81776459


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值