Hive UDF作业
说到这次作业,看似简单的几个步骤,对于我这样的菜鸟来说可真是一波三折啊。下面来说说这次的步骤和我遇到的问题。
首先准备工作,搭建好hive环境,保证hadoop集群是启动的。这个就不多说了。
第一步:将数据导入Hive中
在hive中,创建 stock 表结构。
hive> create table if not exists stock (tradedate STRING,tradetime STRING,stockid STRING,buyprice DOUBLE,buysize INT,sellprice DOUBLE,sellsize INT)
>row format delimited fields terminated by ',' STORED AS TEXTFILE;
这一步没什么可说的,顺利进行
将HDFS中的股票历史数据导入hive中。
hive> LOAD DATA INPATH '/home/hadoop/stock.csv' INTO TABLE stock;
结果这里就报错了,错误提示是在hdfs上没有相匹配的目录文件,大概就是这个意思。
我当时就是想不明白是怎么回事,后来找了班上的一些同学的帮助。我们特训班7班的“西安—假装”同学那里我知道了错误的原因在哪里了。
原因:'/home/hadoop/stock.csv 的目录文件是在本地的linux上的,而hdfs是在
我自己开始就把概念搞混了,错误的以为hdfs是linux里的某个目录。正确操作应该是
hive> LOAD DATA LOCAL INPATH '/home/hadoop/stock.csv' INTO TABLE stock;
加上LOCAL表示本地的意思。
创建分区表 stock_partition,用日期做为分区表的分区ID。
hive> create table if not exists stock_partition (tradetime STRING,stockid STRING,buyprice DOUBLE,buysize INT,sellprice DOUBLE,sellsize INT)
>partitioned by (tradedate STRING) row format delimited fields terminated by ',';
如果设置动态分区首先执行。
hive>set hive.exec.dynamic.partition.mode=nonstrict;
创建动态分区,将stock表中的数据导入stock_partition表。
hive> insert overwrite table stock_partition partition(tradedate)
> select tradetime,stockid,buyprice,buysize,sellprice,sellsize, tradedate from stock distribute by tradedate;
这几步也ok没什么大问题,就是将stock表中的数据导入stock_partition表,这个过程需要一些时间,耐心等待。
接下来遇到的问题就麻烦了,我也是请教了别人才知道原因出在哪里。
Hive 自定义Max统计最大值,和Hive 自定义Min统计最小值。这两个函数的时候我居然还犯了这样的低级错误自己开始还不知道。
我就直接打包到linux下去使用,毫无疑问肯定报错。其实就是缺少了hive的架包没因进去。
经过到网上下载hive架包,把架包添加到工程,错误消失了,再次打包,结果还是报错了
首先这步将自定义的Max和Min分别打包成maxUDF.jar和minUDF.jar, 然后上传至/home/hadoop/hive目录下,添加Hive自定义的UDF函数
没问题。
接下来创建Hive自定义的临时方法maxprice和minprice
问题来了。
这有说什么原因呢???真的要问下自己了,基础太不扎实了,简直漏洞百出,实在没有头绪的时候,我又和我们班的同学还老师请教了下,开始我是核对jdk版本是否一致,核对结果是一样的,排除了jdk的问题,经过老师和同学的指导,分析:
- 我敲的代码有问题,经过检查,代码没问题,该引入的包都引入了。
- Hive环境没搭建好,这个原因也排除。
- 那就只有最后一个原因了,打包的过程出了问题。
确实是,打包的时候应把这两个文件一起打包,我开始是只打包了代码。
OK这样打包后顺利通过,没问题了
统计204001股票,每日的最高价格和最低价格
真是活见鬼了,没有哪步是顺利过的。又出错了
好吧,分析错误吧,其实这个是图文教程里出错了,正确的应该是
select stockid,tradedate, max(maxprice(buyprice,sellprice)),min(minprice(buyprice,sellprice)) from stock_partition where stockid='204001' group by stockid,tradedate;
经过实现,结果出来了
统计204001这只股票,每天每分钟的均价
OK结果也出来了,到这里本次作业完成!
Hive UDF作业的更多相关文章
- Hive UDF初探
1. 引言 在前一篇中,解决了Hive表中复杂数据结构平铺化以导入Kylin的问题,但是平铺之后计算广告日志的曝光PV是翻倍的,因为一个用户对应于多个标签.所以,为了计算曝光PV,我们得另外创建视图. ...
- Hive UDF 实验1
项目中使用的hive版本低于0.11,无法使用hive在0.11中新加的开窗分析函数. 在项目中需要使用到row_number()函数的地方,有人写了udf来实现这个功能. new java proj ...
- hive UDF添加方式
hive UDF添加的方式 1.添加临时函数,只能在此会话中生效,退出hive自动失效 hive> add jar /home/jtdata/hiveUDF/out0.jar; Added [/ ...
- DeveloperGuide Hive UDF
Creating Custom UDFs First, you need to create a new class that extends UDF, with one or more method ...
- Hive 执行作业时报错 [ Diagnostics: File file:/ *** reduce.xml does not exist FileNotFoundException: File file:/ ]
2019-03-10 本篇文章旨在阐述本人在某一特定情况下遇到 Hive 执行 MapReduce 作业的问题的探索过程与解决方案.不对文章的完全.绝对正确性负责. 解决方案 Hive 的配置文件 ...
- [转]HIVE UDF/UDAF/UDTF的Map Reduce代码框架模板
FROM : http://hugh-wangp.iteye.com/blog/1472371 自己写代码时候的利用到的模板 UDF步骤: 1.必须继承org.apache.hadoop.hive ...
- 2、Hive UDF编程实例
Hive的UDF包括3种:UDF(User-Defined Function).UDAF(User-Defined Aggregate Function)和UDTF(User-Defined Tabl ...
- Hive UDF 用户自定义函数 编程及使用
首先创建工程编写UDF 代码,示例如下: 1. 新建Maven项目 udf 本机Hadoop版本为2.7.7, Hive版本为1.2.2,所以选择对应版本的jar ,其它版本也不影响编译. 2. po ...
- Hive UDF开发-简介
Hive进行UDF开发十分简单,此处所说UDF为Temporary的function,所以需要hive版本在0.4.0以上才可以. Hive的UDF开发只需要重构UDF类的evaluate函数即可.例 ...
随机推荐
- nonzero
在python的numpy里面这个函数的意义是返回参数数组中不为0的元素的索引(indics). from numpy import array from numpy import nonzero x ...
- Mysql索引分类和索引优化
一. MySQL: 索引以B树格式保存 Memory存储引擎可以选择Hash或BTree索引,Hash索引只能用于=或<=>的等式比较. 1.普通索引:create index on Ta ...
- 【python】多线程详解
一.进程与线程关系 一个进程至少包含一个线程. 二.线程基础 1.线程的状态 线程有5种状态,状态转换的过程如下图所示: 2.线程同步(锁) 多线程的优势在于可以同时运行多个任务(至少感觉起来是这样) ...
- verilog编码规范
verilog编码规范 1.Register with Rising-Edge Coding Example (Verilog) Flip-Flops and Registers Control Si ...
- 转---CentOS安装Oracle数据库详细介绍及常见问题汇总
一.安装前准备 1.软件硬件要求 操作系统:CentOS 6.4(32bit)Oracle数据库版本:Oracle 10g(10201_database_linux32.zip)最小内存:1G(检查命 ...
- 【转】使用kettle工具遇到的问题汇总及解决方案
使用kettle工具遇到的问题汇总及解决方案 转载文章版权声明:本文转载,原作者薄海 ,原文网址链接 http://blog.csdn.net/bohai0409/article/details/ ...
- 写了一个hiero中添加自定义Token的脚本
Hiero自带Token往往不够用,shotname中自带版本号的情况下要升级版本会很麻烦,比如Shot_0001_v001这样一个序列名,要升级为Shot_0001_v002就必须把_v001之前的 ...
- SynergyS7G2RTC时钟模块的使用
RTC功能描述 RTC时钟模块是Synergy芯片的一个时间外设,主要用于日期时间的存储和控制,有别于一般MCU中的Timer,RTC时钟有两种计时模式,日期模式和二进制计时模式,其中日期模式的时间可 ...
- Django与Vue交互,实现注册的图片验证码没有加载的原因
注册功能之图片验证码: 1.实现过程: 传递uuid给后端,再发送图片验证码的请求给后端,后端存储uuid并生成图片验证码保存到redis,然后将图片验证码返回给前端. 当用户输入图片验证码的时候,前 ...
- TCP/IP学习20180626-数据链路层
数据链路层有三个目的: 为IP模块发送和 接收IP数据报. 为ARP模块发送ARP请求和接收ARP应答. 为RARP发送RARP请 求和接收RARP应答 ip大家都听说过. ARP叫做地址解析协议,是 ...