Hive基础知识

                                            Hive基础知识 

1 Hive相关概念

1.1 Hive是什么

Hive是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据映射为一张数据库表,并提供 HQL(Hive SQL)查询功能,最终底层将HQL语句转换为MapReduce任务的,底层数据是存储在 HDFS 上。

1.2 Hive的产生背景

使用MapReduce,所面临的问题: ①人员学习成本太高;②项目周期要求太短;③MapReduce 实现复杂查询逻辑开发难度太大。

MapReduce分布式计算的时候,绝大多数的场景针对于结构化数据的,而针对结构化数据做数据统计分析,sql语句是最擅长的。Facebook 实现并开源Hive,操作接口采用类 SQL 的语法,提供快速开发的能力;避免了写 MapReduce,减少开发人员的学习成本;可自由扩展集群规模而无需重启服务,还支持用户自定义函数。

1.3 Hive的特点

(1)是Hive是基于 Hadoop 的一个数据仓库工具,底层数据存储在HDFS ,计算转换为MapReduce;

数据仓库与数据库的区别:见本文最后一节。Hive不支持事务。

(2)可以将结构化的数据映射为一张数据库表,Hive只能做结构化数据,所以Hive是不可以完全替代MapReduce,因为MapReduce不仅仅可以针对结构化数据,还可以针对半结构化数据;

(3)并提供 HQL(Hive SQL)查询功能;

(4)Hive的本质是将 SQL 语句转换为 MapReduce 任务运行;

(5)使不熟悉 MapReduce 的用户很方便地利用 HQL 处理和计算 HDFS 上的结构化的数据,适用于离线的批量数据计算。

1.4 Hive的优缺点

优点:

(1)可扩展性(横向扩展):可自由的扩展集群的规模,一般不需要重启。

横向扩展:用更多的节点支撑更大量的请求,通过分担压力的方式扩展集群的规模

纵向扩展:扩展一个点的能力支撑更大的请求

(2)延展性:hive中提供的内置函数271个,还可以自定义函数

(3)良好的容错性:可以保障即使有节点出现问题,SQL 语句仍可完成执行

缺点:

(1)不支持 delete操作肯update操作

(2)不支持事务:因为不支持删改,所以主要用来做 OLAP(联机分析处理),而不是OLTP(联机事务处理),这就是数据处理的两大级别

(3)查询延时很严重:因为 MapReduce 的启动过程消耗很长时间,所以不能 用在交互查询系统中。

2 Hive的安装

由于内嵌 Derby 版本,启动hive的时候只会加载当前目录下的元数据库一旦切换目录 ,元数据库无法加载,所以derby适用于单用户不适用多用户,也不能随便切换目录,所在一般不用,下面介绍外置MySQL 版本的Hive的安装

(1)准备好 MySQL;

(2)上传

apache-hive-2.3.2-bin.tar.gz

(3)解压

tar -xvzf apache-hive-2.3.2-bin.tar.gz -C /home/refuel/opt/modules

(4)配置环境变量

vim /home/refuel/.bashrc_profile 添加以下两行内容:

export HIVE_HOME=/home/refuel/opt/modules/apache-hive-2.3.2-bin

export PATH=$PATH:$HIVE_HOME/bin

保存退出后执行 source /home/refuel/.bashrc_profile

(5)修改配置文件

touch /home/refuel/opt/modules/apache-hive-2.3.2-bin/conf/hive-site.xml

vim /home/refuel/opt/modules/apache-hive-2.3.2-bin/conf/hive-site.xml

<configuration><property><name>javax.jdo.option.ConnectionURL</name><value>jdbc:mysql://bigdata01:3306/hivedb?createDatabaseIfNotExist=true</value><description>元数据连接的url  bd1904hive元数据库在mysql</description><!-- 如果 mysql 和 hive 在同一个服务器节点,那么请更改 hadoop02 为 localhost --></property><property><name>javax.jdo.option.ConnectionDriverName</name><value>com.mysql.jdbc.Driver</value><description>Driver class name for a JDBC metastore</description></property><property><name>javax.jdo.option.ConnectionUserName</name><value>root</value><description>username to use against metastore database</description></property><property><name>javax.jdo.option.ConnectionPassword</name><value>123456</value><description>password to use against metastore database</description></property>
</configuration>

(6)将mysql的驱动(mysql-connector-java-5.1.40-bin.jar)放到hive的lib下

(7)初始化hive的元数据库

schematool -dbType mysql -initSchema

(8)启动 Hive 客户端

hive

 

3 Hive的基本架构

(1)用户接口层

①CLI,Shell 终端命令行,采用交互形式使用 Hive 命令行与 Hive 进行交互,最常用;

②JDBC/ODBC,是 Hive 的基于JDBC操作提供的客户端,用户通过这连接至Hive server 服务; 

③Web UI,通过浏览器访问 Hive

(2)跨语言服务平台层

能让不同的编程语言调用 Hive 的接口,老版本是thift server 新版本是hiveserver2

(3)核心驱动层

Driver驱动器组件完成将HQL语句转化为MapReduce任务,并进行提交。Hive 的核心是驱动引擎, 驱动引擎由四部分组成:

①解释器:解释器的作用是将 HiveSQL 语句转换为抽象语法树(AST)

②编译器:编译器是将抽象语法树编译为逻辑执行计划

③优化器:优化器是对逻辑执行计划进行优化

④执行器:执行器是调用底层的运行框架执行最终优化结果的逻辑执行计划

(4)元数据层

元数据:描述数据的数据,Hive的元数据就是存储在 Hive 中的数据的描述信息。Hive 中的元数据通常包括:

①描述数据库相关信息的数据(DBS),Hive中创建一个数据库这个表中插入1条数据进行描述

如:

#数据库数据存储的hdfs的位置         数据库名
hdfs://hivedb/user/hive/warehouse   default 

②描述表的信息(TBLS),Hive中有一个表,这个表就会有一条信息

如:

 #表名     dbid      表类型(MANAGED_TABLE:管理表)
 student     7       MANAGED_TABLE  

③表的字段信息(columns_v2),Hive中显示的表结构来自元数据的

如:

表id    字段名  字段类型    字段顺序
 1           id                int            0

 

4 Hive的数据组织形式

(1)Database数据库

便于数据精细化管理,将不同模块的数据,存储在不同的数据库中。

(2)Table表

1)按照权限分(表数据管理权限):分为内部表(也叫管理表)或外部表。

①内部表(managed_table):表数据(HDFS)的管理权限都是Hive自己所有的,对于存储表数据的HDFS目录 Hive具备绝对的权限的(数据的删除)。默认创建的表,都是内部表。内部表在进行删除的时候元数据和表数据一并被删除的。

②外部表(external_table):表数据的管理权限是HDFS的 ,Hive不具备表数据权限的(数据删除),Hive对这个数据  只有使用权限  没有删除权限。外部表在进行删除的时候元数据会被删除,但是表数据不会被删除,要想彻底删除需要手动删除HDFS的数据。创建时加上external 关键字就是外部表。

内部表和外部表区别:

①建表语句:默认为内部表,创建时加external为外部表;

②删除数据时:内部表删除元数据和原始数据(表数据)一并删除,外部表删除只删除元数据;

③应用场景:

           外部表:公共数据,如好多部门同用的数据,清洗原始日志数据

           内部表:如自己部门的数据

2)按照功能分:分为分区表和分桶表

①分区表:Hive的分区表完全不同于MapReduce中的分区

Hive中每一个表中存储都是海量的数据,我们在进行查询时候 如select * from person where age=18;执行的全表扫描,数据量大,全表扫描严重影响查询效率。为了提高查询效率,将原来的表进行划分成不同的区域,查询的时候降低扫描范围,这里的每一个区域  就叫做一个分区。

分区本质上相当于将原来的表划分成一个个的小表,分区依据按照需要过滤的字段作为分区字段。一个分区表对应一个目录。

/user/hive/warehouse/table1.db/person/00000  没有分区的目录
有分区目录如下:
 /user/hive/warehouse/table1.db/person/age=19/0000
 /user/hive/warehouse/table1.db/person/age=18/0000
 /user/hive/warehouse/table1.db/person/age=20/0000

②分桶表:类似于MapReduce中的分区,将原始数据 按照一定的规则,分成不同的文件

作用主要有两个:提升抽样性能(取某一个或几个桶中的数据)和提升join性能()

默认分桶规则为:分桶字段 .hash & Integer_max % 分桶个数

/user/hive/warehouse/table1.db/person/00000 没有分桶的文件
按照年龄分桶个数为3文件如下

/user/hive/warehouse/table1.db/person/00000   0
/user/hive/warehouse/table1.db/person/00001   1
/user/hive/warehouse/table1.db/person/00002   2
           
           

(3)View视图(类型:VIRTUAL_VIEW)

Hive中只存在逻辑视图 不存在物化视图,Hive中的视图不会真正的执行 仅仅将视图代表的sql语句存储,视图类似于sql查询语句的快捷方式。

视图的作用:提sql高代码的可读性

 

5 数据仓库

数据仓库(data warehouse)概念:含义数据仓库是一个面向主题的,集成的,不可更新的,随时间不断变化的数据集合,他可以支持企业或组织的决策分析处理。是多个数据库服务器的整体集群

数据库:按某种数据结构存储的数据的仓库,是单独的一个运行的数据主体集合,针对小批量的数据的。

(1)数据库是面向事务的设计,数据仓库是面向主题设计的;

(2)数据库一般存储在线数据即当前值,数据仓库存储的一般是历史数据;

(3)数据库设计是尽量避免冗余,数据仓库在设计是有意引入冗余;

(4)数据库是为捕获数据而设计,数据仓库是为分析数据而设计,数据库中数据的目标是面向业务处理人员的,为业务处理人员提供信息处理的支持,而数据仓库则是面向高层管理人员的,为其提供决策支持;

(5)数据库内数据是动态变化的,只要有业务发生,数据就会被更新,而数据仓库则是静态的历史数据,只能定期添加、刷新;

(6)数据库中数据访问频率较高,但访问量较少,而数据仓库的访问频率低但访问量却很高;

(7)数据库在访问数据时要求响应速度快,其响应时间一般在几秒内,而数据仓库的响应时间则可长达数几小时。

数据仓库的物理上就是数据库,数据库中有实时业务系统,我们通常所说的OLTP(On-Line Transaction Processing在线事务处理),要求的是数据库访问频率高,并发量和实时处理的能力要求高,按照秒甚至毫秒来进行的。比如银行、电力交换等业务。数据库中还有一种是联机分析系统。我们通常所说的OLAP(On-Line Analysis Processing),是用来存储过往的历史数据,将可能有用的所有数据归类放到一个库中,就是仓库。届时需要做趋势分析或者其他预测应用时,才访问数据库,实时性要求不是很高。OLAP业务应用比如宏观股指分析、年度的天气分析等。

 

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

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

相关文章

天池在线编程 2020国庆八天乐 - 6. 山谷序列(DP)

文章目录1. 题目2. 解题1. 题目 https://tianchi.aliyun.com/oj/118289365933779217/122647324212270018 描述&#xff1a; 给你一个长度为 n 的序列&#xff0c;在他的子序列中让你找一个山谷序列&#xff0c;山谷序列定义为&#xff1a; 序列的长度为偶数。假设子序列的长…

天池在线编程 2020国庆八天乐 - 4. 生成更大的陆地(BFS)

文章目录1. 题目2. 解题1. 题目 https://tianchi.aliyun.com/oj/118289365933779217/122647324262601668 LeetCode 上也有该题 827. 最大人工岛 描述 在一个0和1的2D网格中&#xff0c;我们最多将一个0改为1。 之后&#xff0c;最大岛屿的大小是多少&#xff1f; &#xff0…

python操作MySQL 模拟简单银行转账操作

一、基础知识 1、MySQL-python的安装 下载&#xff0c;然后 pip install 安装包 2、python编写通用数据库程序的API规范 &#xff08;1&#xff09;、数据库连接对象 connection&#xff0c;建立python客户端与数据库的网络连接&#xff0c;创建方法为 MySQLdb.Connect(参数) 参…

LeetCode 1007. 行相等的最少多米诺旋转

文章目录1. 题目2. 解题1. 题目 在一排多米诺骨牌中&#xff0c;A[i] 和 B[i] 分别代表第 i 个多米诺骨牌的上半部分和下半部分。&#xff08;一个多米诺是两个从 1 到 6 的数字同列平铺形成的 —— 该平铺的每一半上都有一个数字。&#xff09; 我们可以旋转第 i 张多米诺&a…

Hive内置函数大全

Hive内置函数大全 目录 Hive内置函数大全 1.复合类型构造函数 2 复合类型操作符 3 数值计算函数 4 日期函数 5 条件函数 6 字符串函数 7 汇总统计函数&#xff08;UDAF&#xff09; 8 表格生成函数(UDTF) 9 类型转换函数 10 数学函数 11 数学运算 12 逻辑运算 13…

python-mysql超简单银行转账

1首先先建数据库bank&#xff0c;数据结构表的名称为accoment&#xff1a; 2.python与mysql交互代码如下&#xff1a; # coding utf-8 # 1.导入模块 from pymysql import * import sys import pymysql# 2.接受命令行参数 if __name__ __main__:source_acctid 11target_acctid…

Linux Kernel ‘mp_get_count()’函数本地信息泄露漏洞

漏洞名称&#xff1a;Linux Kernel ‘mp_get_count()’函数本地信息泄露漏洞CNNVD编号&#xff1a;CNNVD-201311-054发布时间&#xff1a;2013-11-06更新时间&#xff1a;2013-11-06危害等级&#xff1a; 漏洞类型&#xff1a;信息泄露威胁类型&#xff1a;本地CVE编号&#x…

LeetCode 948. 令牌放置(贪心)

文章目录1. 题目2. 解题1. 题目 你的初始能量为 P&#xff0c;初始分数为 0&#xff0c;只有一包令牌。 令牌的值为 token[i]&#xff0c;每个令牌最多只能使用一次&#xff0c;可能的两种使用方法如下&#xff1a; 如果你至少有 token[i] 点能量&#xff0c;可以将令牌置为…

Python 中操作 MySQL 步骤

1.引入模块 在py文件中引入pymysql模块 from pymysql import *2.Connection 对象 用于建立与数据库的连接 创建对象&#xff1a;调用connect()方法 connconnect(参数列表)参数host&#xff1a;连接的mysql主机&#xff0c;如果本机是localhost参数port&#xff1a;连接的m…

nacos配置中心配置已经常见错误总结

&#x1f4bb;目录 前言1、基础架构2、依赖3、配置文件3.1、bolg-product配置文件3.1.1、application.yml配置文件3.1.2、bootstrap.yml配置文件3.1.3、nacos远程配置 3.2、bolg-system3.1.1、application.yml配置文件3.1.2、bootstrap.yml配置文件3.2.3、nacos远程配置 4、测试…

Hive解题思路

Hive解题思路 1 相关知识讲解 1.1 HQL语句的语法 sql语句的语法&#xff1a; select ..... from .... join ..... where .....group by ... having...order by|sort by|cluster by|distribute by .... &#xff08;1&#xff09;group by&#xff1a;按照某些字段的值进行…

tcl/tk demo

环境及版本说明: OSX10.9 tclsh -> tclsh8.5 wish -> wish8.5 查看本机运行环境: 1 which wish; 2 /usr/bin/wish 1 which tclsh; 2 /usr/bin/tclsh Demo功能说明: 用户登录窗口,输入用户名,密码.与文件中存储内容校验,如果相等,则提示"登录成功",否则提示&qu…

Hive高级操作

Hive高级操作 1 Hive的数据类型 1.1 原子数据类型 &#xff08;1&#xff09;Hive 是用 Java 开发的&#xff0c;Hive 里的基本数据类型和 java 的基本数据类型也是一一对应的&#xff0c; 除了 String 类型。 &#xff08;2&#xff09;有符号的整数类型&#xff1a;TINYIN…

05.序列模型 W2.自然语言处理与词嵌入(作业:词向量+Emoji表情生成)

文章目录作业1&#xff1a;1. 余弦相似度2. 单词类比3. 词向量纠偏3.1 消除对非性别词语的偏见3.2 性别词的均衡算法作业2&#xff1a;Emojify表情生成1. Baseline model: Emojifier-V11.1 数据集1.2 模型预览1.3 实现 Emojifier-V11.4 在训练集上测试2. Emojifier-V2: Using L…

LeetCode 688. “马”在棋盘上的概率(DP)

文章目录1. 题目2. 解题1. 题目 已知一个 NxN 的国际象棋棋盘&#xff0c;棋盘的行号和列号都是从 0 开始。即最左上角的格子记为 (0, 0)&#xff0c;最右下角的记为 (N-1, N-1)。 现有一个 “马”&#xff08;也译作 “骑士”&#xff09;位于 (r, c) &#xff0c;并打算进行…

LeetCode 第 36 场双周赛(304/2204,前13.8%)

文章目录1. 比赛结果2. 题目1. LeetCode 5515. 设计停车系统 easy2. LeetCode 5516. 警告一小时内使用相同员工卡大于等于三次的人 medium3. LeetCode 5518. 给定行和列的和求可行矩阵 medium4. LeetCode 5517. 找到处理最多请求的服务器 hard1. 比赛结果 做出来3题&#xff0…

数据库实例:用户注册

1.根据结构创建表的脚本如下 createtable py_users( id int unsigned auto_increment not null primary key, uname varchar(20) not null, upwd char(40) not null, is_delete bit not null default 0 ); 如下流程图&#xff0c;接下来的代码就按照这个逻辑来写 2.创建user…

HBase原理

目录 HBase原理 1 HBase架构 2 HBase中的核心概念 3 HBase的存储机制 4 HBase的寻址机制 5 HBase的读写流程 6 HBase的设计 7 HBase和Hive的整合 HBase原理 1 HBase架构 HBase的架构为主从架构&#xff0c;HMaster为主节点&#xff0c;HRegionServer为从节点 &#x…

数据库实例:用户登录

如下遍流程图&#xff0c;接下来的代码就按照这个逻辑来写 创建user_login.py文件&#xff0c;代码如下 #codingutf-8 from MySQLdb import* from hashlib importsha1 if __name____main__: try: #接收输入用户名、密码 unameraw_input(请输入用户名&…

数据库实例:mysql与mongo结合用户登录

加入mongodb后登录逻辑如下图&#xff0c;将图中nosql的位置换为mongodb即可 用户数据存储的集合名称为py_users&#xff0c;文档格式为{uname:用户名,upwd:密码} 将原来MySQL操作的代码封装到一个方法中&#xff0c;代码如下 def mysql_login(): #mongodb中没有则到mysql中…