【博学谷学习记录】超强总结,用心分享 | hive

发布时间 2023-06-01 10:15:52作者: 牛牛牛牛牛牛牛牛

【博学谷IT技术支持】

一、介绍

hive是基于hadoop的数据仓库工具,用来进行数据的提取、转化、加载,是一种可以存储、查询和分析存储在hadoop中的大规模数据机制。hive将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,将SQL语句变成MapReduce任务执行。

特征

数据仓库是面向主题的、集成的、稳定的、时变的数据集合,用以支持管理决策。

根据数据流入流出的过程,数据仓库架构可为三层:数据源、数据仓库、数据应用。同时数据仓库将数据从来源端经过抽取(extract)转换(transform)加载(load)至目的端的过程称为ETL

为什么使用hive:

  • 操作接口采用SQL语法,提供快速开发的能力
  • 避免了写MR,减少了学习成本
  • 功能扩展方便

hive的特点

  • 通过类SQL分析数据
  • 数据存储在HDFS上,本身不存储数据,可以使已经存储的数据结构化
  • 因为hive语句最终会生产MapReduce任务去计算,适用于离线分析
  • hive能够存储很大的数据集,可以直接访问HDFS或者其他数据存储系统中的文件
  • hive除了支持MR计算引擎,还支持SparkTeZ这两种分布式计算引擎
  • 数据的存储格式有多种,比如二进制格式,普通文本格式

二、安装

安装方式

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

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

内嵌模式

配置简单,一次只能一个客户端连接,适用于实验,不适用于生产环境。解压hive安装包, bin/hive 启动即可使用。缺点:不同路径启动hive,每个hive都有自己的元数据,无法共享

本地模式

本地模式采用外部数据库来存储元数据,目前支持的数据库有MySQL、Postgres、Oracle、MS SQL Server。
本地模式启动时,用的是跟hive在同一个进程的metastore服务。

hive根据hive.metastore.uris参数来判断,如果为空,则为本地模式。缺点:每启动一次hive服务,都内置启动了一个metastore.

远程模式

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

hive安装

// 上传压缩包到Linux目录
cd /export/software/
// 解压到server目录 这里的版本随意
tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /export/server
// 移动到server目录并修改文件命
cd /export/server
mv apache-hive-3.1.2-bin hive-3.1.2

// 解决hadoop、hive之间guava版本差异
cd   /hive-3.1.2/
rm -rf lib/guava-19.0.jar
cp  /export/server/hadoop-3.3.0/share/hadoop/common/lib/guava-27.0-jre.jar  ./lib/

// 添加mysql jdbc驱动到hive安装包的lib文件下
mysql-connector-java-5.1.47-bin.jar

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

vim hive-env.sh
HADOOP_HOME=/export/server/hadoop-3.3.0
export  HIVE_CONF_DIR=/export/server/hive-3.1.2/conf
export  HIVE_AUX_JARS_PATH=/export/server/hive-3.1.2/lib
export  HADOOP_HEAPSIZE=4096

// 在conf目录新增hive-site.xml配置mysql等相关信息

vim hive-site.xml

<configuration>
    <!-- 存储元数据mysql相关配置 -->
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value> jdbc:mysql://min-node3:3306/hive?createDatabaseIfNotExist=true&amp;useSSL=false&amp;useUnicode=true&amp;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>min-node3</value>
    </property>

    <!-- 远程模式部署metastore 服务地址 -->
    <property>
        <name>hive.metastore.uris</name>
        <value>thrift://min-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>


// 配置环境变量
vim /etc/profile
export HIVE_HOME=/export/server/hive-3.1.2
export PATH=:$HIVE_HOME/bin:$PATH

source /etc/profile

// 初始化metadata
cd /hive-3.1.2/
schematool  -initSchema -dbType mysql -verbos

// Metastore 和 Hiveserver2启动
nohup hive --service metastore  2>&1 &
nohup hive --service hiveserver2 2>&1  &