IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Hive学习笔记(二)Hive安装部署 -> 正文阅读

[大数据]Hive学习笔记(二)Hive安装部署

一、安装部署Hive

1.2 安装Hive

把 apache-hive-3.1.2-bin.tar.gz 上传到 linux 的 /opt/software 目录下

将 /opt/software/ 目录下的 apache-hive-3.1.2-bin.tar.gz 到 /opt/module/ 目录下面

 tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /opt/module/

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

mv apache-hive-3.1.2-bin/ /opt/module/hive

1.2 添加环境变量

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

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

1.3 初始化Derby元数据库

在hive根目录下,使用/bin目录中的schematool命令初始化hive自带的Derby元数据库

schematool -dbType derby -initSchema

1.4 如何解决jar包冲突

执行上述初始化元数据库时,会发现存在jar包冲突问题,现象如下:

SLF4J: Class path contains multiple SLF4J bindings.
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]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
Metastore connection URL:    jdbc:derby:;databaseName=metastore_db;create=true
Metastore Connection Driver :  org.apache.derby.jdbc.EmbeddedDriver
Metastore connection User:    APP
Starting metastore schema initialization to 3.1.0
Initialization script hive-schema-3.1.0.derby.sql

解决jar冲突问题,只需要将hive的 /lib 目录下的 log4j-slf4j-impl-2.10.0.jar 重命名即可

 mv lib/log4j-slf4j-impl-2.10.0.jar lib/log4j-slf4j-impl-2.10.0.bak

二、启动Hive

2.1 执行/bin目录下的hive命令

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

bin/hive

2.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 test1(id int);  // 创建表test1,表中只有一个字段,字段类型是int
OK
Time taken: 0.474 seconds
hive> insert into test1 values(1001);    // 向test1表中插入数据
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 test1;       // 查看test1表中所有数据
OK
1001
Time taken: 0.085 seconds, Fetched: 1 row(s)

Hive 默认使用的元数据库为 derby 并且部署方式是内嵌式,在开启Hive之后就会独占元数据库,且不与其他客户端共享数据,如果想多窗口操作就会报错,操作比较局限。因此我们可以直接采用MySQL作为元数据库或者使用元数据服务的方式部署 MetaStore元数据库,就可以支持多窗口操作。

三、元数据的三种访问方式

3.1 元数据库内嵌模式

在这里插入图片描述

在此模式中会连接到一个in-memory的数据库Derby中,一般用于单元测试。

在内嵌模式下,命令行执行 jps –ml 命令,只能看到一个CliDriver进程。

 jps –ml
7170 sun.tools.jps.Jps -ml
2467 org.apache.hadoop.hdfs.server.namenode.NameNode
2676 org.apache.hadoop.hdfs.server.datanode.DataNode
3364 org.apache.hadoop.yarn.server.nodemanager.NodeManager
3656 org.apache.hadoop.mapreduce.v2.hs.JobHistoryServer
6127 org.apache.hadoop.util.RunJar /opt/module/hive/lib/hive-cli-3.1.2.jar org.apache.hadoop.hive.cli.CliDriver

3.2 元数据库直连模式(本地模式)

在这里插入图片描述

通过网络连接到一个关系型数据库中,上面我们配置元数据库位MySQL时,就是这种模式

本地模式采用外部数据库来存储元数据,目前支持的数据库有:MySQL、Postgres、Oracle、MS SQL Server.在这里我们使用 MySQL。

本地模式不需要单独起 MetaStore 服务,用的是跟 hive 在同一个进程里的 MetaStore 服务。也就是说当你启动一个hive 服务,里面默认会帮我们启动一个 MetaStore 服务。
hive 会根据conf/目录下hive-site.xml的 hive.metastore.uris 参数值来判断,如果为空,则为本地模式。

本地模式下hive的配置主需要指定mysql的相关信息即可。

3.2.1 配置mysql

3.2.1.1 MySQL安装部署

1、安装检查

检查当前系统是否安装过Mysql,如果存在就是用下列命令移除,如果不存在则忽略。

rpm -qa|grep mariadb

如果有安装过,会显示有信息,使用下列命令移除安装。如果没有直接下一步就好

sudo rpm -e --nodeps  mariadb-libs
2、执行rpm安装

执行rpm安装,需要将以下安装包导入到要安装的服务器中,并放在某一个文件夹下,

mysql-community-client-5.7.28-1.el7.x86_64.rpm
mysql-community-common-5.7.28-1.el7.x86_64.rpm
mysql-community-devel-5.7.28-1.el7.x86_64.rpm
mysql-community-embedded-5.7.28-1.el7.x86_64.rpm
mysql-community-embedded-compat-5.7.28-1.el7.x86_64.rpm
mysql-community-embedded-devel-5.7.28-1.el7.x86_64.rpm
mysql-community-libs-5.7.28-1.el7.x86_64.rpm
mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm
mysql-community-server-5.7.28-1.el7.x86_64.rpm
mysql-community-test-5.7.28-1.el7.x86_64.rpm

在该文件夹中严格按照如下顺序执行

sudo rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm
3、删除mysql的数据存储目录下的所有数据

删除mysql的数据存储目录下的所有数据,目录地址在 /etc/my.cnf 文件中 datadir 指向的目录下的所有内容

查看datadir的值:

vim /etc/my.cnf
[mysqld]		
datadir=/var/lib/mysql			//删除这个文件夹下的内容

删除/var/lib/mysql目录下的所有内容:

cd /var/lib/mysql
sudo rm -rf ./*        //千万注意执行命令的位置,否则库就没了
4、初始化数据库

这个是mysql数据库安装后的初始化

sudo mysqld --initialize --user=mysql
5、查看临时密码并复制

初始化完成后,查看临时生成的root用户的密码,也是首次登录msql的密码

sudo cat /var/log/mysqld.log
2021-10-18T08:50:32.172049Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2021-10-18T08:50:32.364322Z 0 [Warning] InnoDB: New log files created, LSN=45790
2021-10-18T08:50:32.397350Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2021-10-18T08:50:32.453522Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 73e2af3c-2ff0-11ec-af41-000c29830057.
2021-10-18T08:50:32.454765Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2021-10-18T08:50:32.978960Z 0 [Warning] CA certificate ca.pem is self signed.
2021-10-18T08:50:33.314317Z 1 [Note] A temporary password is generated for root@localhost: OU+*c.C9FZy;

其中**OU+*c.C9FZy;**是你的初始密码,将其复制下来。

6、启动MySQL服务
sudo systemctl start mysqld
7、登录MySQL数据库
mysql -uroot -p
Enter password:  (你的暂时密码)  //输入临时生成的密码,刚才复制的密码
8、修改root用户的密码
mysql> set password = password("新密码");	//输入新密码,记得加分号
9、修改mysql库下的user表中的root用户允许任意ip连接
mysql> update mysql.user set host='%' w	here user='root';
10、刷新,使得修改生效
mysql> flush privileges;

3.2.1.2 拷贝驱动

将MySQL的JDBC驱动拷贝到Hive的lib目录下

cp mysql-connector-java-5.1.37.jar /opt/module/hive/lib

3.2.1.3 配置Metastore到MySql

$HIVE_HOME/conf 目录下新建 hive-site.xml 文件

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>你的密码</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.2.1.4 Hive初始化元数据库

1)登陆MySQL

mysql -uroot -p 你的密码

2)新建Hive元数据库

mysql> create database metastore;
mysql> quit;

3)初始化Hive元数据库

bin/schematool -initSchema -dbType mysql -verbose

4)先启动hadoop集群,在启动Hive,查看是否安装成功。

3.3 使用 MetaStore 服务访问元数据库模式

在这里插入图片描述

在服务器端启动MetaStore服务,客户端利用Thrift协议通过MetaStore服务访问元数据库。元数据服务的访问方式更适合在生产环境中部署使用,相比内嵌式,该方式更加的灵活。

将Mysql做为元数据库,部署元数据服务

在 $HIVE_HOME/conf中 的 hive-site.xml 文件中添加如下配置信息

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

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

启动元数据服务:

hive --service metastore
//启动成功显示如下信息
2021-10-18 18:22:24: Starting Hive Metastore Server

注意: 启动服务后,该窗口会被阻塞,不能再操作,需打开一个新的shell窗口做别的操作。

四、hive的两种访问方式

4.1 cil命令行方式

在前面的操作中,我们都是通过cli的方式访问hive的。

我们可以切身的体会到,通过cli的方式访问hive的不足,如:cli太过笨重,需要hive的jar支持。

4.2 JDBC方式

JDBC方式,本质上是将hive包装为服务发布出去,开发者使用JDBC的方式连接到服务,从而操作hive。

在这里插入图片描述

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>

2、启动hive服务

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

开启元数据服务:

hive --service metastore

开启hive服务

hive --service hiveserver2

3、启动beeline客户端,需要等到hiveserver2完全启动。(它会先去尝试启动tez、spark等引擎,都没有时最后才会使用MR

beeline -u jdbc:hive2://hadoop102:10000 -n atguigu

4、看到如下界面后,证明连接成功,可以进行查询了。

Connecting to jdbc:hive2://hadoop102:10000
Connected to: Apache Hive (version 3.1.2)
Driver: Hive JDBC (version 3.1.2)
Transaction isolation: TRANSACTION_REPEATABLE_READ
Beeline version 3.1.2 by Apache Hive
0: jdbc:hive2://hadoop102:10000>

eeline客户端,需要等到hiveserver2完全启动。(它会先去尝试启动tez、spark等引擎,都没有时最后才会使用MR

beeline -u jdbc:hive2://hadoop102:10000 -n atguigu

4、看到如下界面后,证明连接成功,可以进行查询了。

Connecting to jdbc:hive2://hadoop102:10000
Connected to: Apache Hive (version 3.1.2)
Driver: Hive JDBC (version 3.1.2)
Transaction isolation: TRANSACTION_REPEATABLE_READ
Beeline version 3.1.2 by Apache Hive
0: jdbc:hive2://hadoop102:10000>
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-11-24 08:01:04  更:2021-11-24 08:03:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:59:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码