Hive的安装部署

目录

    • 1.修改hadoop相关参数
    • 2.Hive解压安装
    • 3.Hive元数据的三种部署方式
      • 3.1 元数据库之Derby
      • 3.2 元数据库之Mysql
      • 3.3 元数据之MetaStore Server
    • 4.hive的两种访问方式
      • 4.1 命令行的方式
      • 4.2 HiveServer2模式

1.修改hadoop相关参数

1)修改core-site.xml

[root@hadoop102 hive]$ vim /opt/module/hadoop/etc/hadoop/core-site.xml
<!-- 配置该root(superUser)允许通过代理访问的主机节点 --><property><name>hadoop.proxyuser.root.hosts</name><value>*</value></property>
<!-- 配置该root(superUser)允许通过代理用户所属组 --><property><name>hadoop.proxyuser.root.groups</name><value>*</value></property>
<!-- 配置该root(superUser)允许通过代理的用户--><property><name>hadoop.proxyuser.root.users</name><value>*</value>
</property>

2)配置yarn-site.xml

[root@hadoop102 hive]$ vim /opt/module/hadoop/etc/hadoop/yarn-site.xml
<!-- NodeManager使用内存数,默认8G,修改为4G内存 -->(16g物理内存的改为2g或者是3g)
<property><description>Amount of physical memory, in MB, that can be allocated for containers. If set to -1 andyarn.nodemanager.resource.detect-hardware-capabilities is true, it isautomatically 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>

注意:修改完配置文件记得分发,然后重启集群。

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/目录下面

[root@hadoop102 software]$ tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /opt/module/

3)修改解压后的目录名称为hive

[root@hadoop102 module]$ mv apache-hive-3.1.2-bin/ /opt/module/hive

4)修改/etc/profile.d/my_env.sh文件,将hive的/bin目录添加到环境变量

[root@hadoop102 hive]$ sudo vim /etc/profile.d/my_env.sh
……
#HIVE_HOME
export HIVE_HOME=/opt/module/hive
export PATH=$PATH:$HIVE_HOME/bin
[root@hadoop102 hive]$ source /etc/profile

3.Hive元数据的三种部署方式

3.1 元数据库之Derby

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

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

2)执行上述初始化元数据库时,会发现存在jar包冲突问题,现象如下:
(hadoop和hive下都有这个jar包,以底层的hadoop为主,改了hive的)

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重命名即可

[root@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

[root@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 = root_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进程。
[root@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/root目录中的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作为元数据库,就可以支持多窗口操作。

3.2 元数据库之Mysql

  1. 直连模式示意图:
    在这里插入图片描述
    2.配置Hive元数据库为MySql
  1. 拷贝驱动
    Hive需要将元数据信息存储到元数据库mysql中,需要使用JDBC的方式连接到MySQL,所以,将MySQL的JDBC驱动拷贝到Hive的lib目录下,供hive调用。
[root@hadoop102 software]$ cp mysql-connector-java-5.1.37.jar /opt/module/hive/lib

2)配置Metastore到MySql
在/opt/module/hive/conf目录下新建hive-site.xml文件(新建的配置文件中的配置会覆盖默认配置)

[root@hadoop102 hive]$ vim conf/hive-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration><!-- jdbc连接的URL --><property><name>javax.jdo.option.ConnectionURL</name><value>jdbc:mysql://hadoop102:3306/metastore?useSSL=false</value>
</property><!-- jdbc连接的Driver--><property><name>javax.jdo.option.ConnectionDriverName</name><value>com.mysql.jdbc.Driver</value>
</property><!-- jdbc连接的username--><property><name>javax.jdo.option.ConnectionUserName</name><value>root</value></property><!-- jdbc连接的password --><property><name>javax.jdo.option.ConnectionPassword</name><value>123456</value>
</property><!-- Hive默认在HDFS的工作目录 --><property><name>hive.metastore.warehouse.dir</name><value>/user/hive/warehouse</value></property><!-- Hive元数据存储的验证 --><property><name>hive.metastore.schema.verification</name><value>false</value></property><!-- 元数据存储授权  --><property><name>hive.metastore.event.db.notification.api.auth</name><value>false</value></property>
</configuration>

3.Hive初始化元数据库
在mysql中创建hive存储元数据的数据库metastore,再通过hive的初始化元数据库操作创建表
1)登陆MySQL

[root@hadoop102 module]$ mysql -uroot -p你的密码

2)新建Hive元数据库

mysql> create database metastore;
mysql> quit;

3)初始化Hive元数据库

[root@hadoop102 hive]$ bin/schematool -initSchema -dbType mysql -verbose

4.启动Hive
1)启动Hive

[root@hadoop102 hive]$ bin/hive

2)使用Hive

hive> show databases;                       // 查看所有的数据库
hive> show tables;                          // 查看所有的表,刚才创建的表test_derby是否存在?为什么?
hive> create table test_mysql (id int);      // 创建test_mysql表,一个字段为id,类型为int
hive> insert into test_mysql values(1002);  // 向表test_mysql中插入数据
hive> select * from test_mysql;                // 查看test2表

3)开启另一个窗口测试,是否支持客户端并发访问

[root@hadoop102 hvie]$ bin/hive
hive> show tables;
hive> select * from test_mysql;

5.直连模式问题:
在公司生产环境中,网络环境会非常复杂,mysql的所在环境可能存在网络隔离,无法直接访问;另外,mysql的root账户和密码在此模式下会存在泄露风险,存在数据安全隐患。
思考:在hadoop103上部署hive,元数据库使用的仍然是hadoop102的Mysql实例,如何实现?

3.3 元数据之MetaStore Server

1.元数据服务模式示意图
在这里插入图片描述
2.元数据服务模式
在服务器端启动MetaStore服务,客户端利用Thrift协议通过MetaStore服务访问元数据库。
元数据服务的访问方式更适合在生产环境中部署使用,相比内嵌式,该方式更加的灵活。(跨网络跨语言跨平台)
3.将Mysql做为元数据库,部署元数据服务
1)首先,将hive的元数据库配置为Mysql

[root@hadoop102 hive]$ vim conf/hive-site.xml

2)在hive-site.xml文件中添加如下配置信息

    <!-- 指定存储元数据要连接的地址 --><property><name>hive.metastore.uris</name><value>thrift://hadoop102:9083</value>
</property>

注意:在配置了此参数后,启动hive之前必须先启动元数据服务,否则,hive启动后无法连接到元数据服务
2)启动元数据服务

[root@hadoop102 hive]$ bin/hive --service metastore
2021-10-18 18:22:24: Starting Hive Metastore Server

注意: 启动后窗口不能再操作,需打开一个新的shell窗口做别的操作
1)启动 hive,查看表及表中数据,是否是Mysql数据库中的表。
2)在另一个窗口启动hive,测试多客户端能否同时连接操作。
思考:在hadoop103上使用元数据服务模式部署hive如何实现?

4.hive的两种访问方式

4.1 命令行的方式

在这里插入图片描述

  1. 在前面的操作中,我们都是通过cli的方式访问hive的。
  2. 我们可以切身的体会到,通过cli的方式访问hive的不足,如:cli太过笨重,需要hive的jar支持。

4.2 HiveServer2模式

1.JDBC访问Hive示意图:
在这里插入图片描述
2. JDBC方式访问Hive
JDBC方式,本质上是将hive包装为服务发布出去,开发者使用JDBC的方式连接到服务,从而操作hive。
减少了对hive环境的依赖
3. 开启Hiveserver2
1)在hive-site.xml文件中添加如下配置信息

   <!-- 指定hiveserver2连接的host --><property><name>hive.server2.thrift.bind.host</name><value>hadoop102</value></property><!-- 指定hiveserver2连接的端口号 --><property><name>hive.server2.thrift.port</name><value>10000</value></property>
  1. 重启MetaStore服务
[root@hadoop102 hive]$ bin/hive --service metastore

3)启动hive服务(这里需要考虑元数据的访问方式,如何使用元数据服务的模式,需要提前开启元数据服务)

[root@hadoop102 hive]$ bin/hive --service hiveserver2

4)启动beeline客户端(需要多等待一会,否则会报错连不上)

[root@hadoop102 hive]$ bin/beeline -u jdbc:hive2://hadoop102:10000 -n root

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

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

相关文章

网网络安全基础之php开发 文件读取、写入功能的实现

前言 续之前的系列&#xff0c;这里php开发的文件操作的内容读取以及文本写入的部分 文件读取代码的实现 css代码 本系列的php博客都是这个css&#xff0c;名字都是index.css /* css样式初始化 */ * {font-family: Poppins, sans-serif;margin: 0;padding: 0;box-sizing: …

国际阿里云:Windows实例中数据恢复教程!!!

在处理磁盘相关问题时&#xff0c;您可能会碰到操作系统中数据盘分区丢失的情况。本文介绍了Windows系统下常见的数据盘分区丢失的问题以及对应的处理方法&#xff0c;同时提供了使用云盘的常见误区以及最佳实践&#xff0c;避免可能的数据丢失风险。 前提条件 已注册阿里云账…

做作业用台灯好还是不用台灯?高口碑护眼台灯分享

相信大家在生活着也遇到过这个问题&#xff0c;就是孩子在写作业时需不需要使用台灯。有些家长可能认为家里室内的亮度已经很足了&#xff0c;没必要使用台灯。 其实这个想法是错误的&#xff0c;孩子在书写作业时是需要使用台灯的&#xff01;室内灯源照到书桌时时远远不够的&…

Sealos 云操作系统一键集成 runwasi,解锁 Wasm 的无限潜力

WebAssembly (通常缩写为 Wasm) 是一种为网络浏览器设计的低级编程语言。它旨在提供一种比传统的 JavaScript 更快、更高效的方式来执行代码&#xff0c;以弥补 JavaScript 在性能方面的不足。通过使用二进制格式&#xff0c;WebAssembly 能够提供比传统 JavaScript 更快的解析…

matlab语言的由来与发展历程

MATLAB语言的由来可以追溯到1970年代后期。当时&#xff0c;Cleve Moler教授在New Mexico大学计算机系担任系主任&#xff0c;他为了LINPACK和EISPACK两个FORTRAN程序集开发项目提供易学、易用、易改且易交互的矩阵软件而形成了最初的MATLAB。 1984年&#xff0c;MATLAB推出了…

Python编程——模块、包和__init__.py

1. 模块 Python中的一个文件即为一个模块(Module)&#xff0c;一个模块引用另外一个模块的变量、函数或类时&#xff0c;使用import来导入。模块名即文件名。 如fibo.py 文件下有如下代码&#xff1a; def fib(n): # write Fibonacci series up to na, b 0, 1while a <…

ios 对话框 弹框,输入对话框 普通对话框

1 普通对话框 UIAlertController* alert [UIAlertController alertControllerWithTitle:"a" message:"alert12222fdsfs" pr…

【数据结构】深度剖析ArrayList

目录 ArrayLIst介绍 ArrayList实现的接口有哪些&#xff1f; ArrayList的序列化&#xff1a;实现Serializable接口 serialVersionUID 有什么用? 为什么一定要实现Serialzable才能被序列化&#xff1f; transient关键字 为什么ArrayList中的elementData会被transient修…

202311.13 windows通过vscode ssh远程连接到Ubuntu 连接失败 waiting for server log

关闭VScode时没有关闭终端的Ubuntu进程&#xff1f; 导致重启后不能正常连接到Ubuntu了 Windows 系统自带的cmd终端通过ssh 可以连接 应该是vscode里对Ubuntu 的服务器端配置出了问题 参考&#xff1a;记录 VSCode ssh 连接远程服务器时出错及解决方法 在Windows 的vscode里面执…

#[量化投资-学习笔记018]Python+TDengine从零开始搭建量化分析平台-正态分布与收益率

正态分布(Normal Distribution)又叫高斯分布、常态分布。通常用来描述随机变量的概率分布。 自然界的数据分布通常是符合正态分布规律的&#xff0c;比如说人的身高、体重。但是非自然界数据就不一定了。尤其是经过人为加工过的数据。 金融领域大量使用正态分布来计算收益率和…

用 Raspberry Pi 5 构建文件服务器(NAS)

系列文章目录 文章目录 系列文章目录前言一、软件设置二、存储器设置三、配置总结 前言 2023 年 11 月 13 日 本-埃弗拉德 这个 #MagPiMonday 周一&#xff0c;学习如何利用 Raspberry Pi 5 的新功能制作更好的 NAS。本教程是 MagPi 推出的 Raspberry Pi 5 特辑的一部分。 M.…

[Kettle] 记录处理

1.排序记录 排序是对数据中的无序记录&#xff0c;按照自然或客观规律&#xff0c;根据关键字段大小递增或递减的次序&#xff0c;对记录重新排列的过程 数据源 2019年11月月考数学成绩(Kettle数据集3).xlshttps://download.csdn.net/download/Hudas/88521681 2019年11月月考…