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个组成部分:
- hive客户端程序,用户通过客户端程序提交查询语句给hive服务器。包括3中类型的客户端:thrift客户端用来对任意的开发语言提供任务提交的接口,JDBC客户端用来对java程序提交查询任意,ODBC开放数据库接口等。
- hive服务器:hive服务器的核心是hive驱动,hive驱动包括解释器、编译器和优化器,用户通过hive客户端提交HQL或者命令行提交的HQL会经过hive驱动的处理之后形成具体的可执行任务,才会提交至map/reduce运行。
- 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常用的一些命令:
- 建数据库:CREATE DATABASE csdn;
- 建表:CREATE TABLE test_t (foo INT, bar STRING);
- 创建分区表:CREATE TABLE test_t (foo INT, bar STRING) PARTITIONED BY (ds STRING);
- 查看表:SHOW TABLES;
- 导入数据:LOAD DATA LOCAL INPATH ‘/u.data’
OVERWRITE INTO test_t PARTITION (ds=’20160729’); - 查看数据:SELECT * FROM test_t LIMIT 10;
- 聚合数据:SELECT COUNT(*) FROM test_t
- 删除表:DROP TABLE test_t;
还有很多其他的HQL命令,可以参考apach hive的官方文档进行学习。
hive自定义函数
对于一些复杂的查询逻辑(如字符串处理、复杂计算等),需要我们自己编写hive的处理函数,并在查询中使用。在此,简单的总结一下hive自定义函数的类型、编写、提交等内容
Hive自定义函数:
Hive自定义函数包括3中类型UDF、UDAF、UDTF。
- UDF(user-defined function),普通的用户自定义函数,接受单行输入并产生单行输出。如字符串的大写转小写就输入这一类型。
编写UDF需要继承UDF类、并实现evaluate()方法
- UDAF(User-defined aggregate function):用户自定义聚合函数、接受多行输入并产生单行输出,如max、min都输入这一类。
编写UDAF稍微复杂一点,需要继承UDAF类,内部类实现UDAFEvaluator接口,实现 init()方法 完成参数的初始化,实现iterate()方法 接受输入,并进行内部轮转,实现terminatePartial()方法 返回子区域聚合结果,实现nerge()方法完成子区域结果的合并,实现terminate()返回最终聚合结果。
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个过程:通过命令行提交jar包: hive –auxpath /path/to/hive-examples.jar
- 注册临时函数: CREATE TEMPORARY FUNCTION maximum AS ‘Maximum’
- 使用自定义函数:select maximum(score) from score_table group by studentId
至此,hive的一些主要功能特性、架构设计介绍完了。其它的如HQL的编写,当然还得需要在实践中结合文档逐渐学习,在此不再赘述。
下一篇,将会对hbase做一些简单的介绍。
hadoop入门级总结三:hive的更多相关文章
- hadoop入门级总结二:Map/Reduce
在上一篇博客:hadoop入门级总结一:HDFS中,简单的介绍了hadoop分布式文件系统HDFS的整体框架及文件写入读出机制.接下来,简要的总结一下hadoop的另外一大关键技术之一分布式计算框架: ...
- 三 Hive 数据处理 自定义函数UDF和Transform
三 Hive 自定义函数UDF和Transform 开篇提示: 快速链接beeline的方式: ./beeline -u jdbc:hive2://hadoop1:10000 -n hadoop 1 ...
- mac安装Hadoop,mysql,hive,sqoop教程
在安装Hadoop,mysql,hive之前,首先要保证电脑上安装了jdk 一.配置jdk 1. 下载jdk http://www.oracle.com/technetwork/java/javase ...
- 基于hadoop分析,了解hive的使用
一.Hadoop理论 Hadoop是一个专为离线和大规模数据分析而设计的,并不适合那种对几个记录随机读写的在线事务处理模式. Hadoop=HDFS(文件系统,数据存储技术相关)+ Mapreduce ...
- Hadoop 系列(三)Java API
Hadoop 系列(三)Java API <dependency> <groupId>org.apache.hadoop</groupId> <artifac ...
- Hadoop生态圈-Azkaban实现hive脚本执行
Hadoop生态圈-Azkaban实现hive脚本执行 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客中在HDFS分布式系统取的数据,而这个数据的是有之前我通过MapRed ...
- 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 ...
- 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 ...
- hadoop学习第三天-MapReduce介绍&&WordCount示例&&倒排索引示例
一.MapReduce介绍 (最好以下面的两个示例来理解原理) 1. MapReduce的基本思想 Map-reduce的思想就是“分而治之” Map Mapper负责“分”,即把复杂的任务分解为若干 ...
随机推荐
- 一张图片快速明白Python概述
- osx mitmproxy ssl 错误
记录一下,总是在这里折腾. cd ~ cd .mitmproxy cp mitmproxy-ca-cert.pem ~/ 然后到目录下双击mitmproxy-ca-cert.pem ,在钥匙串中的登录 ...
- STM32 - GPIO
买了一个STM32F4的开发板,想把上面的东西重新学一下 快速过: 一.GPIO控制 void GPIO_DeInit(GPIO_TypeDef* GPIOx); //把某一个IO口恢复到默认值 /* ...
- [SHOI2016]黑暗前的幻想乡
Description 四年一度的幻想乡大选开始了,最近幻想乡最大的问题是很多来历不明的妖 怪涌入了幻想乡,扰乱了幻想乡昔日的秩序.但是幻想乡的建制派妖怪(人类) 博丽灵梦和八云紫等人整日高谈所有妖怪 ...
- 搭积木(block)
[问题描述]小 OY 是一个喜欢搭积木的孩子,他有一天决定向小 C 展示他特别的搭积木技巧.现在一条直线上从左到右有 n 个位置,标号 1..n,第 i 个位置坐标为 x_i.每个位置上都预先叠好了一 ...
- poj 2960 S-Nim
S-Nim Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 4113 Accepted: 2158 Description ...
- POJ 3261 可重叠k次最长重复子串
Milk Patterns Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 13127 Accepted: 5842 Ca ...
- SpringBoot学习之自动依赖
在前面使用SSM集成时,我们可以使用注解实现无配置化注入,但是这种依赖被进行“人工干预了的”,换句话就是说我们手动进行装配,那么此时还没有达到SpringBoot这种自动装配的效果,那么究竟Sprin ...
- java实现生产者/消费者的三种方式
package com.wenki.thread; import java.util.LinkedList; import java.util.concurrent.LinkedBlockingQue ...
- Linux文件系统的介绍
1.Linux的文件系统是一个典型的树形结构,只有一个根节点 如下图: 2.在Linux中一切皆文件 Linux 对数据文件(.mp3..bmp),程序文件(.c..h.*.o),设备文件(LCD.触 ...