zoukankan      html  css  js  c++  java
  • (四)Hive1.2.2

    1. order by,sort by,distribute by,cluster by的区别?

    2. 聚合函数是否可以写在order by后面,为什么?

    需求催生技术进步

    ================================================================================

    一、课前准备

    二、课堂主题

    三、课堂目标

    1. 掌握hive表的数据压缩和文件存储格式

    2. 掌握hive的JDBC代码操作

    3. 掌握的自定义UDF函数

    4. 掌握hive的SerDe

    5. 掌握hive的优化

    四、知识要点

    1. hive表的数据压缩

    1.1 数据的压缩说明

    压缩模式评价

    可使用以下三种标准对压缩方式进行评价

      1. 压缩比:压缩比越高,压缩后文件越小,所以压缩比越高越好

      2. 压缩时间:越快越好

      3. 已经压缩的格式文件是否可以再分割:可以分割的格式允许单一文件由多个Mapper

      程序处理,可以更好的并行化

    常见压缩格式

    压缩方式压缩比压缩速度解压缩速度是否可分割
    gzip 13.4% 21 MB/s 118 MB/s
    bzip2 13.2% 2.4MB/s 9.5MB/s
    lzo 20.5% 135 MB/s 410 MB/s
    snappy 22.2% 172 MB/s 409 MB/s

    hadoop编码/解码器方式

    压缩格式对应的编码/解码器
    DEFLATE org.apache.hadoop.io.compress.DefaultCodec
    Gzip org.apache.hadoop.io.compress.GzipCodec
    BZip2 org.apache.hadoop.io.compress.BZip2Codec
    LZO com.hadoop.compress.lzo.LzopCodec
    Snappy org.apache.hadoop.io.compress.SnappyCodec

    1.2 数据压缩使用

    • hive表中间数据压缩

    #设置为true为激活中间数据压缩功能,默认是false,没有开启
    set hive.exec.compress.intermediate=true;
    #设置中间数据的压缩算法
    set mapred.map.output.compression.codec= org.apache.hadoop.io.compress.SnappyCodec;

    • hive表最终输出结果压缩

    set hive.exec.compress.output=true;
    set mapred.output.compression.codec=
    org.apache.hadoop.io.compress.SnappyCodec;

    2 hive表的文件存储格式

    2.1 文件存储格式说明

    • Hive支持的存储数的格式主要有:textFilesequencefileorcparquet
    • 其中textFile为默认格式,建表时默认为这个格式,导入数据时会直接把数据文件拷贝到hdfs上不进行处理。sequencefileorcparquet格式的表不能直接从本地文件导入数据,数据要先导入到TextFile格式的表中,然后再从textFile表中用insert导入到sequencefile、orc、parquet表中。
    • textFile sequencefile的存储格式都是基于行存储的;
    • orcparquet 是基于列式存储的。

    2.2 文件存储格式使用对比

    3 hive的函数

    3.1 系统内置函数

    1、查看系统自带函数

      show functions;

    2、显示自带的函数的用法

      desc function 函数名;

    3.2 自定义函数

    • Hive 自带了一些函数,比如:max/min等,但是数量有限,自己可以通过自定义UDF来方便的扩展
    • 当Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数(UDF:user-defined function)

    根据用户自定义函数类别分为以下三种:

    1、UDF(user -defined-function)

      一进一出(这个词怪怪的,很邪恶)

    2、UDAF(user-defined-aggregation-function)

      聚合函数,多进一出

    3、UDTF(user-defined table-generating functions)

      一进多出

    3.3 自定义UDF函数编程步骤

    1、定义一个类继承==org.apache.hadoop.hive.ql.UDF==

    2、需要实现==evaluate==函数;evaluate函数支持重载;

    3、将程序打成jar包上传到linux服务器

    4、在hive的命令行窗口创建函数

      a) 添加 jar包

      ==add jar xxxxx.jar== (linux上jar包的路径)

      b) 创建function

      create [temporary] function [dbname.]function_name AS class_name;

    5、hive命令行中删除函数

      Drop [temporary] function [if exists] [dbname.]function_name;

    6、注意事项

      UDF必须要有返回类型,可以返回null,但是返回类型不能为void;

    3.4 自定义UDF函数案例实战

    此处省略三千字

    4.  hive客户端jdbc操作

    4.1 引人依赖

    4.2 代码开发

    此处省略三千字

    5. hive的SerDe

    5.1 hive的SerDe是什么

    Serde是 ==Serializer/Deserializer==的简写。hive使用Serde进行行对象的序列与反序列化。最后实现把文件内容映射到 hive 表中的字段数据类型。

    为了更好的阐述使用 SerDe 的场景,我们需要了解一下 Hive 是如何读数据的(类似于 HDFS 中数据的读写操作):

    HDFS files –> InputFileFormat –> <key, value> –> Deserializer –> Row object

    Row object –> Serializer –> <key, value> –> OutputFileFormat –> HDFS files

    5.2 hive的SerDe类型

    Hive 中内置==org.apache.hadoop.hive.serde2== 库,内部封装了很多不同的SerDe类型。

    hive创建表时, 通过自定义的SerDe或使用Hive内置的SerDe类型指定数据的序列化和反序列化方式。

    CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
    [(col_name data_type [COMMENT col_comment], ...)] [COMMENT table_comment] [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
    [CLUSTERED BY (col_name, col_name, ...)
    [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
    [ROW FORMAT row_format]
    [STORED AS file_format]
    [LOCATION hdfs_path]

    • 如上创建表语句, 使用==row format 参数说明SerDe的类型。==
    • 你可以创建表时使用用户自定义的Serde或者native Serde如果 ROW FORMAT没有指定或者指定了 ROW FORMAT DELIMITED就会使用native Serde

    这一部分没什么

    ===========一些练习题

    省略,下一阶

  • 相关阅读:
    Three.js入门和搭建HelloWorld
    CentOS中使用Docker来部署Tomcat
    CentOS中使用Docker来部署Nginx
    Windows中通过bat定时执行命令和mysqldump实现数据库备份
    Geoserver在Linux上的安装(图文教程)
    Linux上怎样停止服务(jar包)、查看进程路径、关闭指定端口
    Java中怎样监测局域网内ip是否互通,类似ping
    Android和JS之间互相调用方法并传递参数
    Android中使用WebView加载本地html并支持运行JS代码和支持缩放
    ARC072C
  • 原文地址:https://www.cnblogs.com/hanchaoyue/p/13195535.html
Copyright © 2011-2022 走看看