`
jendgh
  • 浏览: 16612 次
  • 性别: Icon_minigender_2
  • 来自: 济南
文章分类
社区版块
存档分类
最新评论

Hive体系结构 —— 深入浅出学Hive

 
阅读更多
 
第一部分:概念 
概念
•用户接口:用户访问Hive的入口
•元数据:Hive的用户信息与表的MetaData
•解释器:分析翻译HQL的组件
•编译器:编译HQL的组件
•优化器:优化HQL的组件
第二部分:Hive架构与基本组成
架构图
基本组成
•用户接口,包括 CLI,JDBC/ODBC,WebUI
•元数据存储,通常是存储在关系数据库如 mysql, derby 中
•解释器、编译器、优化器、执行器
•Hadoop:用 HDFS 进行存储,利用 MapReduce 进行计算
 
各组件的基本功能
•用户接口主要有三个:CLI,JDBC/ODBC和 WebUI
•CLI,即Shell命令行
•JDBC/ODBC 是 Hive 的JAVA,与使用传统数据库JDBC的方式类似
•WebGUI是通过浏览器访问 Hive
•Hive 将元数据存储在数据库中,目前只支持 mysql、derby,下一版本会支持更多的数据库。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等
•解释器、编译器、优化器完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有 MapReduce 调用执行
•Hive 的数据存储在 HDFS 中,大部分的查询由 MapReduce 完成(包含 * 的查询,比如 select * from table 不会生成 MapRedcue 任务)
Metastore
•Metastore是系统目录(catalog)用于保存Hive中所存储的表的元数据(metadata)信息
•Metastore是Hive被用作传统数据库解决方案(如oracle和db2)时区别其它类似系统的一个特征
•Metastore包含如下的部分:
•Database 是表(table)的名字空间。默认的数据库(database)名为‘default’
•Table 表(table)的原数据包含信息有:列(list of columns)和它们的类型(types),拥有者(owner),存储空间(storage)和SerDei信息
•Partition 每个分区(partition)都有自己的列(columns),SerDe和存储空间(storage)。这一特征将被用来支持Hive中的模式演变(schema evolution)
Compiler
•Driver调用编译器(compiler)处理HiveQL字串,这些字串可能是一条DDL、DML或查询语句
•编译器将字符串转化为策略(plan)
•策略仅由元数据操作和HDFS操作组成,元数据操作只包含DDL语句,HDFS操作只包含LOAD语句
•对插入和查询而言,策略由map-reduce任务中的具有方向的非循环图(directedacyclic graph,DAG)组成
部分:Hive运行模式 
Hive运行模式
•Hive的运行模式即任务的执行环境
•分为本地与集群两种
•我们可以通过mapred.job.tracker 来指明
•设置方式
•hive > SET  mapred.job.tracker=local
第四部分:数据类型
原始数据类型
•Integers
TINYINT - 1 byte
SMALLINT - 2 byte
INT - 4 byte
BIGINT - 8 byte
•Boolean type
BOOLEAN - TRUE/FALSE
•Floating point numbers
FLOAT –单精度
DOUBLE – 双精度
•String type
STRING - sequence of characters in a specified character set
  
复杂数据类型
•Structs: 例子  {c INT; d INT}
•Maps (key-value tuples):. 例子'group' -> gid  M['group']
•Arrays (indexable lists):  例子[‘1', ‘2', ‘3']
•TIMESTAMP  0.8版本新加属性
第五部分:Hive的元数据存储
存储方式与模式
•Hive 将元数据存储在 数据库中
•连接到数据库模式有三种
•单用户模式
•多用户模式
•远程服务器模式
 
单用户模式
此模式连接到一个 In-memory 的数据库 Derby ,一般用于 Unit Test
 
多用户模式
通过网络连接到一个数据库中,是最经常使用到的模式
 
远程服务器模式
•用于非 Java 客户端访问元数据库,在服务器端启动MetaStoreServer,客户端利用 Thrift 协议通过MetaStoreServer 访问元数据库
 
部分:Hive的数据存储
Hive数据存储的基本概念
•Hive的数据存储是建立在Hadoop HDFS之上的
•Hive没有专门的数据存储格式
•存储结构主要包括:数据库、文件、表、视图
•Hive默认可以直接加载文本文件,还支持sequence file 、RCFile
•创建表时,我们直接告诉Hive数据的列分隔符与行分隔符,Hive即可解析数据
Hive的数据模型-数据库
•类似传统数据库的DataBase
•在第三方数据库里实际是一张表
•简单示例
•命令行hive > create database test_database;
Hive的数据模型-表
•Table 内部表
•Partition  分区表
•External Table 外部表
•Bucket  Table 
内部表
•与数据库中的 Table 在概念上是类似
•每一个 Table 在 Hive 中都有一个相应的目录存储数据
•例如,一个表 test,它在 HDFS 中的路径为:/ warehouse /test
• warehouse是在 hive-site.xml 中由 ${hive.metastore.warehouse.dir} 指定的数据仓库的目录
•所有的 Table 数据(不包括 External Table)都保存在这个目录中。
•删除表时,元数据与数据都会被删除
内部表简单示例
•创建数据文件test_inner_table.txt
•创建表
•create table test_inner_table (key string)
•加载数据
•LOAD DATA LOCAL INPATH ‘filepath’ INTO TABLE test_inner_table
•查看数据
•select * from test_inner_table
•select count(*) from test_inner_table
•删除表 drop table test_inner_table
分区表
•Partition 对应于数据库中的 Partition 列的密集索引
•在 Hive 中,表中的一个 Partition 对应于表下的一个目录,所有的 Partition 的数据都存储在对应的目录中
•例如:test表中包含 date 和 position 两个 Partition,则对应于 date = 20120801, position = zh 的 HDFS 子目录为:/ warehouse /test/date=20120801/ position =zh
•对应于  = 20100801, position = US 的HDFS 子目录为;/ warehouse /xiaojun/date=20120801/ position =US
分区表简单示例
•创建数据文件test_partition_table.txt
•创建表
•create table test_partition_table (key string) partitioned by (dt string)
•加载数据
•LOAD DATA INPATH ‘filepath’ INTO TABLE test_partition_table partition (dt=‘2006’)
•查看数据
•select * from test_partition_table
•select count(*) from test_partition_table
•删除表 drop table test_partition_table
外部表
•指向已经在 HDFS 中存在的数据,可以创建 Partition
•它和 内部表 在元数据的组织上是相同的,而实际数据的存储则有较大的差异
•内部表 的创建过程和数据加载过程(这两个过程可以在同一个语句中完成),在加载数据的过程中,实际数据会被移动到数据仓库目录中;之后对数据对访问将会直接在数据仓库目录中完成。删除表时,表中的数据和元数据将会被同时删除
• 外部表 只有一个过程,加载数据和创建表同时完成,并不会移动到数据仓库目录中,只是与外部数据建立一个链接。当删除一个 外部表 时,仅删除该链接
外部表简单示例
•创建数据文件test_external_table.txt
•创建表
•create external table test_external_table (key string)
•加载数据
•LOAD DATA INPATH ‘filepath’ INTO TABLE test_inner_table
•查看数据
•select * from test_external_table
•select count(*) from test_external_table
•删除表 drop table test_external_table
Bucket Table
•可以将表的列通过Hash算法进一步分解成不同的文件存储
•例如:将age列分散成20个文件,首先要对AGE进行Hash计算,对应为0的写入/warehouse/test/date=20120801/postion=zh/part-00000,对应为1的写入/warehouse/test/date=20120801/postion=zh/part-00001
•如果想应用很多的Map任务这样是不错的选择
Bucket Table简单示例
•创建数据文件test_bucket_table.txt
•创建表
•create table test_bucket_table (key string)
     clustered by (key) into 20 buckets
•加载数据
•LOAD DATA INPATH ‘filepath’ INTO TABLE test_bucket_table
•查看数据
•select * from test_bucket_table
•set hive.enforce.bucketing = true;
Hive的数据模型-视图
•视图与传统数据库的视图类似
•视图是只读的
•视图基于的基本表,如果改变,指增加不会影响视图的呈现;如果删除,会出现问题
•如果不指定视图的列,会根据select语句后的生成
•示例
•create view test_view as select * from test
部分:HiveUI介绍
启动UI
•配置
•hive-site.xml 添加
  <property>
       <name>hive.hwi.war.file</name>
       <value>lib/hive-hwi-0.8.1.war</value>
  </property>
•启动Hive的UI sh $HIVE_HOME/bin/hive --service hwi
0
0
分享到:
评论

相关推荐

    Hive_优化——深入浅出学Hive

    【Hive 优化——深入浅出学 Hive】 在大数据领域,Hive 是一个不可或缺的工具,主要用于数据仓库和商业智能(BI)分析。虽然它的主要操作是通过 SQL 进行,但理解其内部原理和优化策略对于提升集群执行效率至关重要...

    Java私塾:Hive Shell 基本操作——深入浅出学Hive

    **Java私塾:深入浅出学Hive——Hive Shell基本操作** 在大数据处理领域,Apache Hive 是一种基于 Hadoop 的数据仓库工具,它允许用户使用 SQL 类似的查询语言(HiveQL)来管理和处理存储在 HDFS 上的大量数据。...

    Hive学习必备——配置Hive环境教程 免费分享哦~

    Hive学习必备——配置Hive环境教程 在这篇文章中,我们将详细介绍如何配置Hive环境,包括安装Hive、配置Hadoop环境、配置Hive Metastore数据库等步骤。同时,我们还将使用Xshell6工具来远程连接到Hive服务器,并...

    深入浅出学习HIVE.pdf

    Hive是基于Hadoop的一个数据仓库工具,用于将结构化...初学者可以从Hive的安装配置和使用开始,逐步深入到Hive体系结构、HiveQL的使用、Hive函数、高级编程以及Hive的优化等方面,以达到深入理解并熟练使用Hive的目标。

    HDP平台的Hive性能调优——Hive高性能最佳实践

    标题中提到的“HDP平台的Hive性能调优——Hive高性能最佳实践”涉及Hadoop发行版平台(HDP)上Apache Hive的性能优化。Apache Hive是一个构建在Hadoop上的数据仓库工具,它允许用户通过类SQL语言HiveQL来对大数据...

    深入浅出 Hive

    【深入浅出 Hive】 Hive 是一款基于 Hadoop 的数据仓库工具,它的主要目标是提供对大规模分布式存储在 HDFS 上的数据集进行便捷的查询和分析能力。Hive 提供了类 SQL 的查询语言——HiveQL(HQL),使得熟悉 SQL 的...

    hive数仓、hive SQL 、 hive自定义函数 、hive参数深入浅出

    本教程将深入探讨Hive数仓的架构与设计,Hive SQL的基本语法及高级特性,以及如何自定义函数以满足特定需求,并详细解析Hive的重要参数配置。 1. Hive数仓: - 数据仓库概念:数据仓库是为决策支持系统设计的,...

    hive 表结构导出

    支持hive 源数据、表结构导出

    Hive体系结构介绍

    图1.1Hive体系结构(1)用户接口主要有三个:CLI,Client和WUI。其中最常用的是CLI,Cli启动的时候,会同时启动一个Hive副本。Client是Hive的客户端,用户连接至HiveServer。在启动Client模式的时候,需要指出...

    深入浅出Hive企业级架构优化、Hive Sql优化、压缩和分布式缓存

    ### 深入浅出Hive企业级架构优化 #### Hive概述 Apache Hive 是一个基于 Hadoop 的数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的 SQL 查询功能,使不熟悉 MapReduce 的开发人员也能用 ...

    Hive4——HIVE元数据库.pdf

    其中,元数据库在Hive系统中扮演着核心角色,它存储了关于Hive对象的所有元信息,如表结构、分区、列信息等。本文将深入探讨Hive元数据库的原理和功能,以及与传统关系数据库的异同。 首先,Hive的元数据存储在...

    Hive2——Hive和Hadoop关系.pdf

    6. **数据仓库**:Hive将Hadoop转变为一个数据仓库,通过元数据(metadata)管理数据表结构,使得数据的组织和查询更加有序和高效。 7. **ETL支持**:Hive也支持数据的提取、转换和加载(ETL)过程,使得数据清洗和...

    深入浅出Hive企业级架构优化、Hive Sql优化,视频

    深入浅出Hive企业级架构优化、Hive Sql优化,视频!!!

    Hadoop深入浅出之Hive介绍.pptx

    《Hadoop深入浅出之Hive介绍》 Hive,作为大数据处理的重要工具,是建立在Hadoop生态系统上的数据仓库框架。它旨在提供一个简单、SQL-like的查询语言HiveQL,使得熟悉SQL的用户无需深入理解MapReduce的复杂性,也能...

    hive的学习资料

    Hive 提供了一个类似 SQL 的查询语言——HiveQL,使得非 MapReduce 开发者也能方便地进行大数据分析。此外,Hive 还允许 MapReduce 开发人员通过编写自定义的 mapper 和 reducer 来执行更复杂的计算任务。 **1. ...

    批量导出hive表结构

    通过shell脚本,批量把一个库下面的表结构全部导出,在开发环境执行过。

    Hive3——Hive和普通关系数据库的异同.pdf

    《Hive与普通关系数据库的异同》 Hive与普通关系数据库,如MySQL、Oracle等,在设计理念、功能特性和应用场景上存在着显著的差异。以下将详细解析它们之间的主要区别。 1. **查询语言**: Hive采用了类SQL的查询...

    王家林hive学习资料

    课程特色在于理论与实践相结合,通过深入浅出的讲解和动手实操,让学员能够全面理解Hive的内部机制。课程内容包括Hadoop的四大核心技术——HDFS、MapReduce、HBase和Hive,以及Hive集群的搭建、管理和监控。此外,...

Global site tag (gtag.js) - Google Analytics