您当前的位置:首页 > 电脑百科 > 程序开发 > 框架

3K字详解Hive,让你彻底弄明白

时间:2022-07-15 12:12:00  来源:  作者:秃头Java人

1 Hive基本概念

Hive是一个构建在Hadoop上的数据仓库框架。最初,Hive是由Facebook开发,后来移交由Apache软件基金会开发,并作为一个Apache开源项目。

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。

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

3K字详解Hive,让你彻底弄明白

 

2 Hive的特点与架构

  • Hive最大的特点是通过类SQL来分析大数据,而避免了写MapReduce程序来分析数据,这样使得分析数据更容易。
  • 数据是存储在HDFS上的,Hive本身并不提供数据的存储功能,它可以使已经存储的数据结构化。
  • Hive是将数据映射成数据库和一张张的表,库和表的元数据信息一般存在关系型数据库上(比如MySQL)。
  • 数据存储方面:它能够存储很大的数据集,可以直接访问存储在Apache HDFS或其他数据存储系统(如Apache HBase)中的文件。
  • 数据处理方面:因为Hive语句最终会生成MapReduce任务去计算,所以不适用于实时计算的场景,它适用于离线分析。
  • Hive除了支持MapReduce计算引擎,还支持Spark和Tez这两种分布式计算引擎;
  • 数据的存储格式有多种,比如数据源是二进制格式,普通文本格式等等;
  • hive具有sql数据库的外表,但应用场景完全不同,hive只适合用来做批量数据统计分析
3K字详解Hive,让你彻底弄明白

 

3Hive的安装方式

hive的安装一共有三种方式:内嵌模式、本地模式、远程模式

元数据服务(metastore)作用是:客户端连接metastore服务,metastore再去连接MySQL数据库来存取元数据。有了metastore服务,就可以有多个客户端同时连接,而且这些客户端不需要知道MySQL数据库的用户名和密码,只需要连接metastore 服务即可。

  (1) 内嵌模式

  内嵌模式使用的是内嵌的Derby数据库来存储元数据,也不需要额外起Metastore服务。数据库和Metastore服务都嵌入在主Hive Server进程中。这个是默认的,配置简单,但是一次只能一个客户端连接,适用于用来实验,不适用于生产环境。解压hive安装包 bin/hive 启动即可使用

  缺点:不同路径启动hive,每一个hive拥有一套自己的元数据,无法共享。

3K字详解Hive,让你彻底弄明白

 

 (2)本地模式

  本地模式采用外部数据库来存储元数据,目前支持的数据库有:MySQL、Postgres、Oracle、MS SQL Server.在这里我们使用MySQL。本地模式不需要单独起metastore服务,用的是跟hive在同一个进程里的metastore服务。也就是说当你启动一个hive 服务,里面默认会帮我们启动一个metastore服务。hive根据hive.metastore.uris 参数值来判断,如果为空,则为本地模式。

  缺点:每启动一次hive服务,都内置启动了一个metastore。

3K字详解Hive,让你彻底弄明白

 

  (3)远程模式

  远程模式下,需要单独起metastore服务,然后每个客户端都在配置文件里配置连接到该metastore服务。远程模式的metastore服务和hive运行在不同的进程里。在生产环境中,建议用远程模式来配置Hive Metastore。在这种情况下,其他依赖hive的软件都可以通过Metastore访问hive。

  远程模式下需要配置hive.metastore.uris 参数来指定metastore服务运行的机器ip和端口,并且需要单独手动启动metastore服务。hiveserver2是Hive启动了一个server,客户端可以使用JDBC协议,通过IP+ Port的方式对其进行访问,达到并发访问的目的。

3K字详解Hive,让你彻底弄明白

 

4 Hive的安装

之前文章介绍过按照Hadoop,继Hadoop后按照Hive。在此处选择第三台机器node3作为我们hive的安装机器,安装方式使用远程方式。

准备工作:① 必须按照有Hadoop(可以是单节点也可以是高可用)和MySQL数据库。可参照我其他两篇文章。

     ② 在Node3主机上创建目录(已创建有可以忽略):

mkdir  -p /export/server/
mkdir  -p /export/data/
mkdir  -p /export/software/
3K字详解Hive,让你彻底弄明白

 

准备一个Hive的包,可以去官网下载
http://archive.apache.org/dist/hive/hive-3.1.2/apache-hive-3.1.2-bin.tar.gz

(1)上传压缩包到/export/software目录里,并解压安装包

# 上传压缩包到/export/software目录里,并解压安装包
cd /export/software/
tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /export/server
cd /export/server
mv apache-hive-3.1.2-bin hive-3.1.2
3K字详解Hive,让你彻底弄明白

 


3K字详解Hive,让你彻底弄明白

 

(2)解决hadoop、hive之间guava版本差异

#解决hadoop、hive之间guava版本差异
cd /export/server/hive-3.1.2
rm -rf lib/guava-19.0.jar
cp /export/server/hadoop-3.1.4/share/hadoop/common/lib/guava-27.0-jre.jar ./lib/
3K字详解Hive,让你彻底弄明白

 

(3) 配置一个MySQL的连接包。这步必须配置,Mysql5.X和Mysql8.X的连接包可能不同,具体可以去官网下载,附上脚本之家的下载教程(
https://www.jb51.NET/article/190860.htm)

#上传这个包到此目录下/export/server/hive-3.1.2/lib
mysql-connector-JAVA-5.1.41-bin.jar
3K字详解Hive,让你彻底弄明白

 

(5)修改hive环境变量文件 添加Hadoop_HOME

#修改hive环境变量文件 添加Hadoop_HOME
cd /export/server/hive-3.1.2/conf/
mv hive-env.sh.template hive-env.sh
vim hive-env.sh

#---将以下的配置放到配置文件中,以hadoop-3.1.4和hive-3.1.2为例
HADOOP_HOME=/export/server/hadoop-3.1.4
export HIVE_CONF_DIR=/export/server/hive-3.1.2/conf
export HIVE_AUX_JARS_PATH=/export/server/hive-3.1.2/lib

(6)配置mysql等相关信息,新增hive-site.xml

#--打开配置文件
vim hive-site.xml

#--将以下配置内容写入配置文件中,具体的连接端口以自己本机为准,附上备注
<configuration>
    <!-- 存储元数据mysql相关配置 -->
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value> jdbc:mysql://node3:3306/hive?createDatabaseIfNotExist=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8</value>
    </property>

    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
    </property>

    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
    </property>

    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>123456</value>
    </property>

    <!-- H2S运行绑定host -->
    <property>
        <name>hive.server2.thrift.bind.host</name>
        <value>node3</value>
    </property>

    <!-- 远程模式部署metastore 服务地址 -->
    <property>
        <name>hive.metastore.uris</name>
        <value>thrift://node3:9083</value>
    </property>

    <!-- 关闭元数据存储授权  -->
    <property>
        <name>hive.metastore.event.db.notification.api.auth</name>
        <value>false</value>
    </property>

    <!-- 关闭元数据存储版本的验证 -->
    <property>
        <name>hive.metastore.schema.verification</name>
        <value>false</value>
    </property>
</configuration>折叠 
3K字详解Hive,让你彻底弄明白

 

(7)初始化metadata(只需要在配置完Hive之后进行一次操作)

cd /export/server/hive-3.1.2

#初始化成功会在mysql中创建74张表
bin/schematool -initSchema -dbType mysql -verbos

(8)系统环境变量配置

#添加环境变量
vim /etc/profile

#将以下环境变量新增到/etc/profile文件中
export HIVE_HOME=/export/server/hive-3.1.2
export PATH=:$HIVE_HOME/bin:$PATH

#刷新,让环境变量生效
source /etc/profile

(9)通过后台运行启动metastore和hiveserver2 启动前需要查看下Hadoop是否启动,Hadoop未启动会报错:连接失败

#查看Hadoop是否启动
jps

#Hadoop未启动:没有DataNode和NodeManage节点代表Hadoop未启动
#一键启动Hadoop(已启动则忽略)
start-add.sh

#-----------------Metastore 和 Hiveserver2启动----
nohup /export/server/hive-3.1.2/bin/hive --service metastore  2>&1 &
nohup /export/server/hive-3.1.2/bin/hive --service hiveserver2 2>&1 &

#启动成功会生成日志,进入可以查看是否有问题
vim nohup.out
3K字详解Hive,让你彻底弄明白

 


3K字详解Hive,让你彻底弄明白

 

(10)验证是否安装成功

#在linux中输入,hive直接回车,
hive

#出现一个终端,在该终端中可以输入sql命令:
show databases;
3K字详解Hive,让你彻底弄明白

 

5Hive的交互方式

Hive交互方式有多种,这里以远程模式的hiveserver2交互为例。需要对Hadoop配置文件进行更新。

#第一步:在NameNode节点上的主机上关闭Hadoop(我的是Node1主机)
stop-all.sh

#第二步:Node1主机上进入到Hadoop配置文件的路径,然后编辑 core-site.xml文件
cd /export/server/hadoop-3.1.4/etc/hadoop/
vim core-site.xml

#第三步:在文件末尾<configuration>内追加配置
<property>
    <name>hadoop.proxyuser.root.hosts</name>
    <value>*</value>
</property>
<property>
    <name>hadoop.proxyuser.root.groups</name>
    <value>*</value>
</property>

#第四步:将修改好的core-site.xml文件分发到node2和node3
scp core-site.xml node2:$PWD
scp core-site.xml node3:$PWD

#第五步:然后重启Hadoop(stop-all.sh start-all.sh)
start-all.sh折叠 

在hive运行的服务器上,确保已经启动metastore服务和hiveserver2服务,如果没有启动,则执行以下语句

nohup /export/server/hive-3.1.2/bin/hive --service metastore  2>&1 &
nohup /export/server/hive-3.1.2/bin/hive --service hiveserver2 2>&1 &

为了方便快捷,直接通过制作脚本进行登录Hive

#Hive一键登录脚本,安装expect
yum  -y install expect

#新建一个脚本文件夹,并写一个脚本
mkdir -p /export/server/script
cd /export/server/script
vim  beenline.exp

#脚本的内容如下:

#!/bin/expect
spawn beeline 
set timeout 5
expect "beeline>"
send "!connect jdbc:hive2://node3:10000r"
expect "Enter username for jdbc:hive2://node3:10000:"
send "rootr"
expect "Enter password for jdbc:hive2://node3:10000:"
send "123456r"
interact

#:wq保存脚本后,需要修改脚本权限
chmod 777 beenline.exp

#最后可以实现一键脚本登录Hive
expect beenline.exp折叠 

6 使用IDEA连接hive

使用IntelliJ IDEA 连接

3K字详解Hive,让你彻底弄明白

 


3K字详解Hive,让你彻底弄明白

 


3K字详解Hive,让你彻底弄明白

 


3K字详解Hive,让你彻底弄明白

 

打开node1:9870 看到hadoop中生成了hive的数据表所在位置

3K字详解Hive,让你彻底弄明白

 

具体的hive语法操作自行百度,最后。引用网友的hive架构图

3K字详解Hive,让你彻底弄明白

 



Tags:Hive   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
一文搞明白Hive与数据库区别
Hive 采用了类似SQL 的查询语言 HQL (Hive Query Language),因此很容易将 Hive 理解为数据库。其实Hive 是为数据仓库设计的,是数据仓库的客户端,所以要搞清楚Hive与数据库的区...【详细内容】
2023-11-02  Search: Hive  点击:(187)  评论:(0)  加入收藏
MySQL到TiDB:Hive Metastore横向扩展之路
一、背景大数据元数据服务Hive Metastore Service(以下简称HMS),存储着数据仓库中所依赖的所有元数据并提供相应的查询服务,使得计算引擎(Hive、Spark、Presto)能在海量数据中准确...【详细内容】
2023-09-28  Search: Hive  点击:(336)  评论:(0)  加入收藏
十分钟掌握Doris,超越Hive、Elasticsearch和PostgreSQL
以前,数据仓库通常由Apache Hive、MySQL、Elasticsearch和PostgreSQL组成。它们支持数据仓库的数据计算和数据存储层: 数据计算:Apache Hive作为计算引擎。 数据存储:MySQL为Dat...【详细内容】
2023-09-27  Search: Hive  点击:(228)  评论:(0)  加入收藏
你真的能搞明白Hive与数据库区别吗?
Hive 采用了类似SQL 的查询语言 HQL (Hive Query Language),因此很容易将 Hive 理解为数据库。其实Hive 是为数据仓库设计的,是数据仓库的客户端,所以要搞清楚Hive与数据库的区...【详细内容】
2023-06-26  Search: Hive  点击:(195)  评论:(0)  加入收藏
【大数据】Hive Join 的原理与机制
一、概述Hive是一个基于Hadoop的数据仓库解决方案,它提供了类似于SQL的查询语言,称为HiveQL,用于处理结构化数据。在Hive中,JOIN操作用于将两个或多个表中的数据连接在一起,以便...【详细内容】
2023-05-08  Search: Hive  点击:(124)  评论:(0)  加入收藏
Hive DDL 操作与视图讲解
一、概述Hive是建立在Hadoop上的数据仓库工具,它允许用户通过类SQL的语法来查询和管理数据。在Hive中,DDL(数据定义语言)和视图操作是非常常见的。 1)表和视图关系表和视图都是数...【详细内容】
2023-05-06  Search: Hive  点击:(148)  评论:(0)  加入收藏
【大数据】Hive 分区和分桶的区别及示例讲解
一、概述在大数据处理过程中,Hive是一种非常常用的数据仓库工具。Hive分区和分桶是优化Hive性能的两种方式,它们的区别如下:1、分区概述Hive分区是把数据按照某个属性分成不同...【详细内容】
2023-05-04  Search: Hive  点击:(160)  评论:(0)  加入收藏
Hive 和 Spark 分区策略剖析
一、概述随着技术的不断的发展,大数据领域对于海量数据的存储和处理的技术框架越来越多。在离线数据处理生态系统最具代表性的分布式处理引擎当属Hive和Spark,它们在分区策略...【详细内容】
2023-03-30  Search: Hive  点击:(148)  评论:(0)  加入收藏
比Hive快十倍的大数据查询利器,你知道吗?
目前最流行的大数据查询引擎非hive莫属,它是基于MR的类SQL查询工具,会把输入的查询SQL解释为MapReduce,能极大的降低使用大数据查询的门槛, 让一般的业务人员也可以直接对大数据...【详细内容】
2023-03-07  Search: Hive  点击:(204)  评论:(0)  加入收藏
大多数开发人员都弄错的Hive与MapReduce小文件合并问题
因为设置上面四个参数,看上去规定了map结束,MR结束合并文件,如果文件平均小于smallfiles.avgsize启动一个新的MRj进行文件的二次合并。如果启动mr合并文件,没有问题。0.背景近来...【详细内容】
2023-01-31  Search: Hive  点击:(218)  评论:(0)  加入收藏
▌简易百科推荐
Qt与Flutter:在跨平台UI框架中哪个更受欢迎?
在跨平台UI框架领域,Qt和Flutter是两个备受瞩目的选择。它们各自具有独特的优势,也各自有着广泛的应用场景。本文将对Qt和Flutter进行详细的比较,以探讨在跨平台UI框架中哪个更...【详细内容】
2024-04-12  刘长伟    Tags:UI框架   点击:(7)  评论:(0)  加入收藏
Web Components实践:如何搭建一个框架无关的AI组件库
一、让人又爱又恨的Web ComponentsWeb Components是一种用于构建可重用的Web元素的技术。它允许开发者创建自定义的HTML元素,这些元素可以在不同的Web应用程序中重复使用,并且...【详细内容】
2024-04-03  京东云开发者    Tags:Web Components   点击:(11)  评论:(0)  加入收藏
Kubernetes 集群 CPU 使用率只有 13% :这下大家该知道如何省钱了
作者 | THE STACK译者 | 刘雅梦策划 | Tina根据 CAST AI 对 4000 个 Kubernetes 集群的分析,Kubernetes 集群通常只使用 13% 的 CPU 和平均 20% 的内存,这表明存在严重的过度...【详细内容】
2024-03-08  InfoQ    Tags:Kubernetes   点击:(23)  评论:(0)  加入收藏
Spring Security:保障应用安全的利器
SpringSecurity作为一个功能强大的安全框架,为Java应用程序提供了全面的安全保障,包括认证、授权、防护和集成等方面。本文将介绍SpringSecurity在这些方面的特性和优势,以及它...【详细内容】
2024-02-27  风舞凋零叶    Tags:Spring Security   点击:(62)  评论:(0)  加入收藏
五大跨平台桌面应用开发框架:Electron、Tauri、Flutter等
一、什么是跨平台桌面应用开发框架跨平台桌面应用开发框架是一种工具或框架,它允许开发者使用一种统一的代码库或语言来创建能够在多个操作系统上运行的桌面应用程序。传统上...【详细内容】
2024-02-26  贝格前端工场    Tags:框架   点击:(52)  评论:(0)  加入收藏
Spring Security权限控制框架使用指南
在常用的后台管理系统中,通常都会有访问权限控制的需求,用于限制不同人员对于接口的访问能力,如果用户不具备指定的权限,则不能访问某些接口。本文将用 waynboot-mall 项目举例...【详细内容】
2024-02-19  程序员wayn  微信公众号  Tags:Spring   点击:(43)  评论:(0)  加入收藏
开发者的Kubernetes懒人指南
你可以将本文作为开发者快速了解 Kubernetes 的指南。从基础知识到更高级的主题,如 Helm Chart,以及所有这些如何影响你作为开发者。译自Kubernetes for Lazy Developers。作...【详细内容】
2024-02-01  云云众生s  微信公众号  Tags:Kubernetes   点击:(58)  评论:(0)  加入收藏
链世界:一种简单而有效的人类行为Agent模型强化学习框架
强化学习是一种机器学习的方法,它通过让智能体(Agent)与环境交互,从而学习如何选择最优的行动来最大化累积的奖励。强化学习在许多领域都有广泛的应用,例如游戏、机器人、自动驾...【详细内容】
2024-01-30  大噬元兽  微信公众号  Tags:框架   点击:(72)  评论:(0)  加入收藏
Spring实现Kafka重试Topic,真的太香了
概述Kafka的强大功能之一是每个分区都有一个Consumer的偏移值。该偏移值是消费者将读取的下一条消息的值。可以自动或手动增加该值。如果我们由于错误而无法处理消息并想重...【详细内容】
2024-01-26  HELLO程序员  微信公众号  Tags:Spring   点击:(95)  评论:(0)  加入收藏
SpringBoot如何实现缓存预热?
缓存预热是指在 Spring Boot 项目启动时,预先将数据加载到缓存系统(如 Redis)中的一种机制。那么问题来了,在 Spring Boot 项目启动之后,在什么时候?在哪里可以将数据加载到缓存系...【详细内容】
2024-01-19   Java中文社群  微信公众号  Tags:SpringBoot   点击:(91)  评论:(0)  加入收藏
站内最新
站内热门
站内头条