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负责“分”,即把复杂的任务分解为若干 ...
随机推荐
- SpringMVC之数据传递二
上一篇学习了从url或view中传数据到Controller中,今天学习下数据从Controller传到view中,主要有4种. 一.ModelAndView 处理方法返回值类型为 ModelAndV ...
- 1.UTF8字符集csv文件在oracle下乱码问题处理
1.问题描述 在excel中生成了一个UTF-8编码格式的csv文件准备导入数据库,在notpad++下打开显示正常,编码集为UTF-8,通过pl/sql dev导入oracle是出现乱码,此时初步推 ...
- IT智力面试题
◆ 有一个长方形蛋糕,切掉了长方形的一块(大小和位置随意),你怎样才能直直的一刀下去,将剩下的蛋糕切成大小相等的两块? 答案:将完整的蛋糕的中心与被切掉的那块蛋糕的中心连成一条线.这个方法也适用于立方 ...
- windows汇编环境配置
原文地址 软件下载 需要的软件已经打包,包括dosbox和MASM.如果没有这两个软件可以在下面的地址下载. http://hjwblog.com/game/汇编环境.zip 点击下载 安装dosbo ...
- phpcmsV9.5.8 后台拿shell
参考url:https://xianzhi.aliyun.com/forum/read/1507.html poc:index.php??m=content&c=content&a=p ...
- PHPCMS V9 任意文件下载(Windows)
先来看看PHPCMS V9.6.0的任意下载 还是和上次的注入一样,是个由parse_str() 函数引发的变量覆盖. 位于 /phpv9.6.0/phpcms/modules/content/dow ...
- 用js来实现那些数据结构09(集合01-集合的实现)
说到集合,第一个想到的就是中学学到的那个数学概念:集合.在我们开始集合相关的js实现前,我们有必要来了解一下什么是集合以及集合的数学概念. 好吧,我们一起来复习一下早就被我们遗忘的集合. 集合是由一组 ...
- 【NOIP模拟赛】总结
题目描述 输入 第一行是5个正整数,n,m,k,S,T,分别代表无向图点数,边数,蝙蝠的数量,二小姐所在起点的编号,目标点的编号. 第二行是k个正整数,分别代表大小姐每个蝙蝠所在的起点的编号.接下来有 ...
- NOIP2014-5-10模拟赛
Problem 1 机器人(robot.cpp/c/pas) [题目描述] 早苗入手了最新的Gundam模型.最新款自然有着与以往不同的功能,那就是它能够自动行走,厉害吧. 早苗的新模型可以按照输入的 ...
- python 程序中调用go
虽然python优点很多,但是有一个致命的缺点就是运行速度太慢,那么python程序需要一些计算量比较大的模块时一般会调用c或者c++的代码来重写,但是c/c++编写代码代价太高,耗费太多的人力.那么 ...