HIve技术详解(一)

news2024/11/27 4:20:38

第1章 Hive基本概念

1.1 Hive

1.1.1 Hive的产生背景

在那一年的大数据开源社区,我们有了HDFS来存储海量数据、MapReduce来对海量数据进行分布式并行计算、Yarn来实现资源管理和作业调度。但是面对海量数据和负责的业务逻辑,开发人员要编写MR来对数据进行统计分析难度极大、效率较低,并且对开发者的Java功底也有要求。所以Facebook公司在处理自己的海量数据时开发了hive这个数仓工具。Hive可以帮助开发人员来做完成这些苦活,如此开发人员就可以更加专注于业务需求了。

1.1.2 hive简介

Hive:由Facebook开源用于解决海量结构化日志的数据统计工具。
Hive是基于Hadoop的一个数据仓库工具,将结构化的数据文件映射为一张表,并提供类SQL(HQL)查询功能。

1.1.3 Hive本质:将HQL转化成MapReduce程序

在这里插入图片描述
(1)Hive处理的数据存储在HDFS
(2)Hive分析数据底层的实现是MapReduce
(3)执行程序运行在Yarn上
(4)结构化文件如何映射成一张表的?借助存储在元数据数据库中的元数据来解析结构化文件

1.2 Hive架构原理

在这里插入图片描述

1.2.1 Hive架构介绍

1)用户接口:Client CLI(command-line interface)、
JDBC/ODBC(jdbc访问hive)、
2)元数据:Metastore 元数据包括:
表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等;
默认存储在自带的derby数据库中,推荐使用MySQL存储Metastore
3)Hadoop 使用HDFS进行存储,使用MapReduce进行计算。
4)驱动器:Driver ·解析器(SQL Parser): 将SQL字符串转换成抽象语法树AST,
这一步一般都用第三方工具库完成,比如antlr;对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。
·编译器(Physical Plan): 将AST编译生成逻辑执行计划。
·优化器(Query Optimizer): 对逻辑执行计划进行优化。
·执行器(Execution): 把逻辑执行计划转换成可以运行的物理计划。对于Hive来说,就是MR/Spark。

1.2.2 Hive的运行机制

在这里插入图片描述
hive通过给用户提供的一系列交互接口,接收到的用户的指令(SQl),使用自己的Driver,结合元数据(MetaStore),将这些指令翻译成MapReduce,提m交到Hadoop中执行,最后,将执行返回的结果输出到用户交互接口中。

1.3 Hive和 数据库比较

在这里插入图片描述
综上所述,Hive压根就不是数据库,hive除了语言类似意外,存储和计算都是使用Hadoop来完成的。而Mysql则是使用自己的,拥有自己的体系。

1.4 Hive的优缺点

在这里插入图片描述

第2章 Hive安装

2.1 修改hadoop相关参数

1)修改core-site.xml

[aa@hadoop102 hive]$ vim /opt/module/hadoop/etc/hadoop/core-site.xml
<!-- 配置该aa(superUser)允许通过代理访问的主机节点 -->
    <property>
        <name>hadoop.proxyuser.atguigu.hosts</name>
        <value>*</value>
    </property>
<!-- 配置该aa(superUser)允许通过代理用户所属组 -->
    <property>
        <name>hadoop.proxyuser.atguigu.groups</name>
        <value>*</value>
    </property>
<!-- 配置该aa(superUser)允许通过代理的用户-->
    <property>
        <name>hadoop.proxyuser.atguigu.users</name>
        <value>*</value>
</property>
2)配置yarn-site.xml
[aa@hadoop102 hive]$ vim /opt/module/hadoop/etc/hadoop/yarn-site.xml
<!-- NodeManager使用内存数,默认8G,修改为4G内存 -->
<property>
	<description>Amount of physical memory, in MB, that can be allocated 
	for containers. If set to -1 and
	yarn.nodemanager.resource.detect-hardware-capabilities is true, it is
	automatically calculated(in case of Windows and Linux).
	In other cases, the default is 8192MB.
	</description>
	<name>yarn.nodemanager.resource.memory-mb</name>
	<value>4096</value>
</property>
<!-- 容器最小内存,默认512M -->
<property>
	<description>The minimum allocation for every container request at the RM	in MBs. 
            Memory requests lower than this will be set to the value of this	property. 
            Additionally, a node manager that is configured to have less memory	than this value
	</description>
	<name>yarn.scheduler.minimum-allocation-mb</name>
	<value>512</value>
</property>

<!-- 容器最大内存,默认8G,修改为4G -->
<property>
	<description>The maximum allocation for every container request at the RM	in MBs. 
            Memory requests higher than this will throw an	InvalidResourceRequestException.
	</description>
	<name>yarn.scheduler.maximum-allocation-mb</name>
	<value>4096</value>
</property>

<!-- 虚拟内存检查,默认打开,修改为关闭 -->
<property>
	<description>Whether virtual memory limits will be enforced for containers.</description>
	<name>yarn.nodemanager.vmem-check-enabled</name>
	<value>false</value>
</property>

· 注意:修改完配置文件记得分发,然后重启集群。
xynsc /opt/module/hadoop/etc/hadoop/

2.2 Hive解压安装

1)把apache-hive-3.1.2-bin.tar.gz上传到linux的/opt/software目录下
2)将/opt/software/目录下的apache-hive-3.1.2-bin.tar.gz到/opt/module/目录下面
[aa@hadoop102 software]$ tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /opt/module/
3)修改解压后的目录名称为hive
[aa@hadoop102 module]$ mv apache-hive-3.1.2-bin/ /opt/module/hive
4)修改/etc/profile.d/my_env.sh文件,将hive的/bin目录添加到环境变量
[aa@hadoop102 hive]$ sudo vim /etc/profile.d/my_env.sh
……
#HIVE_HOME
export HIVE_HOME=/opt/module/hive
export PATH= P A T H : PATH: PATH:HIVE_HOME/bin
[aa@hadoop102 hive]$ source /etc/profile

2.3 Hive元数据的两种选择

2.3.1 元数据库之Derby

1.derby元数据示意图:
在这里插入图片描述
2.Derby数据库:
Derby数据库是Java编写的内存数据库,在内嵌模式中与应用程序共享一个JVM,应用程序负责启动和停止。
3. 初始化Derby数据库
1)在hive根目录下,使用/bin目录中的schematool命令初始化hive自带的Derby元数据库

[aa@hadoop102 hive]$ bin/schematool -dbType derby -initSchema

2)执行上述初始化元数据库时,会发现存在jar包冲突问题,现象如下:
SLF4J: Found binding in [jar:file:/opt/module/hive/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/module/hadoop-3.1.3/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
3)解决jar冲突问题,只需要将hive的/lib目录下的log4j-slf4j-impl-2.10.0.jar重命名即可

[aa@hadoop102 hive]$ mv lib/log4j-slf4j-impl-2.10.0.jar lib/log4j-slf4j-impl-2.10.0.back

4.启动Hive
1)执行/bin目录下的hive命令,就可以启动hive,并通过cli方式连接到hive

[aa@hadoop102 hive]$ bin/hive

2)使用Hive

hive> show databases;                                      // 查看当前所有的数据库
OK
default
Time taken: 0.472 seconds, Fetched: 1 row(s)
hive> show tables;                                         // 查看当前所有的表
OK
Time taken: 0.044 seconds
hive> create table test_derby(id int);            // 创建表test_derby,表中只有一个字段,字段类型是int
OK
Time taken: 0.474 seconds
hive> insert into test_derby values(1001);                 // 向test_derby表中插入数据
Query ID = atguigu_20211018153727_586935da-100d-4d7e-8a94-063d373cc5dd
Total jobs = 3
……
Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 1
……
Stage-Stage-1: Map: 1  Reduce: 1   Cumulative CPU: 6.19 sec   HDFS Read: 12769 HDFS Write: 208 SUCCESS
Total MapReduce CPU Time Spent: 6 seconds 190 msec
OK
Time taken: 31.901 second
hive> select * from test_derby;                                // 查看test_derby表中所有数据
OK
1001
Time taken: 0.085 seconds, Fetched: 1 row(s)
hive> exit;

  1. 内嵌模式只有一个JVM进程
    在内嵌模式下,命令行执行jps –ml命令,只能看到一个CliDriver进程。
[aa@hadoop102 hive]$ jps –ml
7170 sun.tools.jps.Jps -ml
6127 org.apache.hadoop.util.RunJar /opt/module/hive/lib/hive-cli-3.1.2.jar org.apache.hadoop.hive.cli.CliDriver

6.Hive自带的元数据库的问题
演示采用Derby作为元数据库的问题:
开启另一个会话窗口运行Hive,同时监控/tmp/aa目录中的hive.log文件,会观察到如下错误信息。

Caused by: ERROR XSDB6: 

> Another instance of Derby may have already booted the database
> /opt/module/hive/metastore_db.

        at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
        at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
        at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.privGetJBMSLockOnDB(Unknown Source)
        at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.run(Unknown Source)
...

Hive默认使用的元数据库为derby并且部署方式是内嵌式,在开启Hive之后就会独占元数据库,且不与其他客户端共享数据,如果想多窗口操作就会报错,操作比较局限。为此Hive支持采用MySQL作为元数据库,就可以支持多窗口操作。
监控hive.log日志,tail -F hive.log在/temp/atguigu/hive.log
同时打开两个窗口运行hive会报错!

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

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

相关文章

3.3 最长公共子序列

博主简介&#xff1a;一个爱打游戏的计算机专业学生博主主页&#xff1a; 夏驰和徐策所属专栏&#xff1a;算法设计与分析 1.什么是子序列&#xff1f; 我的理解&#xff1a; 在字符串或序列中&#xff0c;子序列是指从原始序列中删除零个或多个元素后得到的序列&#xff0c;…

Spring Boot如何实现分布式事务的协调和管理

Spring Boot如何实现分布式事务的协调和管理 在分布式系统中&#xff0c;事务是非常重要的一部分&#xff0c;可以保证多个操作在一个原子性的操作中完成&#xff0c;确保数据的一致性和可靠性。在分布式系统中&#xff0c;分布式事务需要考虑多个服务之间的数据一致性和事务提…

论文排版!

目录 Visio画图后&#xff0c;粘贴到word白边太宽&#xff1f; 【IEEE论文投稿word中双栏情况下插入单栏效果图片】 论文排版之Word双栏排版问题解决 Word公式居中&#xff0c;公式序号靠右&#xff08;制表位实现&#xff09; 请问word如何实现这种长公式的排版&#xff1…

MVCC 实现原理

&#x1f49f;这里是CS大白话专场&#xff0c;让枯燥的学习变得有趣&#xff01; &#x1f49f;没有对象不要怕&#xff0c;我们new一个出来&#xff0c;每天对ta说不尽情话&#xff01; &#x1f49f;好记性不如烂键盘&#xff0c;自己总结不如收藏别人&#xff01; &#x1f…

Pycharm 安装PyQt5

第一步: 新建项目文件夹 新建项目 新建一个 Pyqt5Tools 的文件夹 这里放到了 D盘 安装成功 第二步: 安装相关包 安装PyQt5 pip3 install -i https://pypi.douban.com/simple PyQt5,PyQt5-tools时间根据网速 更新下pip python.exe -m pip install --upgrade pip -i https:…

tensorRT推理相关及遇到的坑

tebsorRT是什么 tensorRT是NVIDIA出的一个高性能深度学习推理&#xff08;inference&#xff09;优化器&#xff0c;可以为深度学习应用提供低延迟、高吞吐率的部署推理。TensorRT可用于对超大规模数据中心、嵌入式平台或自动驾驶平台进行推理加速。TensorRT现已能支持TensorF…

数据库隔离级别

1. 数据库隔离级别 1.1 事务 事务只是一个改变&#xff0c;是一些操作的集合&#xff1b;用专业的术语讲&#xff0c;他就是一个程序的执行单元&#xff1b;事务本身其实并不包含这4个特性&#xff0c;只是我们需要通过某些手段&#xff0c;尽可能的让这个执行单元满足这四个特…

Java学习路线(20)——多线程

一、线程&#xff08;Thread&#xff09; 1、概念&#xff1a; 是一个程序内部的一条执行路径 2、分类 单线程&#xff1a; 程序中只有一条执行路径多线程&#xff1a; 程序中有多条执行路径 二、多线程的创建 1、Thread的概念&#xff1a; Java通过java.lang.Thread类代表…

HTTP 教程2

HTTP 消息结构 HTTP是基于客户端/服务端&#xff08;C/S&#xff09;的架构模型&#xff0c;通过一个可靠的链接来交换信息&#xff0c;是一个无状态的请求/响应协议。 一个HTTP"客户端"是一个应用程序&#xff08;Web浏览器或其他任何客户端&#xff09;&#xff…

什么是C/S架构?与B/S架构有什么区别?

1、 1.1、C/S架构的全称是Client/Server&#xff0c;即客户端/服务器体系结构&#xff0c;主要应用于局域网内。 1.2、B/S架构的全称为Browser/Server&#xff0c;即浏览器/服务器结构。百度安全验证https://baijiahao.baidu.com/s?id1742761249590653499&wfrspider&f…

微信小程序——CSS限制文字宽度和行数(溢出显示省略号)

手把手教你学会判断用户在做向上滑动还是向下滑动 知识回调&#xff08;不懂就看这儿&#xff01;&#xff09;场景复现核心干货单行文本溢出显示省略号多行文本溢出显示省略号 知识回调&#xff08;不懂就看这儿&#xff01;&#xff09; 知识专栏专栏链接微信小程序专栏http…

基于HTML+CSS+JavaScript的在线图书阅读网页设计

目 录 1.项目总体设计 2 1.1需求分析 2 1.2网站结构分析 3 1.2.1导航栏 3 1.2.2主体部分 3 1.3网络风格分析 3 1.4网站结构图 3 2.项目详细设计 4 2.1登录页面设计 4 2.2主页页面设计 5 2.3在线读书页面设计 6 3.项目总结 7 4.参考文献 7 此网页能够满足喜欢看书的书友&#x…

深度学习 - 53.Bert 简介与 Keras-Bert 常用示例

目录 一.引言 二.Bert 简介 1.Embedding Layer 2.Encoder layer 3.Pre-training 与 Fine-Tuning 三.Keras-Bert 常用 Demo 1.获取预训练模型 2.加载预训练模型 3.Fill Text 4.IsCorrelation 5.Get Embedding 6.完整代码 四. Fine-Tuning 五.Bert VS OpenAI GPT …

chatgpt赋能python:Python中等待一秒的语句:让你的程序暂停与等待

Python中等待一秒的语句&#xff1a;让你的程序暂停与等待 当编写Python程序时&#xff0c;经常需要添加暂停或延迟功能&#xff0c;以使程序能够在执行某些操作之前或之后等待一段时间。Python拥有一个内置的语句可以实现这种延迟&#xff1a;time.sleep()。 什么是 time.sl…

四信大气环保远程监测平台,实现大气网格化、精准化监测

近年来&#xff0c;随着国民经济快速发展&#xff0c;我国工业化、城镇化进程加快&#xff0c;随之造成的大气污染问题日益严峻&#xff0c;严重影响人们日常生活幸福指数与身体健康。为此&#xff0c;中共中央、国务院先后发布一系列文件&#xff0c;要求加强大气环境监测&…

价格限制与经济福利

价格控制 实行价格控制通常是政府相信市场价格对买方或卖方不公平两种价格控制&#xff1a;价格上限和价格下限 价格上限&#xff1a; 法定最高价格&#xff0c;任何人不得收取或付出高于此的价格。 价格下限&#xff1a; 法定最低价格&#xff0c;任何人不得收取或付出低于…

为什么亚马逊股价会在今年上涨?亚马逊股价2023年还会继续上涨吗?

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 为什么亚马逊的股价会上涨&#xff1f; 今年以来&#xff0c;亚马逊&#xff08;AMZN&#xff09;的股价已经上涨了20%以上&#xff0c;涨幅达到了23.3%。而同期标普500指数今年以来仅上涨了8.2%。 猛兽财经认为&#xff0c…

数据链路层:媒体接入控制

1.数据链路层&#xff1a;媒体接入控制 笔记来源&#xff1a; 湖科大教书匠&#xff1a;媒体接入控制的基本概念 湖科大教书匠&#xff1a;随机接入–CSMA/CD协议 湖科大教书匠&#xff1a;随机接入–CSMA/CA协议 声明&#xff1a;该学习笔记来自湖科大教书匠&#xff0c;笔记…

微信小程序——监听页面滑动(二)判断用户在做向上滑动还是向下滑动(onScrollPage scroll-view)

手把手教你学会判断用户在做向上滑动还是向下滑动 知识回调&#xff08;不懂就看这儿&#xff01;&#xff09;场景复现核心干货onPageScroll结合scrollTop实现了解touch方法 知识回调&#xff08;不懂就看这儿&#xff01;&#xff09; 知识专栏专栏链接微信小程序专栏https:…

1.WebGL与Shader介绍

webgl介绍 WebGL是一种用于在网页浏览器中创建交互式3D图形的技术。它基于OpenGL ES 2.0&#xff0c;这是一个广泛使用的嵌入式系统3D图形API。以下是webgl的发展史&#xff1a; WebGL允许开发人员使用JavaScript编写代码来控制GPU&#xff08;图形处理单元&#xff09;&…