• hadoop入门级总结三:hive


    认识hive

     Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的SQL查询功能,可以将SQL语句转换为MapReduce任务运行

     Hive是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive定义了简单的类 SQL 查询语言,称为 HQL,它允许熟悉 SQL 的用户查询数据。同时,这个语言也允许熟悉 MapReduce开发者的开发自定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作。

     因此,可以看到,hadoop中诸如hdfs和map/reduce更多是为编程开发人员设计的一套系统,而hive则是提供给数据分析人员的一套工具。

     当然,开发人员也可以利用Hive快速实现数据的查询、聚合等功能,避免自己去实现复杂的map/reduce接口和繁琐易错的作业提交过程。


    hive架构说明

    下图是一个hive的系统架构图:
    这里写图片描述
    可以看到,hive架构可以简单的概括为3个组成部分:

    1. hive客户端程序,用户通过客户端程序提交查询语句给hive服务器。包括3中类型的客户端:thrift客户端用来对任意的开发语言提供任务提交的接口,JDBC客户端用来对java程序提交查询任意,ODBC开放数据库接口等。
    2. hive服务器:hive服务器的核心是hive驱动,hive驱动包括解释器、编译器和优化器,用户通过hive客户端提交HQL或者命令行提交的HQL会经过hive驱动的处理之后形成具体的可执行任务,才会提交至map/reduce运行。
    3. hive的元数据存储、数据存储、分布式计算:这一部分都是hive借助外部的组件完成的,一般而言,hive的元数据存储是借助mysql来完成的(当然可以使用hive内置的deby数据库,使用外部数据库会更稳定一点),hive的业务数据是存储在hdfs上,计算则是借助hadoop的map/reduce。
      因此,hive其实是一个桥梁或者翻译官的角色,来将熟悉sql查询分析的人员和hadoop的海量存储和计算能力衔接起来。

    hive CLI与HQL

     hive CLI及hive命令行,是hive与用户交互过程中非常方便的根据,进入hive安装目录的bin目录运行./hive即可进入hive CLI 交互模式。在这里可以执行一些常见的如数据库创建、建表、计算、查询的一些操作。
    下面罗列一些HQL常用的一些命令:

    1. 建数据库:CREATE DATABASE csdn;
    2. 建表:CREATE TABLE test_t (foo INT, bar STRING);
    3. 创建分区表:CREATE TABLE test_t (foo INT, bar STRING) PARTITIONED BY (ds STRING);
    4. 查看表:SHOW TABLES;
    5. 导入数据:LOAD DATA LOCAL INPATH ‘/u.data’
      OVERWRITE INTO test_t PARTITION (ds=’20160729’);
    6. 查看数据:SELECT * FROM test_t LIMIT 10;
    7. 聚合数据:SELECT COUNT(*) FROM test_t
    8. 删除表:DROP TABLE test_t;
      还有很多其他的HQL命令,可以参考apach hive的官方文档进行学习。

    hive自定义函数

     对于一些复杂的查询逻辑(如字符串处理、复杂计算等),需要我们自己编写hive的处理函数,并在查询中使用。在此,简单的总结一下hive自定义函数的类型、编写、提交等内容
    Hive自定义函数:
    Hive自定义函数包括3中类型UDF、UDAF、UDTF。

    1. UDF(user-defined function),普通的用户自定义函数,接受单行输入并产生单行输出。如字符串的大写转小写就输入这一类型。
      编写UDF需要继承UDF类、并实现evaluate()方法
      UDF
    2. UDAF(User-defined aggregate function):用户自定义聚合函数、接受多行输入并产生单行输出,如max、min都输入这一类。
      编写UDAF稍微复杂一点,需要继承UDAF类,内部类实现UDAFEvaluator接口,实现 init()方法 完成参数的初始化,实现iterate()方法 接受输入,并进行内部轮转,实现terminatePartial()方法 返回子区域聚合结果,实现nerge()方法完成子区域结果的合并,实现terminate()返回最终聚合结果。
      UDAF
    3. UDTF(User-defined table-generating function):用户自定义表生成函数,接受单行输入并产生多行输出。
      继承org.apache.hadoop.hive.ql.udf.generic.GenericUDTF。
      实现initialize, process, close三个方法
      UDTF首先会调用initialize方法,此方法返回UDTF的返回行的信息(返回个数,类型)。初始化完成后,会调用process方法,对传入的参数进行处理,可以通过forword()方法把结果返回。最后close()方法调用,对需要清理的方法进行清理。
      写的一个用来切分”key:value;key:value;”这种字符串,返回结果为key, value两个字段
      UDTF
      Hive用户自定义函数的提交:
      编写好的UDF、UDAF、UDTF编译为jar包之后,需要提交给hive才能使用。提交包括3个过程:

    4. 通过命令行提交jar包: hive –auxpath /path/to/hive-examples.jar

    5. 注册临时函数: CREATE TEMPORARY FUNCTION maximum AS ‘Maximum’
    6. 使用自定义函数:select maximum(score) from score_table group by studentId

     至此,hive的一些主要功能特性、架构设计介绍完了。其它的如HQL的编写,当然还得需要在实践中结合文档逐渐学习,在此不再赘述。
    下一篇,将会对hbase做一些简单的介绍。

  • 相关阅读:
    Java核心技术(初阶)知识点复习——[2]面向对象思想
    Java核心技术(初阶)知识点复习——[1]Java的类结构和main函数
    printStream与printWriter
    java反射的初步探索
    JDKJREJVM的关系
    树链剖分模板
    树状数组模板2
    树状数组模板1
    树状数组+欧拉降幂
    线段树模板二
  • 原文地址:https://www.cnblogs.com/cl1024cl/p/6205025.html
Copyright © 2020-2023  润新知