[ Hive ] Hive入门 : 数仓基础.Hive架构.安装部署

1 数仓基础

1.1 概念

数据仓库(Data Warehouse,简称数仓、DW),是一个用于存储、分析、报告的数据系统。数据仓库的目的是构建面向分析的集成化数据环境,为企业提供决策支持

仓库解读:

  1. 不“生产”任何数据,其数据来源于不同外部系统
  2. 同时数据仓库自身也不需要“消费”任何的数据,其结果开放给各个外部应用使用

image-20220331120321527

1.2 数仓需求引出

信息用于两处:操作型记录的保存+分析型决策的制定

  • 操作型记录的保存:

    1)公司下辖多条业务线,各业务线的业务正常运营需要记录维护多种不同信息.引出联机事务处理系统(OLTP)

    2)OLTP的主要任务是执行联机事务和查询处理,基本特征是前台接收的用户数据可以立即传送到后台进行处理,并在很短的时间内给出处理结果

    3)关系型数据库是OLTP典型应用,比如:Oracle、Mysql、SQL Server等

  • 分析型决策的制定

    1)针对业务数据的增多和运营的许多问题的产生,制定相关的解决措施,瞎拍桌子是肯定不行的。

    2)最稳妥办法就是:基于业务数据开展数据分析,基于分析的结果给决策提供支撑。也就是所谓的数据驱动决策的制定

    3)问题:数据分析,数据库可以吗

    答案:可以,但没必要.

具体为什么不在OLTP开展分析?

  1. OLTP核心是面向业务,支持业务,支持事务,业务主要为读和写,读的压力明显大于写的压力
  2. 数据分析对海量的数据读取,服务器压力大
  3. OLTP数据存储时间受限
  4. 数据的不同表的字段类型属性不统一

因此:

  1. OLTP仅适用于数据规模小的业务低谷期,为解决以上问题,数仓雏形出现
  2. 这种数据分析平台具有面向分析,支持分析的特点,并且和OLTP系统解耦合
  3. 数仓是一个用于存储、分析、报告的数据系统,目的是构建面向分析的集成化数据环境,公司就可以基于分析决策需求。我们把这种面向分析、支持分析的系统称之为OLAP(联机分析处理)系统。数据仓库是OLAP一种。

1.3 主要特征

数据仓库是面向主题性(Subject-Oriented )、集成性(Integrated)、非易失性(Non-Volatile)和时变性(Time-Variant )数据集合,用以支持管理决策 。

  • 面向主题性

    主题是一个抽象的概念,是较高层次上企业信息系统中的数据综合、归类并进行分析利用的抽象。

  • 集成性

    主题相关的数据通常会分布在多个操作型系统中,彼此分散、独立、异构–>数据进入数据仓库之前,必然要经过统一与综合,对数据进行抽取、清理、转换和汇总

  • 非易失性

    数据仓库是分析数据的平台,而不是创造数据的平台,通过数仓去分析数据中的规律,而不是去创造修改其中的规律

  • 时变性

    数据仓库的数据需要随着时间更新,以适应决策的需要

1.4 多角度对比

1 ) 联机事务处理OLTP(On-Line Transaction Processing)对比 联机分析处理OLAP(On-Line Analytical Processing)

OLTPOLAP
数据源仅包含当前运行日常业务数据整合来自多个来源的数据,包括OLTP和外部来源
目的面向应用,面向业务,支撑事务面向主题,面向分析,支撑分析决策
焦点当下主要面向过去、面向历史 实时数仓
任务读写操作大量读而很少写操作
响应时间毫秒秒、分钟、小时或者天取决于数据量和查询复杂性
数据量小数据,MB,GB大数据,TP,PB

image-20220331154939845

2 ) 数据库和数据仓库,二者基本毫无关系

数据库数据仓库
别名RDBMSDW
典型代表MysqlHive
处理系统OLTPOLAP
主要特征面向业务面向主题
存储数据业务数据历史数据
目的捕获数据分析数据

说明:数仓不是大型的数据库,尽管数仓的存储规模大,另外数仓也并不是要取代数据库

补充:

数据集市作为数仓的子集,由面向多主题改为面向指定主题,从而开展各种应用

1.5 数仓分层架构

按照数据流入流出数仓的过程,数仓最基本分为三个层:操作型数据层(ODS)、数据仓库层(DW)和数据应用层(DA).

image-20220331155855960

为什么分层?

  1. 清晰数据结构
  2. 数据血缘追踪
  3. 减少重复开发
  4. 复杂问题简单化
  5. 屏蔽原始数据的异常

2 Apache Hive入门

2.1 概述

Apache Hive是一款由Facebook实现并开源建立在Hadoop之上的数据仓库系统,可以将存储在Hadoop文件中的结构化、半结构化数据文件映射为一张数据库表,基于表提供了一种类似SQL的查询模型,称为Hive查询语言(HQL),用于访问和分析存储在Hadoop文件中的大型数据集。

核心功能职责是将HQL解析编译为MapReduce程序,然后将程序提交到Hadoop集群执行.

映射:文件和表之间的对应关系(指元数据)

Hive特殊在于其数仓的两种能力(存储数据的能力 , 分析数据的能力)都是借助Hadoop的HDFS,MapReduce实现

2.2 优缺点

优点:

  1. 使用类SQL语法,避免写Map Reduce程序,学习成本低
  2. 适合海量数据的分析与计算
  3. 支持用户自定义函数

缺点:

  1. Hive自动生成的MapReduce作业,通常不够智能化

    具体表现为:生成的mr过多,加上mr的缺点:不擅长DAG计算(每步都需要落盘),后期使用 spark替换mr

  2. 不擅长数据挖掘,无法实现效率更高的算法

  3. hive的执行延迟比较高

  4. =粒度较粗,调优困难

  5. 不支持实时查询和行级别更新

    原因:hive分析的数据存储在hdfs上,不支持随机写,只支持追加写,所以不能update和delete,只能select和insert

总结:由于hive运行于Hadoop之上,其缺点基本受限于hadoop

2.3 hive功能实现

image-20220331162403127

  1. 用户编写sql
  2. Hive对SQL语法解析,检查语法错误
  3. 通过查询元数据编译SQL语句看是否能执行,并优化
  4. 将SQL编译成mr程序提交yarn执行
  5. 监督执行情况
  6. 最终将sql的执行结果封装返回显示给用户

2.4 hive架构.组件

hive架构图

image-20220331162942161

hive组件:

用户接口,元数据管理,Driver驱动程序,执行引擎

2.5 hive数据模型

image-20220331163223268

2.6 Hive对比Mysql

Hive不是大型数据库,也不是要取代Mysql承担业务数据处理

Apache HiveMysql
定位数据仓库数据库
使用场景离线数据分析业务数据事务处理
查询语言HQLSQL
数据存储HDFSLocal FS
执行引擎MR,Tez,SparkExcutor
执行延迟
处理数据规模
常见操作导入数据,查询增删改查

3 Hive安装部署

3.1 安装流程

  1. 修改Hadoop相关配置

    修改core-site.xml配置文件:

    1)hadoop.proxyuser.用户名.hosts(该用户允许通过代理访问的主机节点)

    2)hadoop.proxyuser.用户名.groups(该用户允许通过代理用户所属组)

    3)hadoop.proxyuser.用户名.users(该用户允许通过代理的用户)

    修改yarn-site.xml配置文件:

    1)yarn.nodemanager.resource.memory-mb(NM使用内存)

    2)yarn.scheduler.minimum-allocation-mb(容器最小内存)

    3)yarn.scheduler.maximum-allocation-mb(容器最大内存)

    4)yarn.nodemanager.vmem-check-enabled(虚拟内存检查:关闭)

  2. 起集群

  3. 将hive包解压缩后改名为hive,将其bin目录添加到环境变量

  4. 将hive/lib/lib/log4j-slf4j-impl-2.10.0.jar改为bak后缀,解决日志jar包冲突

  5. 这时如果使用命令schematool -dbType derby -initSchema初始化元数据库,则hive目录下会生成derby.log日志文件和元数据存储目录metastore_db,此时hive将数据存储在hdfs上,元数据存储在hive自带的Derby元数据库

    但是:

    hive默认使用的元数据库derby,不支持多客户端共享元数据,即不支持多客户端并发访问(悲观锁:同时只允许一个客户端操作)

    因此,我们需要将Hive的元数据地址改为MySQL

  6. 将derby.log和metastore_db删除,顺便将hdfs上目录删除,开始将元数据存储位置修改为MySql

  7. 安装并登录MySql

  8. 将Hive元数据配置到MySql:

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

    2)hive/conf/下新建hive-site.xml文件

    3)登录MySQL,在其中新建Hive元数据库

    4)初始化Hive元数据库

总结:从安装流程可以看出,hive将元数据存放mysql中,数据存放在HDFS中,自己啥也不存,将sql语句转为对应的mr执行

3.2 元数据服务

引出:

截止到完成以上流程,hive 访问mysql方式为直接连接,没使用服务,当多hive客户端并发访问(mysql没有乐观锁),并发太高,服务器压力过大,为此进行优化,添加元数据服务,使用桥接的中转方式,负责将请求转发给mysql,(该方式只暴露该服务的地址,保护了hive元数据的安全)

步骤:

  1. 在hive-site.xml文件中添加hive.metastore.uris的值为thrift://hadoop102:9083
  2. 启动hive --service metastore(这种启动方式会占用前台界面)
  3. 启动hive

3.3 jdbc服务

  1. hive-site.xml中添加如下配置

    1)hive.server2.thrift.bind.host(指定hiveserver2连接的host)

    2)hive.server2.thrift.port(指定hiveserver2连接的端口号)

    3)hive.server2.active.passive.ha.enable(hiveserver2的高可用参数)

  2. 使用jdbc方式访问hive,该服务也是前台进程:hive --service hiveservice2

  3. 启动beeline客户端:beeline -u jdbc:hive2://hadoop102:10000 -n 用户名

3.4 hive服务启动脚本

#!/bin/bash
HIVE_LOG_DIR=$HIVE_HOME/logs
if [ ! -d $HIVE_LOG_DIR ]
then
	mkdir -p $HIVE_LOG_DIR
fi
#检查进程是否运行正常,参数1为进程名,参数2为进程端口
function check_process()
{
    pid=$(ps -ef 2>/dev/null | grep -v grep | grep -i $1 | awk '{print $2}')
    ppid=$(netstat -nltp 2>/dev/null | grep $2 | awk '{print $7}' | cut -d '/' -f 1)
    echo $pid
    [[ "$pid" =~ "$ppid" ]] && [ "$ppid" ] && return 0 || return 1
}

function hive_start()
{
    metapid=$(check_process HiveMetastore 9083)
    cmd="nohup hive --service metastore >$HIVE_LOG_DIR/metastore.log 2>&1 &"
    [ -z "$metapid" ] && eval $cmd || echo "Metastroe服务已启动"
    server2pid=$(check_process HiveServer2 10000)
    cmd="nohup hiveserver2 >$HIVE_LOG_DIR/hiveServer2.log 2>&1 &"
    [ -z "$server2pid" ] && eval $cmd || echo "HiveServer2服务已启动"
}

function hive_stop()
{
metapid=$(check_process HiveMetastore 9083)
    [ "$metapid" ] && kill $metapid || echo "Metastore服务未启动"
    server2pid=$(check_process HiveServer2 10000)
    [ "$server2pid" ] && kill $server2pid || echo "HiveServer2服务未启动"
}

case $1 in
"start")
    hive_start
    ;;
"stop")
    hive_stop
    ;;
"restart")
    hive_stop
    sleep 2
    hive_start
    ;;
"status")
    check_process HiveMetastore 9083 >/dev/null && echo "Metastore服务运行正常" || echo "Metastore服务运行异常"
    check_process HiveServer2 10000 >/dev/null && echo "HiveServer2服务运行正常" || echo "HiveServer2服务运行异常"
    ;;
*)
    echo Invalid Args!
    echo 'Usage: '$(basename $0)' start|stop|restart|status'
    ;;
esac

3.5 参数配置方式

  1. 配置文件方式

    默认配置文件:hive-default.xml

    用户自定义配置文件:hive-site.xml

    用户自定义配置会覆盖默认配置,Hive也会读入Hadoop的配置,因为Hive是作为Hadoop的客户端启动的,Hive的配置会覆盖Hadoop的配置。配置文件的设定对本机启动的所有Hive进程都有效。

  2. 命令行参数方式

    启动Hive时,可以在命令行添加-hiveconf param=value来设定参数。

    仅对本次hive启动有效

  3. 参数声明方式

    可以在HQL中使用SET关键字设定参数

    仅对本次hive启动有效

上述三种设定方式的优先级依次递增。即配置文件<命令行参数<参数声明。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值