欢迎投稿

今日深度:

如何对Hive UDF进行使用线上数据达到回归测试,

如何对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,测试分为两块

  1. 原有function的更新
  2. 新增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

这样其实就是嵌入线上环境进行了测试,举的例子可能不是太好,如果是一个UDF的更新的话,对比前后逻辑更改的数据,这样可能好一点,说明下这个意思就行

www.htsjk.Com true http://www.htsjk.com/teradata/33530.html NewsArticle 如何对Hive UDF进行使用线上数据达到回归测试, 转至元转至元数据起始 本文为作者原创,转载请标明出处。原作者:Tony_老七 原文链接: http://blog.csdn.net/tonylee0329/article/details/40153055 本...
相关文章
    暂无相关文章
评论暂时关闭