hive安装及配置

hive安装和部署

Hive地址

1.Hive官网地址 http://hive.apache.org/

2.文档查看地址 https://cwiki.apache.org/confluence/display/Hive/GettingStarted

3.下载地址 http://archive.apache.org/dist/hive/

4.github地址 https://github.com/apache/hive

前提准备

由于Apache Hive是一款基于Hadoop的数据仓库软件,通常部署运行在Linux系统之上。因此不管使用何种方式配置Hive Metastore,必须要先保证服务器的基础环境正常,Hadoop集群健康可用。

1.服务器的基础环境

集群时间同步、防火墙关闭、主机Host映射、免密登录、JDK安装

2.Hadoop集群健康可用

启动Hive之前必须先启动Hadoop集群。特别要注意,需等待HDFS安全模式关闭之后再启动运行ive。
Hive不是分布式安装运行的软件,其分布式的特性主要借由Hadoop完成。包括分布式存储、分布式计算。
配置Hive操作Hadoop权限
vi /opt/apps/hadoop-3.1.1/etc/hadoop/core-site.xml 
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>

<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>

<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>


3.MySQL数据库准备

因为我们使用远程连接模式,要把元数据存储到Mysql中.所以需要安装mysql并开启远程连接权限.
Mysql安装我们已经安装完毕,没有安装详情参照Linux02课件.
这里直接开启远程权限
1.登录  mysql -uroot  -proot
2.在mysql中设置允许简单密码
  set global validate_password_policy=0;
  set global validate_password_length=1;
3.开放远程连接权限
  grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
4.刷新权限 
  flush privileges;

这样就开启成功,开启成功后可以在windows上用图形化工具连接一下查看是否成功
补充数据库修改密码命令 SET PASSWORD FOR 'root'@'linux01' = PASSWORD('root'); 

上传解压

将资料中的apache-hive-3.1.2.tar.gz上传到linux01的/opt/apps文件夹 可以使用rz命令或者xftp工具
上传后进入到apps文件夹 进行解压
tar -zxvf apache-hive-3.1.2.tar.gz
解压后名称比较长 我们简单修改一下
mv apache-hive-3.1.2 hive-3.1.2

如果hadoop版本比较高需要解决Hadoop和hive中guava版本差异(我们用的hadoop版本是3.1.1不需要修改)
在hive的lib文件夹下 guava的jar包版本是19.0  
而高版本的的hadoop的/opt/apps/hadoop-3.1.1/share/hadoop/common/lib
下的guava包是27.0 
可以删除hive下的guava 将hadoop的复制过来

配置

配置hive系统环境变量 让Hive命令可以在任意位置运行

vi /etc/profile  
export  JAVA_HOME=/opt/apps/jdk1.8.0_191
export  HADOOP_HOME=/opt/apps/hadoop-3.1.1
export  HIVE_HOME=/opt/apps/hive-3.1.2
export  PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin

添加完毕后别忘记
source /etc/profile

Hive总共有三种配置方式:内嵌模式,本地模式,远程模式. 三种方式主要区别在于Metastore是否需要单独启动,及Metadata存储在哪种数据库中.我们主要使用的是远程模式,这也是企业中使用的模式.

主要区别在于Metastare是不是需要单独启动? 内嵌模式和本地模式不需要单独启动  远程模式需要单独启动
Metadata元数据信息保存在哪里? 内嵌模式保存在hive内置数据库中Derby  本地模式和远程模式保存在mysql中
远程模式

​ 远程模式(Remote Metastore )下,Metastore服务在其自己的单独JVM上运行,而不在HiveServer的JVM中运行。如果其他进程希望与Metastore服务器通信,则可以使用thrift Network API进行通信。

​ 远程模式下,需要配置hive.metastore.uris 参数来指定metastore服务运行的机器ip和端口,并且需要单独手动启动metastore服务。元数据也采用外部数据库来存储元数据,推荐使用MySQL。

​ 在生产环境中,建议用远程模式来配置Hive Metastore。在这种情况下,其他依赖hive的软件都可以通过Metastore访问hive。由于还可以完全屏蔽数据库层,因此这也带来了更好的可管理性/安全性。

具体配置(重要)

1.修改Hive环境变量文件 添加Hadoop_HOME

#进入到hive下的conf文件夹
cd /opt/apps/hive-3.1.2/conf
#将hive环境变量文件模版 改为可用文件
mv  hive-env.sh.template  hive-env.sh
#在最后添加Hadoop_Home
export HADOOP_HOME=/opt/apps/hadoop-3.1.1
export HIVE_CONF_DIR=/opt/apps/hive-3.1.2/conf
export HIVE_AUX_JARS_PATH=/opt/apps/hive-3.1.2/lib

shift: set nu  将第40行注释打开
export HADOOP_HEAPSIZE=1024

2.创建Hive的核心配置文件 进行配置

在hive下的conf文件夹下 直接vi一个hive-site.xml
vi  hive-site.xml
<configuration>
    <!-- 记录hive中的元数据信息  记录在mysql中 -->
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://linux01:3306/hive?createDatabaseIfNotExist=true&amp;useSSL=false</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
    </property>
    <!-- mysql的用户名和密码 -->
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>root</value>
    </property>
    <!-- hive在HDFS上的工作目录 -->
    <property>
        <name>hive.metastore.warehouse.dir</name>
        <value>/user/hive/warehouse</value>
    </property>
    <property>
        <name>hive.exec.scratchdir</name>
        <value>/user/hive/tmp</value>
    </property>
    <property>
        <name>hive.querylog.location</name>
        <value>/user/hive/log</value>
    </property>
    <!-- 客户端远程连接的端口 -->
    <property>
        <name>hive.server2.thrift.port</name>
        <value>10000</value>
    </property>
    <property>
        <name>hive.server2.thrift.bind.host</name>
        <value>linux01</value>
    </property>
    <!-- hive服务的页面的端口 -->
    <property>
        <name>hive.server2.webui.port</name>
        <value>10002</value>
    </property>
    <property>
        <name>hive.server2.long.polling.timeout</name>
        <value>5000</value>
    </property>
    <property>
        <name>hive.server2.enable.doAs</name>
        <value>true</value>
    </property>
    <property>
        <name>datanucleus.autoCreateSchema</name>
        <value>false</value>
    </property>
    <property>
        <name>datanucleus.fixedDatastore</name>
        <value>true</value>
    </property>
    <property>
        <name>hive.execution.engine</name>
        <value>mr</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>
    <!-- 添加元数据服务配置 -->
    <property>
        <name>hive.metastore.uris</name>
        <value>thrift://linux01:9083</value>
    </property>
</configuration>

3.开启hive操作hadoop的权限

已经配置过  见 前提准备

4.上传MySQL驱动包放入到Hive的lib文件夹下

Hive的lib包中默认没有mysql驱动的jar包.我们需要上传一个mysql的jdbc驱动jar包放入到hive的lib下.
cd /opt/apps/hive-3.1.2/lib
使用rz命令上传我们之前用过的jdbc的jar包即可 

hive初始化

将hive的原数据信息初始化到mysql中 用的是hive下bin中的schematool命令 我们配置了环境变量可以直接使用.
schematool -initSchema -dbType mysql

最后出现 completed初始化成功 
Initialization script completed
schemaTool completed

在mysql数据库中发现生成一个新的hive数据库 里面默认有74张表 , 说明hive初始化成功!

启动元数据服务

前台启动  
hive --service metastore
如果使用前台启动需要克隆一个session来访问 或者使用ctrl+z挂起到后台 因为元数据服务会一直在前台运行

直接后台启动
hive --service metastore &
这种启动方式 会在后台启动 可以正常访问 但是如果退出终端 就会退出
nohup hive --service metastore & 
这种方式 即使退出终端 服务也会继续运行 启动日志会在当前目录下的 nohup.out中
nohup hive --service metastore 1>/dev/null 2>1 &
这种方式将 启动日志 写入到黑洞 不显示任何内容

/dev/null :代表空设备文件
>  :代表重定向到哪里,例如:echo "123" > /home/123.txt
1  :表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null"
2  :表示stderr标准错误输出
&  :表示等同于的意思,2>&1,表示2的输出重定向等同于1


1>/dev/null:首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。
2>&1:接着,标准错误输出重定向标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。


检查启动额端口
netstat -nltp | grep 9083  端口存在说明元数据服务启动成功

HIVE的命令行客户端

Hive发展至今,总共历经了两代客户端工具。

第一代客户端( deprecated不推荐使用)︰$HIVE_HOME/bin/hive,是一个shellUtil。主要功能∶一是可用于以交互或批处理模式运行Hive查询;二是用于Hive相关服务的启动,比如metastore服务。

第二代客户端( recommended推荐使用)∶$HIVE_HOME/bin/beeline,是一个JDBC客户端,是官方强烈推荐使用的Hive命令行工具,和第一代客户端相比,性能加强安全性提高。

第一代客户端Hive

本地访问

如果是在linux01上使用
先启动元数据服务 注意如果已经启动不能再次启动 会报错
nohup hive --service metastore & 
启动后直接使用hive命令即可
进入后可以使用正常的SQL语句.
退出客户端的命令 
exit;
quit;

远程访问

我们是远程连接模式是可以使用其他计算机来进行访问的.
如果使用其他计算机访问 
首先这台计算机需要安装hive  上传解压
cd /opt/apps/hive-3.1.2/conf
配置hive-env.sh
export HADOOP_HOME=/opt/apps/hadoop-3.1.1
export HIVE_CONF_DIR=/opt/apps/hive-3.1.2/conf
export HIVE_AUX_JARS_PATH=/opt/apps/hive-3.1.2/lib

vi hive-site.xml
需要在hive-site.xml中配置 元数据服务的地址 其他什么都不需要配置了
 <configuration>
    <property>
        <name>hive.metastore.uris</name>
        <value>thrift://linux01:9083</value>
    </property>
    </configuration>
 就可以直接访问
 注意没有配置hive环境变量 需要到/opt/apps/hive-3.1.2/bin 下使用hive命令
 ./hive
第二代客户端Beeline

本地访问

先启动Metastore服务  如果已经启动可以忽视
nohup hive --service metastore & 
然后才启动hiveserver2服务 端口号10000 在hive-site.xml中进行的配置
nohup hive --service hiveserver2 &
启动后可以使用netstat -nltp | grep 10000 来进行验证 检查10000端口
查看WEBUI页面http://linux01:10002/

使用beeline命令 进入后输入相关连接的uri
!connect jdbc:hive2://linux01:10000
需要输入用户名 root 密码为空 不输入 直接回车

退出命令 !quit  或者直接ctrl+c

可以使用 beeline -u jdbc:hive2://linux01:10000 -n root

远程访问

使用其他计算机访问的话首先保证 linux01的Metastore和 hiveserver2都已经启动

上传 解压 不再多说
这里只需要配置 hive-env.sh
export HADOOP_HOME=/opt/apps/hadoop-3.1.1
export HIVE_CONF_DIR=/opt/apps/hive-3.1.2/conf
export HIVE_AUX_JARS_PATH=/opt/apps/hive-3.1.2/lib

由于不直接访问Metastore 所以不需要配置hive-site.xml 直接使用beeline正常访问即可
2.7.3 非交互式操作(了解)

不进入到hive中 直接执hql语句或者hql文件 ,执行完毕后返回linux命令行

使用 –e 参数来直接执行hql的语句

hive -e "show databases;"

使用 –f 参数通过指定文本文件来执行hql的语句

vi a.sql
show databases;
执行sql文件
hive -f a.sql
执行sql文件 将执行结果写入到另一个文件中
hive -f a.sql > b.sql

2.8 Hive简单体验

在Hive上可以直接写SQL语句,即使我们不会HQL也可以进行简单使用,比如建库,建表.

create database hive01;
use hive01;
create table `temperature`(
     `id`  int ,
     `city` varchar(255),
     `tempera` double,
     `date` varchar(255)
);

当我们这样创建一张表的时候,mysql会存储对应的元数据信息.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oYsjwGfA-1684216363749)(img/元数据信息保存.png)]

有了张表后我们尝试向里面插入数据

INSERT INTO temperature VALUES (2,'beijing',37,'2022-07-20');

通过执行的日志我们发现,这条语句会转换为MR程序运行,执行时间很长.如果使用mysql的话是毫秒级别就可以执行完,但是使用hive会发现要执行很长时间.(本地MR大概要几秒,如果提交到Yarn上要几十秒);

如果想配置yarn运行 
在hadoop中 配置mapred-site.xml 添加
  <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
在执行insert + values操作的时候  虽然最终执行成功,结果正确。但是在执行日志中会出现如下的错误信息。
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.StatsTask
此信息类似于计数器 用于告知用户插入数据的相关信息 但是不影响程序的正常执行。
如果报这个错误 
可以设置两个参数 
set hive.txn.stats.enabled=false
set hive.stats.autogather=false

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EfrVeRB8-1684216363749)(img/HDFS数据.png)]

通过这些操作我们可以得出几个结论:

  • Hive SQL语法和标准SQL很类似,使得学习成本降低。
  • Hive底层是通过MapReduce执行的数据插入动作,所以速度慢。
  • 如果大数据这么一条一条插入的话是非常不现实的,成本极高。
  • Hive应该具有自己特有的数据插入表方式,结构化文件映射成为表

{ 基本步骤 }

  1. 在HDFS上准备一个结构化的文件
  2. 根据文件中数据结构创建一张hive表
  3. 导入数据 ***
  4. 查询表中的数据

创建文件上传到hdfs

vi  temperature.txt;

1,beijing,37,2022-07-20
2,shanghai,40,2022-07-20
3,beijing,36,2022-07-21
4,shanghai,41,2022-07-21

hdfs dfs -put temperature.txt /

建表

create table `temperature2`(
     `id`  int ,
     `city` varchar(255),
     `tempera` double,
     `date` varchar(255)
) row format delimited fields terminated by ',';  -- 指定行的分隔方式 ,

导入数据

load data inpath '/temperature.txt' into table  temperature2 ;
  • 查询每日最高温度
select `date`,max(tempera) from temperature2 group by `date`;

结果
+-------------+-------+
|    date     |  _c1  |
+-------------+-------+
| 2022-07-20  | 40.0  |
| 2022-07-21  | 41.0  |
+-------------+-------+

通过这次体验我们发现,Hive底层的确是通过MapReduce执行引擎来处理数据的执行完一个MapReduce程序需要的时间不短.如果是小数据集,使用hive进行分析将得不偿失,延迟很高.如果是大数据集,使用hive进行分析,底层MapReduce分布式计算,才能体现效果.

Hive可视化工具

Hive自带的客户端Hive CLI, Beeline CLI 虽然不需要安装,但是编写SQL环境比较恶劣,没有提示,没有高亮,还不能保存,这里提供两种可视化工具. DBeaver和idea.

这里介绍怎么使用idea连接

使用idea连接Hive

idea我们已经不陌生了,创建一个项目即可.

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hive是基于Hadoop的数据仓库工具,它可以将结构化数据映射为一张数据库表,并提供类似SQL语言的查询功能,使得数据分析师和开发人员可以使用SQL语言来查询和分析大规模的数据。下面是Hive安装与配置详解: 1. 安装Java Hive需要Java环境来运行,所以需要先安装Java。可以通过以下命令来安装Java: ``` sudo apt-get update sudo apt-get install default-jdk ``` 2. 安装Hadoop Hive是基于Hadoop的,所以需要先安装Hadoop。可以参考Hadoop安装与配置教程。 3. 下载Hive 可以从Hive的官方网站下载最新的版本,也可以从Apache的镜像站点下载。下载完成后,解压缩到指定目录,比如/opt/hive。 4. 配置Hive 配置文件位于Hive的conf目录下,修改hive-env.sh文件,设置JAVA_HOME和HADOOP_HOME变量的值,比如: ``` export JAVA_HOME=/usr/lib/jvm/default-java export HADOOP_HOME=/opt/hadoop ``` 另外,还需要修改hive-site.xml文件,将以下属性设置为对应的值: ``` <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:derby:/opt/hive/metastore_db;create=true</value> <description>JDBC connect string for a JDBC metastore</description> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>org.apache.derby.jdbc.EmbeddedDriver</value> <description>Driver class name for a JDBC metastore</description> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hive</value> <description>username to use against metastore database</description> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>hive</value> <description>password to use against metastore database</description> </property> ``` 5. 启动Hive 启动Hive之前,需要先启动Hadoop。启动Hadoop后,可以通过以下命令启动Hive: ``` cd /opt/hive/bin ./hive ``` 启动成功后,可以在Hive的Shell中输入SQL语句,比如: ``` hive> show tables; ``` 以上就是Hive安装与配置详解。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值