欢迎投稿

今日深度:

Hive入门,

Hive入门,


一、Hive简介

Hive是什么

  • Hive是构建在hadoop之上的数据仓库平台
  • Hive是一个sql解析引擎,他将sql语句转译车行mapreduce作业并在hadoop上执行
  • Hive表示hdfs的一个文件目录,一个表对应一个目录名。如果有分区表,则分区值对应子目录名

产生的原因:

mysql:数据量大量增加的时候,查询语句需要执行很长时间

oracle:经受不住持续增长的数据

hadoop:可以解决大规模数据存储和计算的问题但是mapreduce程序过于繁琐,比如在执行类似sql查询语句的时候

Hive:提供的类似sql语法的HQL语句,自动将HQL语句编译为MR作业在Hadoop上执行,降低了分析人员使用hadoop进行数据分析的难度

二、Hive体系结构

Hive在hadoop中的位置:

这里写图片描述

Hive是hadoop的数据仓库处理工具,它所有的数据都存储在hadoop的文件系统中 。Hive在加载数据的过程中不会对数据进行修改,只是将数据移动到hdf中Hive设定的目录下,所以Hive不支持读数据的修改和添加,所有数据都是在加载的时候确定的 。

Hive的设计特点如下:

  • 支持索引 加快查询,
  • 支持不同的存储类型 比如纯文本文件 hbase中的文件
  • 将元数据保存在关系型数据库中 减少了再查询中执行予语义检查的时间
  • 可以直接使用存储在hadoop文件系统中的数据
  • 支持大量的用户函数数据挖掘工具来完成内置函数无法完成的功能
  • 类sql查询方式,将sql语句转换为MapReduce的job在hadoop上执行
  • 编码跟hadoop使用相同的utf-8字符集
体系结构图:

1.用户接口:

  • cli启动的时候会启动一个副本;
  • JDBC客户端:封装了thrift、Java应用程序,可以通过指定主机和端口连接到爱另一个进程中运行的Hive服务器;
  • ODBC 客户端:允许支持ODBC协议的应用程序连接到Hive;
  • WUI:通过浏览器访问Hive

2.Thrift服务器:基于socket通讯,支持跨语言,简化了再多种编程语言中使用Hive命令

3.解析器:

  • 编译器:完成HQL语句从词法分析 语法分析 编译 优化以及执行计划的生成
  • 优化器:演化组件,规则:列修建 谓词下压
  • 执行器:顺序执行所有job,如果taskzhijian不存在依赖关系,那么可以采用并发执行的方式执行job

4.元数据库:

Hive的数据由两部分组成, 数据文件和元数据。 元数据用于存放Hive库中的基础信息,它存储在关系型数据库中,如mysql、erby。元数据包括:数据库的信息、表的名字、表的列和分区及其属性、表达的属性、表的数据所在目录等

5.Hadoop:

Hive扥数据文件存储在HDFS中,大部分的查询投MapReduce完成(对于包含* 的查询语句,比如select * from 不会产生MR作业)

三、Hive的运行机制

四、Hive的应用场景

适用场景:
  • 海量数据的存储处理
  • 数据挖掘
  • 海量数据的离线分析
不适用的场景
  • 复杂的机器学习算法
  • 复杂的科学计算
  • 联机交互实时查询

五、Hive中的数据类型

基本数据类型:
  • TINYINTLL:1个字节
  • SMALLINT:2个字节
  • BIGINT:4个字节
  • STRING:最大2GB
  • FLOAT:4个字节
  • DOUBLE:8个字节
复杂数据类型:
  • Map:一组有序字段,字段类型必须相同
  • ARRAY:无序键值对,键值对内部字段类型必须相同
  • STRUCT:一组字段,字段类型可以不同
元数据

六、Hive的数据模型

Hive数据库:

类似传统数据库的DataBase,在元数据库里实际是一张表,对应于HDFS上的数据仓库目录下是一个文件夹,数据仓库目录路径由Hive-site.xml中的Hive.metastore.warehouse.dir参数指定

内部表:

内部表与关系型数据库中的Table在概念上类似,每一个Table在Hive中都有一个相应的目录存储数据,所有的table(除了external table)数据都保存在这个目录中。删除表时,元数据与数据都会被删除。

外部表:

外部表指向已经存在HDFS中得数据,可以创建partition,他和内部表在元数据的组织上式相同的,而实际数据的存储有较大差异。

内部表的创建过程和数据加载过程这两个过可以分别独立完成,也可以在同一个语句总完成。在加载数据的过程中,实际数据被移动到数据仓库目录中(HDFS中指定的文件夹),之后对数据访问将会直接在数据仓库目录中完成,删除表时,表中的数据和元数据将会被同时删除。

而外部表只用一个过程,加载数据和创建表同时完成(create external table…location),实际数据存储在localtion后面指定的额HDFS路径中,并不会移动到数据仓库目录中。当删除一个外部表时,仅删除该链接

内部表和外部表的选择:

如果所有处理都由Hive来完成,则使用内部表,如果要用Hive和外部其他工具处理同一组数据集,则使用外部表。

分区:

分区是针对列的:

partition对应于关系型数据库中的partition列的密集索引,但Hive中的partition的组织方式和数据库中的很不相同,在Hive中,表中的一个partition对应表下的一个目录,所有partition的数据对应于表下的一个目录

/table_localtion/filed1=xxx/filed2=xxx
分桶:

在分区数量过于庞大时可能导致文件系统崩溃。

Buckets是将表的列通过Hash算法进一步分解成不同文件存储,它对指定列计算hash,根据hash值切分数据,目的是为了并行,每一个Bucket对应一个文件,分区是粗粒度的划分,桶是细粒度的划分,这样做是为了可以让查询发生在小范围的数据上一提高效率。适合进行表连接查询、适合用于采样分析。

在数据量足够大的情况下,分桶比分区,更高的查询效率。

Hive视图

与传统数据库的视图类似,视图是只读的,创建后对原表的修改不改变视图,但是删除了基本表视图就会出现问题。

创建视图:

create view view_name as (select * from table_name);

查看视图

select * from view_name;

www.htsjk.Com true http://www.htsjk.com/hive/37851.html NewsArticle Hive入门, 一、Hive简介 Hive是什么 Hive是构建在hadoop之上的数据仓库平台 Hive是一个sql解析引擎,他将sql语句转译车行mapreduce作业并在hadoop上执行 Hive表示hdfs的一个文件目录,一个表对应...
相关文章
    暂无相关文章
评论暂时关闭