Hive的基本知识与操作

Hive的基本知识与操作

Hive的基本概念

Hive本质是将SQL转换为MapReduce的任务进行运算,底层由HDFS来提供数据存储,说白了hive可以理解为一个将SQL转换为MapReduce的任务的工具,甚至更近一步说hive就是一个MapReduce客户端。

Hive的基本知识与操作

为什么使用Hive?

如果直接使用hadoop的话,人员学习成本太高,项目要求周期太短,MapReduce实现复杂查询逻辑开发难度太大。如果使用hive的话,可以操作接口采用类SQL语法,提高开发能力,免去了写MapReduce,减少开发人员学习成本,功能扩展很方便(比如:开窗函数)。

Hive的特点:

1、可扩展性

​ Hive可以自由的扩展集群的规模,一般情况下不需要重启服务

2、延申性

​ Hive支持自定义函数,用户可以根据自己的需求来实现自己的函数

3、容错

​ 即使节点出现错误,SQL仍然可以完成执行

Hive的优缺点:

优点:

​ 1、操作接口采用类sql语法,提供快速开发的能力(简单、容易上手)

​ 2、避免了去写MapReduce,减少开发人员的学习成本

​ 3、Hive的延迟性比较高,因此Hive常用于数据分析,适用于对实时性要求不高的场合

​ 4、Hive 优势在于处理大数据,对于处理小数据没有优势,因为 Hive 的执行延迟比较高。(不断地开关JVM虚拟机)

​ 5、Hive 支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。

​ 6、集群可自由扩展并且具有良好的容错性,节点出现问题SQL仍可以完成执行

缺点:

​ 1、Hive的HQL表达能力有限

​ (1)迭代式算法无法表达 (反复调用,mr之间独立,只有一个map一个reduce,反复开关)

​ (2)数据挖掘方面不擅长

​ 2、Hive 的效率比较低

​ (1)Hive 自动生成的 MapReduce 作业,通常情况下不够智能化

​ (2)Hive 调优比较困难,粒度较粗 (hql根据模板转成mapreduce,不能像自己编写mapreduce一样精细,无法控制在map处理数据还是在reduce处理数据)

Hive应用场景

日志分析:大部分互联网公司使用hive进行日志分析,如百度、淘宝等。

统计一个网站一个时间段内的 PV(页面浏览量) UV(统计一天内某站点的用户数) SKUSPU

Hive架构

Hive的基本知识与操作

Client

Hive允许client连接的方式有三个CLI(hive shell)、JDBC/ODBC(java访问hive)、WEBUI(浏览器访问 hive)。JDBC访问时中间件Thrift软件框架,跨语言服务开发。DDL DQL DML,整体仿写一套SQL语句。

​ 1)client–需要下载安装包

​ 2)JDBC/ODBC 也可以连接到Hive
​ 现在主流都在倡导第二种 HiveServer2/beeline
​ 做基于用户名和密码安全的一个校验

​ 3)Web Gui
​ hive给我们提供了一套简单的web页面
​ 我们可以通过这套web页面访问hive 做的太简陋了

元数据包括表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是 外部表)、表的数据所在目录等。

​ 一般需要借助于其他的数据载体(数据库)

​ 主要用于存放数据库的建表语句等信息

​ 推荐使用Mysql数据库存放数据

​ 连接数据库需要提供:uri username password driver

sql语句是如何转化成MR任务的?

元数据存储在数据库中,默认存在自带的derby数据库(单用户局限性)中,推荐使用Mysql进行存储。

​ 1) 解析器(SQL Parser):将SQL字符串转换成抽象语法树AST,这一步一般都用第三方工具库完 成,比如ANTLR;对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。

​ 2) 编译器(Physical Plan):将AST编译生成逻辑执行计划。

​ 3) 优化器(Query Optimizer):对逻辑执行计划进行优化。

​ 4) 执行器(Execution):把逻辑执行计划转换成可以运行的物理计划。对于Hive来说,就是 MR/Spark。

数据处理

Hive的数据存储在HDFS中,计算由MapReduce完成。HDFS和MapReduce是源码级别上的整合,两者结合最佳。解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。

Hive的三种交互方式

第一种交互方式

shell交互Hive,用命令hive启动一个hive的shell命令行,在命令行中输入sql或者命令来和Hive交互。

服务端启动metastore服务(后台启动):nohup hive --service metastore >/dev/null &
进入命令:hive
退出命令行:quit;

第二种交互方式

Hive启动为一个服务器,对外提供服务,其他机器可以通过客户端通过协议连接到服务器,来完成访问操作,这是生产环境用法最多的

服务端启动hiveserver2服务:
nohup hive --service metastore >/dev/null &
nohup hiveserver2 >/dev/null &

需要稍等一下,启动服务需要时间:
进入命令:1)先执行: beeline ,再执行: !connect jdbc:hive2://master:10000
        2)或者直接执行:  beeline -u jdbc:hive2://master:10000 -n root
退出命令行:!exit

第三种交互方式

使用 –e 参数来直接执行hql的语句

bin/hive -e "show databases;"

使用 –f 参数通过指定文本文件来执行hql的语句

特点:执行完sql后,回到linux命令行。

创建一个sql文件:vim hive.sql
里面写入要执行的sql命令
use myhive;
select * from test;
hive -f hive.sql

Hive元数据

Hive元数据库中一些重要的表结构及用途,方便Impala、SparkSQL、Hive等组件访问元数据库的理解。

1、存储Hive版本的 元数据表(VERSION),该表比较简单,但很重要,如果这个表出现问题,根本进不来Hive-Cli。比如该表不存在,当启动Hive-Cli的时候,就会报错”Table ‘hive.version’ doesn’t exist”

2、Hive数据库相关的元数据表(DBS、DATABASE_PARAMS)

​ DBS:该表存储Hive中所有数据库的基本信息。

​ DATABASE_PARAMS:该表存储数据库的相关参数。

3、Hive表和视图相关的元数据表

​ 主要有TBLS、TABLE_PARAMS、TBL_PRIVS,这三张表通过TBL_ID关联。
​ TBLS:该表中存储Hive表,视图,索引表的基本信息。
​ TABLE_PARAMS:该表存储表/视图的属性信息。
​ TBL_PRIVS:该表存储表/视图的授权信息。
4、Hive文件存储信息相关的元数据表

​ 主要涉及SDS、SD_PARAMS、SERDES、SERDE_PARAMS,由于HDFS支持的文件格式很多,而建Hive表时候也可以指定各种文件格式,Hive在将HQL解析成MapReduce时候,需要知道去哪里,使用哪种格式去读写HDFS文件,而这些信息就保存在这几张表中。
​ SDS:该表保存文件存储的基本信息,如INPUT_FORMAT、OUTPUT_FORMAT、是否压缩等。TBLS表中的SD_ID与该表关联,可以获取Hive表的存储信息。
​ SD_PARAMS: 该表存储Hive存储的属性信息。
​ SERDES:该表存储序列化使用的类信息。
​ SERDE_PARAMS:该表存储序列化的一些属性、格式信息,比如:行、列分隔符。
5、Hive表字段相关的元数据表

​ 主要涉及COLUMNS_V2:该表存储表对应的字段信息。

Hive的基本操作

创建数据库

数据库在hdfs上的默认路径是/hive/warehouse/*.db

create database testdb;

避免要创建的数据库已经存在错误,增加if not exists判断。 (标准写法)

create database if not exists testdb;

创建数据库并指定位置

create database if not exists testdb location '/testdb.db';

修改数据库

数据库的其他元数据信息都是不可更改的,包括数据库名和数据库所在的目录位置。

alter database dept set dbproperties('createtime'='20220531');为数据库的DBPROPERTIES设置键值对属性值

查看数据库详细信息

显示数据库

show databases;

通过like过滤显示数据库

show datebases like '*t*';(这里是*,sql里是%)

查看数据库详情

desc database testdb;

切换数据库

use testdb;

删除数据库

最简写法

drop database testdb;

如果删除的数据库不存在,最好使用if exists判断数据库是否存在。否则会报错:FAILED: SemanticException [Error 10072]: Database does not exist: db_hive

drop database if exists testdb;

如果数据库不为空,使用cascade命令进行强制删除。报错信息如下FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. InvalidOperationException(message:Database db_hive is not empty. One or more tables exist.)

drop database if exists testdb cascade;

Hive的数据类型

基础数据类型

类型 Java数据类型 描述 TINYINT byte 8位有符号整型。取值范围:-128~127。 SMALLINT short 16位有符号整型。取值范围:-32768~32767。 INT int 32位有符号整型。取值范围:-2 31 ~2 31 -1。
BIGINT

long 64位有符号整型。取值范围:-2 63 +1~2 63 -1。 BINARY 二进制数据类型,目前长度限制为8MB。 FLOAT float 32位二进制浮点型。 DOUBLE double 64位二进制浮点型。
DECIMAL(precision,scale)

10进制精确数字类型。precision:表示最多可以表示多少位的数字。取值范围:1

Original: https://www.cnblogs.com/bfy0221/p/16667380.html
Author: 伍点
Title: Hive的基本知识与操作

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/113957/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • MySQL日期函数

    目录 0 特殊时间参数说明 1 日期函数 1.1 DATE 1.2 DATE_FORMAT 1.3 ADDDATE, DATE_ADD 1.4 DATE_SUB 1.5 DATED…

    大数据 2023年2月24日
    012
  • Hive中lateral view的应用到源码解读

    对于从事大数据开发的同学,经常会应用到explode(炸裂函数)和lateral view(侧输出流)。 Explode(炸裂函数) 参数必须是array或者map格式(通常跟sp…

    大数据 2023年2月12日
    012
  • Linux基础之SQLite数据库

    嵌入式数据库篇 一、SQLite数据库 二、SQLite数据库安装 三、SQLite的命令用法 四、打开/创建数据库的C接口 五、C代码执行sql语句 六、C代码建表和插入数据 七…

    大数据 2023年2月23日
    010
  • MySQL——自增长

    目录 1.自增长 * 1.自增长基本介绍 2.自增长使用细节 2.MySQL约束练习——商店表设计 ; 1.自增长 1.自增长基本介绍 在某张表中,存在一个id列(整数),我们希望…

    大数据 2023年2月24日
    010
  • Redis的常用命令,Redis常用操作命令

    1.Redis功能操作的命令clear 清屏服务器端 两次ctrl + c 退出客户端 一次 Ctril + c 退出 / eschelp 命令名称 2.string类型的命令ge…

    大数据 2023年2月20日
    011
  • SQL字符串的分组聚合

    SQL字符串的分组聚合 我们在开发过程中有时需要对表中的数据进行分组,又需要查询出具体信息。本文中用到的是 group_concat() 函数作用:函数返回一个字符串结果,该结果由…

    大数据 2023年2月18日
    010
  • C# 连接 SqlServer 数据库

    目录 一、创建表 二、给表添加数据 三、新建 C# 项目 四、SqlServerHelper 五、连接数据库 一、创建表 首先,新建一个数据库 Test,然后新建一个表 Users…

    大数据 2023年2月15日
    011
  • Hive SQL进阶案例(一):使用LAG函数判断日期连续性

    一、LAG函数介绍 LAG函数是一个常用的窗口函数,作用是取当前行之后的数据,即把该列数据向上错位。使用方法如下: LAG(col ,n ,Default) col 是字段名称,指…

    大数据 2023年2月12日
    014
  • SQL Server 2008如何创建定期自动备份任务

    我们知道,利用 SQL Server 2008数据库可以实现数据库的 定期自动备份。方法是用SQL SERVER 2008自带的维护计划创建一个计划对数据库进行备份,下面我们将SQ…

    大数据 2023年2月18日
    011
  • redis数据结构

    ; 1. redis数据类型 redis有五种基本数据类型 string list set sorted set hash 这五种基本数据类型其实是 逻&am…

    大数据 2023年2月20日
    011
  • zookeeper集群搭建超详细教程

    一、Spirng Cloud 是什么? 简单来说 Spring Cloud 就是个框架集合,它里面包含了一系列的技术框架。在微服务如此普及的时代,如何快速构建一系列的稳定服务是比较…

    大数据 2023年3月2日
    05
  • Nacos与Eureka的区别(功能差异及选型建议)

    共同点 同时支持服务注册和服务拉取 [En] Both support service registration and service pull所有这些都支持服务提供商的健康测试…

    大数据 2023年3月1日
    012
  • 【Vue】—解决页面图片加载抖动的问题

    【Vue】—解决页面图片加载抖动的问题 原创 wx62bdb159cc1872022-07-04 09:14:51博主文章分类:【Bug】 ©著作权 文章标签 vue.js htm…

    大数据 2022年9月7日
    0132
  • kafka 3.2.0 linux部署并测试。

    前言 kafka是一个优秀的消息队列框架,现在基于linux安装写个文档记录下。 提示:以&…

    大数据 2023年2月28日
    011
  • 【大数据笔记】- Hive UDF开发超简单教程

    1.Hive UDF就是自定义函数。 自定义函数类别分为以下三种:(1)UDF 一进一出(2)UDAF 聚集函数,多进一出 类似于:count/max/min(3)UDTF 一进多…

    大数据 2023年2月8日
    017
  • Spark SQL中StructField和StructType

    每一天都会进行更新,一起冲击未来 StructField和StructType StructType—定义数据框的结构 StructType定义DataFrame的结构…

    大数据 2023年2月24日
    010
最近整理资源【免费获取】:   👉 程序员最新必读书单  | 👏 互联网各方向面试题下载 | ✌️计算机核心资源汇总