【Python大数据笔记_day05_Hive基础操作】

一.SQL,Hive和MapReduce的关系

 用户在hive上编写sql语句,hive把sql语句转化为MapReduce程序去执行

 二.Hive架构映射流程

用户接口:

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

        --Hive提供了Hive Shell、ThriftServer等服务进程向用户提供操作接口

Driver:包括语法解析器、计划编译器、优化器、执行器

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

        注意:这部分内容不是具体的服务进程,而是封装在Hive所依赖的Jar包中的Java代码中。

元数据包含:用Hive创建的database、table、表的字段等元信息、

元数据存储:存在关系型数据库中,如hive内置的Derby数据库或者第三方MySQL数据库等,一般用MySQL数据库。

Metastore:即元数据存储服务

作用是:客户端连接Metastore服务,Metastore再去连接MySQL等数据库来存储元数据。

特点:有了Metastore服务,就可以有多个客户端同时连接,而且这些客户端不需要知道MySQL等数据库的用户名和密码,只需要Metastore服务即可。

三.MetaStore元数据管理三种模式

metastore服务配置有3中模式:内嵌模式、本地模式、远程模式

推荐使用:远程模式

 内嵌模式:

        优点:配置简单,hive命令直接可以使用

        缺点:不适用于生产环境,derby和Metastore服务都嵌入在Hive server进程中,一个服务只能被一个客户端连接:如果两个客户端以上就非常浪费资源),且元数据不能共享

本地模式:

        优点:可以单独使用外部的数据库(MySQL),元数据共享

        缺点:相对浪费资源,Metastore嵌入到了hive进程中,每启动一次hive服务,都内置启动了一个metastore。

远程模式:

        优点:可以单独使用外部库(MySQL),可以共性元数据,本地可以连接metastore服务也可以连接hiveserver2服务,增加了扩展性(其他依赖hive的软件都可以通过metastore访问hive)

        缺点:需要注意的是如果要启动hiveserver2服务需要先启动metastore服务

四.hive服务操作[重点]

启动hive服务

[root@node1 /]# nohup hive --service metastore &
[1] 10693
[root@node1 /]nohup: 忽略输入并把输出追加到"nohup.out"[root@node1 /]# nohup hive --service hiveserver2 &
[2] 10829
您在 /var/spool/mail/root 中有新邮件
[root@node1 /]nohup: 忽略输入并把输出追加到"nohup.out"[root@node1 /]# jps
2704 NodeManager
2209 DataNode
10946 Jps
10693 RunJar
3208 JobHistoryServer
2075 NameNode
2557 ResourceManager
10829 RunJar[root@node1 /]# lsof -i:10000
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java    10829 root  522u  IPv6 244847      0t0  TCP *:ndmp (LISTEN)

关闭hive服务

[root@node1 /]# jps
2704 NodeManager
2209 DataNode
10946 Jps
10693 RunJar
3208 JobHistoryServer
2075 NameNode
2557 ResourceManager
10829 RunJar
您在 /var/spool/mail/root 中有新邮件
[root@node1 /]# kill -9 10693 10829 
[root@node1 /]# jps
2704 NodeManager
2209 DataNode
10946 Jps
3208 JobHistoryServer
2075 NameNode
2557 ResourceManager
[1]-  已杀死               nohup hive --service metastore
[2]+  已杀死               nohup hive --service hiveserver2

五.客户端连接[重点]

datagrip连接hive服务

创建datagrip项目

连接hive

 

配置驱动jar包 

 datagrip连接MySQL

六.数据仓库和数据库

数据仓库和数据库的区别 

数据库与数据仓库的区别:实际讲的是OLTP与OLAP的区别
OLTP(On-Line Transaction Processin):叫联机事务处理,也可以称面向用户交易的处理系统,  主要面向用户进行增删改查

OLAP(On-Line Analytical Processing):叫联机分析处理,一般针对某些主题的历史数据进行分析 主要面向分析,支持管理决策。

数据仓库主要特征:面向主题的(Subject-Oriented )、集成的(Integrated)、非易失的(Non-Volatile)和时变的(Time-Variant)

数据仓库的出现,并不是要取代数据库,主要区别如下:
    数据库是面向事务的设计,数据仓库是面向主题设计的。
    数据库是为捕获数据而设计,数据仓库是为分析数据而设计
    数据库一般存储业务数据,数据仓库存储的一般是历史数据。
    数据库设计是尽量避免冗余,一般针对某一业务应用进行设计,比如一张简单的User表,记录用户名、密码等简单数据即可,符合业务应用,但是不符合分析。
    数据仓库在设计是有意引入冗余,依照分析需求,分析维度、分析指标进行设计。

数据仓库基础三层结构

 

 源数据层(ODS):此层数据无任何更改,直接沿用外围系统数据结构和数据,不对外开放;为临时存储层,是接口数据的临时存储区域,为后一步的数据处理做准备。

数据仓库层(DW):也称为细节层,DW层的数据应该是一致的、准确的、干净的数据,即对源系统数据进行了清洗(去除了杂质)后的数据。

数据应用层(DA或APP):前端应用直接读取的数据源;根据报表、专题分析需求而计算生成的数据。

 ETL和ELT

广义上ETL:数据仓库从各数据源获取数据及在数据仓库内的数据转换和流动都可以认为是ETL(抽取Extract, 转化Transform , 装载Load)的过程。

但是在实际操作中将数据加载到仓库却产生了两种不同做法:ETL和ELT。

狭义上ETL: 先从数据源池中抽取数据,数据保存在临时暂存数据库中(ODS)。然后执行转换操作,将数据结构化并转换为适合目标数据仓库系统的形式,然后将结构化数据加载到数据仓库中进行分析。

ELT: 从数据源中抽取后立即加载。没有专门的临时数据库(ODS),这意味着数据会立即加载到单一的集中存储库中,数据在数据仓库系统中直接进行转换,然后进行分析

 七.hive数据库操作

基本操作[掌握]

创建数据库: create database [if not exists] 库名 [location '路径'];

使用数据库: use 库名;

注意: location路径默认是:  hdfs://node1:8020/user/hive/warehouse/库名.db

删除数据库: drop database 数据库名 [cascade];

-- hive库的核心操作
-- 创建数据库
-- 注意: 默认location路径是/user/hive/warehouse/库名.db
-- 库路径: /user/hive/warehouse/hive1.db
create database hive1;
-- 库路径: /user/hive/warehouse/test.db
create database test;
-- 使用库
use hive1;
-- 注意: 建库的时候可以使用location修改数据库路径
-- 库路径: /test1
create database test1 location '/test1';-- 为了方便演示location效果,可以先去分别创建一个简单的表
-- 表路径:/user/hive/warehouse/hive1.db/stu
create table hive1.stu(id int,name string);
-- 表路径:/test1/stu
create table test1.stu(id int,name string);-- 演示删除空数据库
drop database test;
-- 盐水删除非空数据库
drop database test1; -- 报错,hive比较特殊,drop不能直接删除有表的库
-- drop+cascade能够删除有表的库
drop database test1 cascade ;

其他操作[了解]

创建数据库: create database [if not exists] 库名 [comment '注释'] [location '路径'] [with dbproperties ('k'='v')];

修改数据库路径: alter database 库名 set location 'hdfs://node1.itcast.cn:8020/路径'
修改数据库属性: alter database 库名 set dbproperties ('k'='v');

查看所有的数据库: show databases;
查看某库建库语句: show create database 库名;
查看指定数据库信息: desc database 库名;
查看指定数据库扩展信息: desc database extended 库名;
查看当前使用的数据库: select current_database();

-- hive库的其他操作
-- schema在hive/mysql中相当于database关键字
create schema demo1;
-- comment: 建库的时候可以添加注释,建议不要中文,因为乱码
-- location: 建表的时候可以指定hdfs上库目录路径,建议使用默认路径/user/hive/warehouse/库名.db
-- with dbproperties: 建表的时候可以设置属性,格式是k=v,了解即可
create database demo2comment 'database'location '/user/hive/warehouse/demo2.db'with dbproperties ('name' = 'bz666');
create database demo3;-- 查看指定库的建库语句
show create database demo2;
show create database demo3;
-- 查看所有的数据库
show databases;
-- 查看当前使用数据库
select current_database();
-- 查看指定库的基本信息
desc database demo2;
-- 查看指定库的扩展信息
desc database extended  demo2;-- 修改location路径
-- 注意: 必须是绝对路径,而且修改后的路径如果不存在,不会直接创建
alter database demo2 set location 'hdfs://node1.itcast.cn:8020/demo2.db';
-- 以后建表的时候自动创建
create table demo2.stu(id int,name string);
-- 再次查看指定库的扩展信息
desc database extended  demo2;-- 修改dbproperties
alter database demo2 set dbproperties('name'='binzi');
-- 再次查看指定库的扩展信息
desc database extended  demo2;

八.Hive表概述

建表语法

create [external] table [if not exists] 表名(字段名 字段类型 , 字段名 字段类型 , ... )
[partitioned by (分区字段名 分区字段类型)] # 分区表固定格式
[clustered by (分桶字段名)  into 桶个数 buckets]  # 分桶表固定格式 注意: 可以排序[sorted by (排序字段名 asc|desc)]
[row format delimited fields terminated by '字段分隔符'] # 自定义字段分隔符固定格式
[stored as textfile]  # 默认即可
[location 'hdfs://node1.itcast.cn:8020/user/hive/warehouse/库名.db/表名'] # 默认即可
; # 注意: 最后一定加分号结尾

注意: 关键字顺序是从上到下从左到右,否则报错

数据类型

 基本数据类型:  整数: int  小数: float double  字符串: string varchar(长度)  日期: date timestamp

复杂数据类型:  集合: array  映射: map   结构体: struct  联合体: union 

表分类 

 Hive中可以创建的表有好几种类型, 分别是:
内部表(管理表): MANAGED_TABLE
    分区表
    分桶表
外部表(非管理表): EXTERNAL_TABLE
    分区表
    分桶表
    
default默认库存储路径: hdfs://node1.itcast.cn:8020/user/hive/warehouse   
自定义库在HDFS的默认存储路径: hdfs://node1.itcast.cn:8020/user/hive/warehouse/库名.db
自定义表在HDFS的默认存储路径: hdfs://node1.itcast.cn:8020/user/hive/warehouse/库名.db/表名
业务数据文件在HDFS的默认存储路径: hdfs://node1.itcast.cn:8020/user/hive/warehouse/库名.db/表名/业务数据文件

内部表和外部表区别?
内部表: 未被external关键字修饰的即是内部表, 即普通表。 内部表又称管理表,还可以叫托管表
    删除内部表:直接删除元数据(metadata)和存储数据本身
外部表: 被external关键字修饰的即是外部表, 即关联表。 还可以叫非管理表或非托管表
    删除外部表:仅仅是删除元数据(metadata),不会删除存储数据本身

-- 内部表(又叫管理表或者托管表)
create table stu1(id int,name string
);
-- 外部表(又叫非管理表,非托管表)
create external table stu2(id int,name string
);
-- 查看表结构
desc stu1;
desc stu2;
-- 查看表格式化信息
desc formatted stu1; -- 内部表类型: managed_table
desc formatted stu2; -- 外部表类型: external_table-- 演示内外部表的重点区别
-- 删除内部表(管理表/托管表),会删除表相关的所有数据
insert into stu1 values(1,'张三');
drop table stu1;
-- 删除外部表,只删除了元数据,hdfs中业务数据保留
insert into stu2 values(1,'张三');
drop table stu2;
-- 再次建表后,可以使用location重新关联原来hdfs保留的业务数据
create external table stu22(id int,name string
)location '/user/hive/warehouse/hive1.db/stu2';
-- 验证数据
select * from stu22 limit 10;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/137535.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大文件传输小知识 | UDP和TCP哪个传输速度快?

在网络世界中,好像有两位“传输巨头”常常被提起:UDP和TCP。它们分别代表着用户数据报协议和传输控制协议。那么它们是什么?它们有什么区别?它们在传输大文件时的速度又如何?本文将深度解析这些问题,帮助企…

基于SSM的课程管理系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

git 生成公钥

1、通过命令 ssh-keygen 生成 SSH Key: ssh-keygen -t ed25519 -C "Gitee SSH Key" 三次回车 2、查看生成的 SSH 公钥和私钥: ls ~/.ssh/ 3、把公钥设置到git id_ed25519.pub 4、测试 ssh -T gitgitee.com 成功!!&…

GPT-4 Turbo 发布 | 大模型训练的新时代:超算互联网的调度与调优

★OpenAI;ChatGPT;Sam Altman;Assistance API;GPT4 Turbo;DALL-E 3;多模态交互;算力调度;算力调优;大模型训练;GH200;snowflake;AGI;A…

【算法 | 数论 No.1】AcWing1246. 等差数列

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【AcWing算法提高学习专栏】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程&a…

10. GPIO中断

10. GPIO中断 回顾stm32中断系统STM32中断向量表中断向量偏移NVIC中断控制器 Cortex_A7 中断系统中断向量表GIC控制器中断IDGIC逻辑分块CP15协处理器c0寄存器c1寄存器c12寄存器c15寄存器 中断使能中断优先级设置优先级数配置 GICC_PMR抢占优先级和子优先级位数设置 GICC_BPR优先…

服务器往客户端发送字符串的网络编程

服务器主要就是能够打开命令行提供的网络端口&#xff0c;然后一有客户端连接上&#xff0c;就会向客户端发送Welcome to Our Server!这段话。 服务器代码serverSayWelcome.c的代码如下&#xff1a; #include <stdio.h> #include <stdlib.h> #include <string.…

[LeetCode]-225. 用队列实现栈

目录 225. 用队列实现栈 题目 ​思路 代码 225. 用队列实现栈 225. 用队列实现栈 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/implement-stack-using-queues/description/ 题目 请你仅使用两个队列实现一个后入先出&#xff08;LIFO&#xff0…

一文6个步骤带你实现接口测试入门!

一、接口测试概述 1 什么是接口测试&#xff1a; 接口测试是测试系统组件间交互的一种测试。接口测试主要用于检测外部系统与系统之间&#xff0c;内部各个子系统之间的交互点。测试的重点是要检查数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及系统间的相互逻辑…

WebGL-Vue3-TS-Threejs:基础练习 / Javascript 3D library / demo

一、理解Three.js Three.js是一个用于WebGL渲染的JavaScript库。它提供了一组工具和类&#xff0c;用于创建和渲染3D图形和动画。简单理解&#xff08;并不十分准确&#xff09;&#xff0c;Three.js之于WebGL&#xff0c;好比&#xff0c;jQuery.js之于JavaScript。 OpenGL …

在Google Kubernetes集群创建分布式Jenkins(二)

上一篇博客在Google Kubernetes集群创建分布式Jenkins(一)-CSDN博客我介绍了如何在GCP的K8S集群上部署一个分布式的Jenkins&#xff0c;并实现了一个简单的Pipeline的运行。 在实际的开发中&#xff0c;我们通常都会按照以下的CICD流程来设置Pipeline 在我司的实际实践中&…

ubuntu18-recvfrom接收不到广播报文异常分析

目录 前言 一、UDP广播接收程序 二、异常原因分析 总结 前言 在ubuntu18.04系统中&#xff0c;编写udp接收程序发现接收不到广播报文&#xff0c;使用抓包工具tcpdump可以抓取到广播报文&#xff0c;在此对该现象分析解析如下文所示。 一、UDP广播接收程序 UDP广播接收程序如…

接收表单数据

如果您尝试按下提交按钮&#xff0c;浏览器将显示“Method Not Allowed”错误。这是因为到目前为止&#xff0c;前一节中的登录视图函数完成了一半的工作。它可以在网页上显示表单&#xff0c;但是还没有逻辑来处理用户提交的数据。这是Flask-WTF使工作变得非常简单的另一个领域…

实战!工作中常用的设计模式

文章目录 前言一、策略模式1.1、 业务场景1.2 、策略模式定义1.3、 策略模式使用1.3.1、一个接口&#xff0c;两个方法1.3.2、不同策略的差异化实现1.3.3、使用策略模式 二、责任链模式2.1、业务场景2.2、责任链模式定义2.3、责任链模式使用2.3.1、一个接口或者抽象类2.3.2、每…

【springboot配置项动态刷新】与【yaml文件转换为java对象】

文章目录 一&#xff0c;序言二&#xff0c;准备工作1. pom.xml引入组件2. 配置文件示例 三&#xff0c;自定义配置项动态刷新编码实现1. 定义自定义配置项对象2. 添加注解实现启动时自动注入3. 实现yml文件监听以及文件变化处理 四&#xff0c;yaml文件转换为java对象1. 无法使…

大容量疯了!居然想把磁带放到硬盘,100TB+是否可以实现?

1.引言 上一篇关于大容量硬盘的文章&#xff08;HDD最后的冲刺&#xff1a;大容量硬盘的奋力一搏&#xff09;中&#xff0c;我们针对大容量硬盘研发状态&#xff0c;小编最近又有了新发现。WDC希望可以通过HDD和磁带结合&#xff0c;把盘的容量提升到100TB。 2.数据大爆炸的…

问题描述:64位计算机的寻址能力是多少TB

问题描述&#xff1a;64位计算机的寻址能力是多少TB 我在看到一个32位电脑的寻址能力计算时&#xff0c;看到是这么计算的。 虚拟内存的大小受到计算机地址位数的限制&#xff0c; 那么32位电脑的寻址能力计算应该是这样 为什么网上百度到的是16TB呢&#xff0c;如下图所示 中…

大数据毕业设计选题推荐-农作物观测站综合监控平台-Hadoop-Spark-Hive

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

Web实验总

目录 网站需求&#xff1a; 思路&#xff1a; 实验步骤&#xff1a; 第一步&#xff1a;准备工作 第二步&#xff1a;新建一个存储网页的目录 第三步&#xff1a;修改本地hosts映射 第四步&#xff1a;修改配置文件&#xff0c;建立基于http服务的网站 1)创建用户song和…

宠物医院信息展示预约小程序的效果如何

养宠家庭越来越多&#xff0c;随之带来的就是宠物健康问题&#xff0c;生活条件稍微好点的家庭&#xff0c;只要宠物生病或洗护、寄养、美容等就会前往宠物医院&#xff0c;而近些年来&#xff0c;市场中的宠物医院也在连年增加&#xff0c;可以预见市场需求度较高。 而对宠物…