认识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()方法

  2. UDAF(User-defined aggregate function):用户自定义聚合函数、接受多行输入并产生单行输出,如max、min都输入这一类。

    编写UDAF稍微复杂一点,需要继承UDAF类,内部类实现UDAFEvaluator接口,实现 init()方法 完成参数的初始化,实现iterate()方法 接受输入,并进行内部轮转,实现terminatePartial()方法 返回子区域聚合结果,实现nerge()方法完成子区域结果的合并,实现terminate()返回最终聚合结果。

  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两个字段



    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做一些简单的介绍。

hadoop入门级总结三:hive的更多相关文章

  1. hadoop入门级总结二:Map/Reduce

    在上一篇博客:hadoop入门级总结一:HDFS中,简单的介绍了hadoop分布式文件系统HDFS的整体框架及文件写入读出机制.接下来,简要的总结一下hadoop的另外一大关键技术之一分布式计算框架: ...

  2. 三 Hive 数据处理 自定义函数UDF和Transform

    三  Hive 自定义函数UDF和Transform 开篇提示: 快速链接beeline的方式: ./beeline -u jdbc:hive2://hadoop1:10000 -n hadoop 1 ...

  3. mac安装Hadoop,mysql,hive,sqoop教程

    在安装Hadoop,mysql,hive之前,首先要保证电脑上安装了jdk 一.配置jdk 1. 下载jdk http://www.oracle.com/technetwork/java/javase ...

  4. 基于hadoop分析,了解hive的使用

    一.Hadoop理论 Hadoop是一个专为离线和大规模数据分析而设计的,并不适合那种对几个记录随机读写的在线事务处理模式. Hadoop=HDFS(文件系统,数据存储技术相关)+ Mapreduce ...

  5. Hadoop 系列(三)Java API

    Hadoop 系列(三)Java API <dependency> <groupId>org.apache.hadoop</groupId> <artifac ...

  6. Hadoop生态圈-Azkaban实现hive脚本执行

    Hadoop生态圈-Azkaban实现hive脚本执行 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客中在HDFS分布式系统取的数据,而这个数据的是有之前我通过MapRed ...

  7. ubuntu18.04 安装hadoop 2.7.3+hive 2.3.4

    1. 安装hadoop 详细请参见本人的另外一片博文<Hadoop 2.7.3 分布式集群安装> 2. 下载hive 2.3.4 解压文件到/opt/software -bin.tar.g ...

  8. HADOOP docker(四):安装hive

    1.hive简介2.安装hive2.1 环境准备2.1.1 下载安装包2.1.2 设置hive用户的环境变量2.1.3 hive服务端配置文件2.1.4 hive客户端配置文件2.1.4 分发hive ...

  9. hadoop学习第三天-MapReduce介绍&&WordCount示例&&倒排索引示例

    一.MapReduce介绍 (最好以下面的两个示例来理解原理) 1. MapReduce的基本思想 Map-reduce的思想就是“分而治之” Map Mapper负责“分”,即把复杂的任务分解为若干 ...

随机推荐

  1. LinkedHashMap简明

    LinkedHashMap 构造方法摘要 inkedHashMap() 构造一个带默认初始容量 (16) 和加载因子 (0.75) 的空插入顺序LinkedHashMap 实例. LinkedHash ...

  2. angularJS的插件使用

    $uibModal&&$uibModalInstance $uibModal和$uibModalInstance是一款angularJS的弹窗控件,github地址 http://an ...

  3. bootstrap——bootstrap-table(1)

    前言: 特地纪念一下,自己参加这份工作刚好满一年.依旧乐在其中 言归正传:之前小接触过bootstrap,只是之后用得少了就生疏了,恰好现在的工作使用到了它,就再拿出来认真研究一下. 过程: 一直以来 ...

  4. 云如何让App开发更简单?

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 互联网"下半场",移动App开发对于质量.速度的要求更加苛刻.4月初,腾讯云正式上线移动开发平台MobileLine,借 ...

  5. MySQL实现全关联 full outer join

    SQL LEFT JOIN 关键字 LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行. LEFT JOIN 关键 ...

  6. [JetBrains注册] 利用教育邮箱注册pycharm,idea等产品教程。

    我们在使用JetBrains的一些产品时,大多使用网上的一些key去注册或者pojie的,但是由于提供这些key的服务器并不能保证稳定可用,所以可能一段时间我们使用的ide又需要重新pojie. 这里 ...

  7. json pickle ;shelve

    import json dic={'name':'alex'} """ f=open("new_hello","w") # dic ...

  8. [HNOI 2011]数矩形

    Description 题库链接 给出平面上 \(n\) 个点,选出四个点作为矩形顶点.求出矩形最大面积. \(1\leq n\leq 1500\) Solution 转载自 Z-Y-Y-S dark ...

  9. BZOJ4711 小奇挖矿

    Description [题目背景] 小奇在喵星系使用了无限非概率驱动的采矿机,以至于在所有星球上都采出了一些矿石,现在它准备建一些矿石仓 库并把矿石运到各个仓库里. [问题描述] 喵星系有n个星球, ...

  10. [BZOJ]3532: [Sdoi2014]Lis

    Time Limit: 10 Sec  Memory Limit: 512 MB Description 给定序列A,序列中的每一项Ai有删除代价Bi和附加属性Ci.请删除若干项,使得4的最长上升子序 ...