如何对Hive UDF进行使用线上数据达到回归测试,
转至元转至元数据起始
本文为作者原创,转载请标明出处。原作者:Tony_老七 原文链接:http://blog.csdn.net/tonylee0329/article/details/40153055
本地功能测试
UDF的测试应当尽量使用Junit/TestNG进行测试,Keep the bar green to keep your code clean.
每次开发后为了保持代码的兼容,需要保留original test case,在进入测试阶段后,需要进行以下步骤:
- run original test case,如果通过,说明新的更新没有对历史数据造成bug
- wirte new test case,针对新的测试案例进行测试,多次修改后以同时能保证新老测试案例都通过为验收标准
线上数据验证测试
采取自定义auxpath方法
[dcli@XX bin]$ hive --auxpath xxxx,file:///home/dcli/auxlib/VipshopHiveUDF.jar
红色部分一般是配置在hive-site.xml文件中的,这里采用自定义UDF JAR可以让接下来引用你定义的jar文件
这样就可以拿线上的数据测试刚开发完的UDF,测试分为两块
- 原有function的更新
- 新增function
针对1没有什么问题,2的话按照原有步骤是需要在hiverc中增加function定义的,eg:
CREATE TEMPORARY FUNCTION udf_test as 'com.vipshop.curiosity.vipudf.UDFTest';
这个怎么测试? 不能更改online的hiverc的啊。。。我会告诉你hive 会读取用户目录的hiverc吗?
源码如下:cdh4-0.10.0_4.2.0/cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java
if(System.getProperty("user.home") != null) {
String hivercUser = System.getProperty("user.home") + File.separator +
HIVERCFILE;
if(System.getProperty("user.home") != null) {
String hivercUser = System.getProperty("user.home") + File.separator +
HIVERCFILE;
if(newFile(hivercUser).exists()) {
intrc = processFile(hivercUser);
if(rc != 0) {
System.exit(rc);
}
}
}这样我们就可以实现一个新的UDF方法,并且可以的~/.hiverc文件中申明函数的定义 UDF编写如下:
publicfinal class UDFTest extends UDF {
publicString evaluate(finalText s) {
returns.toString()+"=tony";
}
}
打包测试结果:
hive (default)> select udf_test("hive rc") from default.dual;
OK
_c0
hive rc=tony
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。