首页 技术 正文
技术 2022年11月14日
0 收藏 622 点赞 4,612 浏览 3037 个字

Hive

背景

  • 引入原因

    • 对存在HDFS上的文件或HBase中的表进行查询时,是要手工写一推MapReduce代码

    • 对于统计任务,只能由懂MapReduce的程序员才能搞定

    • 耗时耗力,更多精力没有有效的释放出来

  • Hive基于一个统一的查询分析层,通过SQL语句的方式对HDFS上的数据进行查询、统计和分析

Hive是什么

  • HIve是一个SQL解析引擎,将SQL语句转译成MR Job,然后在Hadoop平台上运行,达到快速开发的目的

  • Hive中的表是纯逻辑表,只是表的定义等,既表的元数据,本质就是Hadoop的目录/文件,达到了元数据和数据存储分离的目的

  • Hive本身不存储数据,它完全依赖HDFS和MapReduce

  • Hive的内容是读多写少,不支持对数据的改写和删除

  • Hive中没有定义专门的数据格式,由用户指定,需要指定三个属性:

    • 列分割符

      • \n

    • 行分隔符

      • 空格

      • \t

      • \001

    • 读取文件数据的方法

      • TextFile

      • SequenceFile(二进制)

        hadoop提供的一种二进制文件,<Key,Value>形式序列化到文件中,Java Writeable接口进行序列化和反序列化

      • RcFile:是Hive专门推出的,一种面向列的数据格式

为什么选择Hive

  • WordCount

    • MR:一推代码

    • Hive:sql

      select word , count(*) from (select explode(split(sentence. ‘ ‘)) word from article) t group by word

Hive中的SQL与传统SQL区别

HQL SQL
数据存储 HDFS、HBase Local FS
数据格式 用户自定义 系统决定
数据更新 不支持(把之前的数据覆盖) 支持
索引 有(0.8版之后增加)
执行 MapReduce Executor
执行延迟
可扩展性 高(UDF,UDAF,UDTF)
数据规模 大(数据大于TB)
数据检查 读时模式 写时模式

UDF,UDAF,UDTF都是函数

  • UDF:用户自定义普通函数

    • 直接应用于select语句,通常查询的时候,需要对字段做一些格式化处理(大小写转换)

    • 特点:一对一

    -- 添加jar包(Java开发UDF)
    add jar /root/badou/hadoop/hive_test/hiveudf-1.0-SNAPSHOT.jar;
    -- 创建函数
    create temporary function upper_func as 'Upercase';
    -- 使用该函数
    select title , upper_func(title) from test.movie limit 10;
    -- 查询结果
    title   TITLE
    Toy Story (1995)       TOY STORY (1995)
    Jumanji (1995) JUMANJI (1995)
    Grumpier Old Men (1995) GRUMPIER OLD MEN (1995)
    Waiting to Exhale (1995)       WAITING TO EXHALE (1995)
    Father of the Bride Part II (1995)     FATHER OF THE BRIDE PART II (1995)
    Heat (1995)     HEAT (1995)
    Sabrina (1995) SABRINA (1995)
    Tom and Huck (1995)     TOM AND HUCK (1995)
    Sudden Death (1995)     SUDDEN DEATH (1995)
  • UDAF:用户自定义聚合函数

    • 特点:多对一

  • UDTF:用户自定义表生成函数

    • 特点:一对多

读时模式、写时模式

  • 读时模式

    • 只有hive读的时候才会检查、解析字段和schema

    • 优点:load数据时非常快,因为在写的过程中是不需要解析数据

  • 写时模式

    • 优点:读的时候会得到优化

    • 缺点:写的慢,需要建立一些索引、压缩、数据一致性、字段检查等等

Hive体系架构

  1. 用户接口

  2. 语句转换driver

    把用户的cmd进行编译、优化并且生产对应的MR任务进行执行,driver时hive的核心

  3. 数据存储

    实际数据(HDFS)+ 元数据(通常metadata的存储的metastore是一个独立的关系型数据库),默认的metastore是deby:本地的数据库(单用户模式),建议使用mysql:多用户模式(本地+远程)

Hive数据模型

  1. Table:内部表(所有的处理都由Hive完成,创建过程和加载过程,是两个独立过程,但也可以在同一个语句中完成,实际的数据会移动到数据仓库的目录中,如果数据表删除,那么实际数据也会删除)

  2. External Table:外部表(如果数据表删除,那么实际数据也删除了)

  3. Partition:分区

    partition是辅助查询,缩小查询范围,加快数据的检索速度和对数据按照一定的规格和条件进行管理

  4. Bucket:分桶(分库,采样)

    set hive.enforce.bucketing = true; -- 开启分库功能
    -- 插入数据
    from test.rating
    insert overwrite table rating_b
    select userid , movieid , rating ;
    -- 采样数据
    select * from rating_b tablesample(bucket 3 out of 16 on userid) limit 20

    例子:select * from student tablesample(bucket 1 out 2 on id);

    tablesample是抽样语句,语法:TABLESAMPLE(BUCKET x OUT OF y)

    y:必须是table总bucket数的倍数或者因子。hive根据y的大小,决定抽样的比例。例如,table总共分了64份,当y=32时,抽取(64/32)2个bucket的数据,当y=128时,抽取(64/128)1/2个bucket的数据。

    x:表示从哪个bucket开始抽取。例如,table总bucket数为32,tablesample(bucket 3 out of 16),表示总共抽取(32/16)2个bucket的数据,分别为第3个bucket和第(3+16)19个bucket的数据

Hive数据类型

类型 说明
tinyint  
smallint  
int  
bigint  
float  
double  
string  
binary(hive0.8.0以上才可用)  
timestamp(hive0.8.0以上才可用)  
array<data_type>  
map<primitive_type,data_type>  
struct<col_name:data_type[comment col_comment],………….>  
uniontype<data_type,data_type,……….>  

Hive数据管理

  • hive表本质就是hadoop的目录/文件

  • hive默认表存放路径一般是在你工作目录的hive目录里面,按表名做文件夹分开,如果你有分区表的话,分区值是字文件夹,可以直接在其它的M/R job里直接应用这部分数据

item name HDFS
Table mobile_user /lib/mobile_user
Partition action=insight , day=20131023 /libs/mobile_user/action=insight/day=20131023
Bucket clusted by user into 32 buckets /libs/mobile_user/action=insight/day=20131023/part-00000
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,906
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,430
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,247
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,058
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,690
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,727