当前位置: 代码网 > it编程>游戏开发>ar > 数据仓库及应用(hive基础)

数据仓库及应用(hive基础)

2024年08月04日 ar 我要评论
Database:数据库,在HDFS中为hive.metastore.warehouse.dir目录下的一个文件夹。Tables:表,表由列构成,在表上可以进行过滤、映射、连接和联合操作,在HDFS中为数据库目录下的子目录。Hive表分为内部表和外部表:内部表类似于RDBMS中的表,由Hive管理 外部表指向已经存在HDFS中的数据,外部表的真实数据不被Hive管理。Partitions 分区,每个表都可以按指定的键分为多个分区,作用是为了提高查询的效率,在HDFS中是表目录的子目录。

一、hive产生背景

传统hadoop架构存在的一些问题
        mapreduce编程必须掌握java,门槛较高
        传统数据库开发、dba、运维人员学习门槛高
        hdfs上没有schema的概念,仅仅是一个纯文本文件

hive的产生
        为了让用户从一个现有数据基础架构转移到hadoop上
        现有数据基础架构大多基于关系型数据库和sql查询
        facebook诞生了hive

二、hive是什么

它是基于hadoop的数据仓库工具
        方便的将结构化数据文件映射为一张数据库表
        提供sql查询功能,sql语句底层转换为mr作业执行
        hive提供了一系列功能可以方便进行数据etl
hive目前是apache基金会的顶级项目
        hive作为数据仓库工具,非常适合数据仓库联机分析处理(olap)
对于etl的解释
        etl是指“extract, transform, load”的缩写,是数据仓库中常见的一种数据处理过程。在etl过程中,数据从一个或多个来源(extract)抽取出来,经过清洗、转换和整合等处理(transform),最终加载(load)到目标数据库或数据仓库中。
具体来说,etl过程通常包括以下几个步骤:
1. extract(抽取):从一个或多个数据源中抽取数据。这些数据源可以是数据库、文件、api接口等。在这个阶段,数据会被提取出来,准备进行后续的处理。
2. transform(转换):在数据抽取之后,数据会经过各种转换操作,以满足目标系统的需求。转换可能包括数据清洗、数据格式转换、数据合并、数据计算等操作。目的是将原始数据转换为目标数据模型的格式。
3. load(加载):经过转换处理后的数据会被加载到目标数据库或数据仓库中。这个过程包括将数据写入目标系统的表格或数据结构中,以供后续分析和查询使用。etl过程在数据仓库和商业智能系统中起着至关重要的作用,帮助组织将分散的、杂乱的数据整合、清洗并转化为有用的信息。通过etl过程,组织可以实现数据的一致性、准确性和可靠性,从而支持数据分析、报告和决策制定等业务需求。

三、hive在hadoop生态系统中的位置

在hadoop生态系统中,hive是一种数据仓库工具,它提供了类似于sql的查询语言(hiveql)来查询和分析存储在hadoop集群中的大规模数据。hive通常被用作数据仓库,用于结构化数据的存储和查询。

hive的位置可以理解为在hadoop生态系统中处于数据处理和查询层的位置。在hadoop生态系统中,hive通常与以下组件和工具一起使用:

1. hadoop distributed file system (hdfs):hdfs是hadoop的分布式文件系统,用于存储大规模数据。hive通常可以直接查询和分析存储在hdfs上的数据。

2. mapreduce:mapreduce是hadoop的一种计算框架,用于处理大规模数据的并行计算。hive可以通过mapreduce来执行查询和数据处理操作。

3. yarn:yarn是hadoop的资源管理器,用于集群资源的管理和作业调度。hive作业可以由yarn进行资源分配和调度。

4. hive metastore:hive metastore是hive的元数据存储,用于存储表结构、分区信息等元数据。通常,hive metastore会使用关系数据库(如mysql)来存储元数据信息。

总的来说,hive在hadoop生态系统中的位置是作为一个用于数据仓库、数据查询和分析的工具,它通过hiveql语言将sql查询转换为mapreduce任务或tez任务,从而实现对hadoop集群中大规模数据的查询和分析。

四、hive与传统关系型数据库的异同

hiverdbms
查询语言hqlsql
数据存储hdfs块设备、本地文件系统
执行mapreduceexecutor
执行延迟
处理数据规模
事务0.14版本后加入支持
索引

0.8版本后加入

有复制的索引
数据更新不支持支持

五、hive的特点及优势

hive支持运行在不同的计算框架上:mapreduce、tez、spark、flink等。

hive与sql有着相似的语法,大大提高开发效率

hive支持hdfs与hbase上的ad-hoc(点对点模式)

hive支持用户自定义函数、脚本等

hive设计特点:

  • hive不支持对数据的改写和添加,所有数据都是在加载的时候确定的
  • 支持索引,加快数据查询
  • 不同的存储类型,例如:文本文件、序列化文件
  • 将元数据保存在关系数据库中,减少了在查询中执行语义检查时间
  • 可以直接使用存储在hadoop文件系统中的数据
  • 类sql的查询方式,将sql查询转换为mapreduce的job在hadoop集群上执行
  • 编码跟hadoop同样使用utf-8字符集

在生产环境中,hive有如下优势

  • 可扩展,hive可以自由扩展集群规模,拓展功能方便
  • 延展性,hive支持自定义函数,用户可根据需求自定义
  • 容错性,良好的容错性

解决了传统关系数据库在大数据处理上的瓶颈;适合大数据的批量处理。
充分利用集群的cpu计算资源、存储资源,实现并行计算。
hive支持标准sql语法,免去了编写mr程序的过程,减少了并发成本。 

六、hive的框架设计 

hive的架构设计包括三个部分:

hive client

        hive客户发,可通过java、python等语言连接hive并进行与rdbms类似的sql查询操作

hive service

        hive服务端,客户端必须通过服务端与hive交互,主要包括cli、hiveserver、hivewebinterface等组件

hive storage and computing

        包含hive的数据存储与计算的内容,hive元数据存储在rdbms中,数据存储在hdfs中,计算由mr完成

hive框架图:


hive架构主要包括:
cli、hiveserver2、hwi、driver、metastore
hive数据存储模型与rdbms类似,分区和分桶是hive为提升查询性能而特有的概念
hive元数据释对真实数据的描述,通常单独存储在mysql中
hive除了两种命令行开发工具(cli和beeline)之外还有许多第三方工具(hue、ambari、zeppelin) 

hive的工作流程图:


七、hive的适用场景


hive的劣势
        hive的hql表达能力有限:有些复杂运算用hql不易表达;效率低:hive自动生成mr作业,通常不够智能。

业务场景

  • 适用于非结构化数据的离线分析统计
  • hive的优势在于处理大数据,对处理小数据没有优势

不适用场景

  • 复杂的机器学习算法
  • 复杂的科学计算
  • 联机交互式实时查询 

场景技术特点

  • 为超大数据集设计的计算、扩展能力
  • 支持sql like查询语言
  • 多表的join操作
  • 支持非结构化数据的查询、计算
  • 提供对数据存取的编程接口,支持jdbc、odbc

八、hive 的存储格式

hive中的数据
        有真实数据与元数据之分,元数据是表示真实数据与hive表的映射关系
hive真实数据的存储格式

  • textfile,文本文件格式
  • sequencefile,二进制序列化过的文本存储文件格式
  • rcfile,面向列的数据存储格式
  • orcfile,对rcfile的优化格式

存储模型
hive数据在hdfs的典型存储结构表现

 /数据仓库地址/数据库名/表名/数据文件(或分桶文件)
/数据仓库地址/数据库名/表名/分区键/数据文件(或分桶文件) 

hive数据存储模型图:

九、hive数据单元介绍

database:数据库,在hdfs中为hive.metastore.warehouse.dir目录下的一个文件夹。
tables:表,表由列构成,在表上可以进行过滤、映射、连接和联合操作,在hdfs中为数据库目录下的子目录。
hive表分为内部表和外部表:内部表类似于rdbms中的表,由hive管理 外部表指向已经存在hdfs中的数据,外部表的真实数据不被hive管理。

partitions 分区,每个表都可以按指定的键分为多个分区,作用是为了提高查询的效率,在hdfs中是表目录的子目录。

buckets 分桶,根据表中某一列的哈希值将数据分为多个桶,在hdfs最终为同一目录下根据哈希散列后的多个文件。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com