首页 > 其他分享 >Hive学习记录

Hive学习记录

时间:2023-04-10 09:11:34浏览次数:47  
标签:comment 记录 max 数据库 hive 学习 Hive 数据

数仓概念

  • 数据仓库(英语:Data Warehouse,简称数仓、DW),是一个用于存储、分析、报告的数据系统。
  • 数据仓库的目的是构建面向分析的集成化数据环境,分析结果为企业提供决策支持(Decision Support)

SQL语法分类

SQL主要语法分为两个部分:数据定义语言 (DDL)和数据操纵语言 (DML)

  • DDL语法使我们有能力创建或删除表,以及数据库、索引等各种对象,但是不涉及表中具体数据操作:
    CREATE DATABASE - 创建新数据库
    CREATE TABLE - 创建新表
  • DML语法是我们有能力针对表中的数据进行插入、更新、删除、查询操作:
    SELECT - 从数据库表中获取数据
    UPDATE - 更新数据库表中的数据
    DELETE - 从数据库表中删除数据
    INSERT - 向数据库表中插入数据

Apache Hive

什么是Hive

  • Apache Hive是一款建立在Hadoop之上的开源数据仓库系统,可以将存储在Hadoop文件中的结构化、半结构化数据文件映射为一张数据库表,基于表提供了一种类似SQL的查询模型,称为Hive查询语言(HQL),用于访问和分析存储在Hadoop文件中的大型数据集。
  • Hive核心是将HQL转换为MapReduce程序,然后将程序提交到Hadoop群集执行。
  • Hive由Facebook实现并开源。

映射信息记录

Hive能将数据文件映射成为一张表,这个映射是指文件和表之间的关系

  • 映射在数学上称之为一种对应关系,比如y=x+1,对于每一个x的值都有与之对应的y的值。
  • 在hive中能够写sql处理的前提是针对表,而不是针对文件,因此需要将文件和表之间的对应关系描述记录清楚。映射信息专业的叫法称之为元数据信息(元数据是指用来描述数据的数据 metadata)。
  • 具体来看,要记录的元数据信息包括:
    表对应着哪个文件(位置信息)
    表的列对应着文件哪一个字段(顺序信息)
    文件字段之间的分隔符是什么

Hive组件

  • 用户接口

包括 CLI、JDBC/ODBC、WebGUI。其中,CLI(command line interface)为shell命令行;Hive中的Thrift服务器允许
外部客户端通过网络与Hive进行交互,类似于JDBC或ODBC协议。WebGUI是通过浏览器访问Hive。

  • 元数据存储

通常是存储在关系数据库如 mysql/derby中。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。

  • Driver驱动程序,包括语法解析器、计划编译器、优化器、执行器

完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有执行引擎调用执行。

  • 执行引擎

Hive本身并不直接处理数据文件。而是通过执行引擎处理。当下Hive支持MapReduce、Tez、Spark3种执行引擎。

Apache Hive安装部署简介

Hive Metadata

  • Hive Metadata即Hive的元数据。
  • 包含用Hive创建的database、table、表的位置、类型、属性,字段顺序类型等元信息。
  • 元数据存储在关系型数据库中。如hive内置的Derby、或者第三方如MySQL等。

Hive Metastore

  • Metastore即元数据服务。Metastore服务的作用是管理metadata元数据,对外暴露服务地址,让各种客户端通过连接metastore服务,由metastore再去连接MySQL数据库来存取元数据。
  • 有了metastore服务,就可以有多个客户端同时连接,而且这些客户端不需要知道MySQL数据库的用户名和密码只需要连接metastore 服务即可。某种程度上也保证了hive元数据的安全。

安装步骤:

  1. 安装hive
  2. 安装元数据数据库mysql
  3. 修改各种配置文件
  4. 添加驱动到hive的lib路径下

启动hive:

在hive安装的服务器上,首先启动metastore服务,然后启动hiveserver2服务。
先启动metastore服务 然后启动hiveserver2服务

nohup /export/servers/hive/bin/hive --service metastore &
nohup /export/servers/hive/bin/hive --service hiveserver2 &

bin/beeline客户端使用

  • 在node3上使用beeline客户端进行连接访问。需要注意hiveserver2服务启动之后需要稍等一会才可以对外提供服务。
  • Beeline是JDBC的客户端,通过JDBC协议和Hiveserver2服务进行通信,协议的地址是:
    jdbc:hive2://node1:10000
[root@node3 ~]#/export/server/hive/bin/beeline 
Beeline version 3.1.2 by Apache Hive
beeline> ! connect jdbc:hive2://node1:10000
Connecting to jdbc:hive2://node1:10000
Enter username for jdbc:hive2://node1:10000: root
Enter password for jdbc:hive2://node1:10000: 
Connected to: Apache Hive (version 3.1.2)
Driver: Hive JDBC (version 3.1.2)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://node1:10000> 

** 实例:**

在Hive中,默认的数据库叫做default,存储数据位置位于HDFS的/user/hive/warehouse下。
用户自己创建的数据库存储位置是/user/hive/warehouse/database_name.db下

  1. 文件archer.txt中记录了手游《王者荣耀》射手的相关信息,包括生命、物防、物攻等属性信息,其中
    字段之间分隔符为制表符\t,要求在Hive中建表映射成功该文件。
  2. 字段含义:id、name(英雄名称)、hp_max(最大生命)、mp_max(最大法力)、attack_max(最高物攻)
    、defense_max(最大物防)、attack_range(攻击范围)、role_main(主要定位)、role_assist(次要定位)。
    分析一下:字段都是基本类型,字段的顺序需要注意一下。
    字段之间的分隔符是制表符,需要使用row format语法进行指定。
--创建数据库并切换使用
create database if not exists itheima;
use itheima;
--ddl create table
create table t_archer(
id int comment "ID",
name string comment "英雄名称",
hp_max int comment "最大生命",
mp_max int comment "最大法力",
attack_max int comment "最高物攻",
defense_max int comment "最大物防",
attack_range string comment "攻击范围",
role_main string comment "主要定位",
role_assist string comment "次要定位"
) comment "王者荣耀射手信息"
row format delimited
fields terminated by "\t";

建表成功之后,在Hive的默认存储路径下就生成了表对应的文件夹;
把archer.txt文件上传到对应的表文件夹下。

#在node机器上进行操作
cd ~
mkdir hivedata
cd hivedata/
#把文件从课程资料中首先上传到node1 linux系统上
#执行命令把文件上传到HDFS表所对应的目录下
hadoop fs -put archer.txt /user/hive/warehouse/itheima.db/t_archer

执行查询操作,可以看出数据已经映射成功。

Hive DML语句与函数使用

标签:comment,记录,max,数据库,hive,学习,Hive,数据
From: https://www.cnblogs.com/do-ma/p/17296771.html

相关文章

  • Git config设置相关记录
    如下图中所示,git提供了三层级别的config设置,下层的设置都可以个性化覆写上层的设置,举例来说就是global层的设置可以覆写system层的设置。 ......
  • head/reset/revert/rebase代码回滚全解:git提交记录的背后原理
    多人合作程序开发的过程中,我们有时会出现错误提交的情况,此时我们希望能撤销提交操作,让程序回到提交前的样子,操作有:回退(reset):reset是彻底回退到指定的commit版本,该commit后的所有commit都将被清除;reset执行后不会产生记录反转(revert):revert仅是撤销指定commit的修改,并不影响后续......
  • C/C++模拟校园卡消费记录查询系统[2023-04-09]
    C/C++模拟校园卡消费记录查询系统[2023-04-09]模拟校园卡1问题描述同学们都在机房做实验或自由上机,请根据自己实际使用情况编写一份模拟校园卡消费记录查询系统,实现登录,计费,挂失,统计等相关功能。2功能要求主要功能模块:(1)登录模块:同学根据自己设定的密码登录。三次错误则......
  • unix并发技术的学习及在扫描器上的应用二
    unix并发技术的学习及在扫描器上的应用二上一篇并发技术说的是多进程,本来想在那的基础上加进进程间同步和通信,不过暂时还没有掌握到,只能换成多线程来做rp了.第一部分--基础知识一.线程概念: 线程是提高代码响应和性能的绝好的手段,其由内核按时间分片进行管理.进程可含多线程,线程间......
  • unix并发技术的学习及在扫描器上的应用一
    ***条件和时间问题,程序暂时还没进行测试.              unix并发技术的学习及在扫描器上的应用一我一直学着写扫描器.我的一个方向是:多进程--多线程--线程安全(MT-safe).都想在扫描器上实现.现在学习多进程部分.第一部分--基本知识 一.进程概念:进程定义了一计算的......
  • verilog基本语法学习笔记
    input和outputmodule/endmodule:表征模块的开始与结束。example:模块名可由用户指定,可包含字母、数字及下划线,需以字母开头,区分大小写assign:赋值操作关键字,该关键字后可跟一个赋值表达式,该关键字是实现组合逻辑操作的一种主要描述方式。input/output:表征该信号的方向,除输入、......
  • 【学习笔记】go协程和通道
    虽然,线程池为逻辑编写者提供了线程分配的抽象机制。但是,如果面对随时随地可能发生的并发和线程处理需求,线程池就不是非常直观和方便了。能否有一种机制:使用者分配足够多的任务,系统能自动帮助使用者把任务分配到CPU上,让这些任务尽量并发运作。这种机制在Go语言中被称为goroutine。go......
  • 【学习笔记】rabbitmq设置队列ttl和使用延迟插件的代码示例
    文章目录设置队列ttl配置文件生产者消费者设置消息ttl延迟插件的使用修改配置文件修改生产者修改消费者设置队列ttl代码架构:创建两个队列QA和QB,两者队列TTL分别设置为10S和40S,然后在创建一个交换机X和死信交换机Y,它们的类型都是direct,创建一个死信队列QD配置文件spring.rabbitmq.h......
  • 【spring学习笔记】(二)Spring MVC注解配置 参数转换注解@RequestMapping@RequestParam
    @TOC介绍在SpringMVC项目中,<\context:component-scan>配置标签还会开启@Request-Mapping、@GetMapping等映射注解功能(也就是会注册RequestMappingHandler-Mapping和RequestMappingHandlerAdapter等请求映射和处理等组件),但是<context:component-scan>不支持数据转换或验证等注解功......
  • 百度高德地图JS-API学习手记:地图基本设置与省市区数据加载
    无论是百度还是高德地图开发,还是高德地图开发。官方的给的案例启示很多,copy再修改下,就完成了https://lbs.amap.com/api/javascript-api/summary  http://lbsyun.baidu.com/index.php?title=jspopular3.0这个大致看一下,我想。有点GIS基础都能完成地图开发。个人认为百度的文档......