一、概述
Surus是NetFlix开源的UDFs,是基于pig和hive的数据分析工具。
解决问题
Surus中的功能能够解决多种多样的问题,例如分数预测模型、异常检测与模式匹配等等,Surus还可以作为提高大数据分析能力的辅助工具。
二、系统架构
目前开源的UDF功能主要包括两个,包括ScorePMML和Robust Anomaly Detection (RAD)。
ScorePMML
ScorePMML是一个高效的评分预测模型,此功能利用预测模型标记语言基于pig实现的。
Robust AnomalyDetection (RAD)
RAD是基于鲁棒性的核主成分分析方法(Robust PCA)实现的。
三、功能详解
理论+代码
1、ScorePMML
预测模型的应用随处可见,然而这些应用都不相同,唯独相同的是模型的创建和部署是相同的。其过程大致为工程师提出一个想法并利用小数据集创建一个模型,然后扩展其模型看是否能够适应大数据。
PMML是一个开源的预测模型标记语言,ScorePMML中利用PMML作为一种标准解决自定义评分方法在hadoop环境中的扩散问题。
代码入口/Surus-master/src/main/java/org/surus/pig/ScorePMML.java
PMML提供有效的基础的建模方法,它支持快速循环。在建模过程中每一步使用相同的PMML表示形式,可以通过降低自定义代码的风险和成本而节省时间和金钱。
2、RobustAnomaly Detection (RAD)
RAD主要用于异常检测,尤其是大数据集异常检测。RAD利用Robust Principal Component Analysis (RPCA) 算法检测异常。RPCA通过反复迭代计算SVD(SingularValue Decomposition),并将每次计算的奇异值和误差作为阈值来标识低等级的代表(a low rank representation)、 随机噪声和异常值。此算法已打包成一个pig的UDF,只需在pig代码中增加一些代码就可以调用此方法。
RAD在Netflix有两个重要的应用场景,并取得了重大的成功。
场景一:
Netflix利用RAD在银行级别的支付网络故障中检测异常。
场景二:
网站的注册流程也是一个重要的应用场景。全世界的用户通过上百种浏览器和设备进行注册。当用户注册出现问题时,工程师能够通过识别用户使用不同设备与浏览器的组合及时查明原因帮助用户解决问题。
代码入口/Surus-master/src/main/java/org/surus/pig/RAD.java
代码依赖/Surus-master/src/main/java/org/surus/math/RPCA.java、
/Surus-master/src/main/java/org/surus/math/AugmentedDickeyFuller.java、
/Surus-master/src/main/java/org/surus/math/RidgeRegression.java
代码走读:
RAD类的实例需要传入一个数组,此数组,此数组格式为如下:
private static final String[] argsDaily9 = newString[]{"metric","9","7","False"};
此数组表示待检测数据的矩阵表示格式,其中metric赋值给RAD.colName,9赋值给RAD.nCols,表示矩阵的列数,7赋值给RAD.nRows,表示矩阵的行数,False赋值给RAD.isForceDiff,此属性决定待检测的数据是否使用迪基-福勒检验(Dickey-Fuller test),当传入值为true或者null时表示使用迪基-福勒检验,false为不使用迪基-福勒检验。
将待检测的数据集使用Tuple.append()方法添加到Tuple对象中,然后将Tuple利用DataBag.add(Tuple)方法添加到DataBag中,最后利用Tuple.append(DataBag)方法将待检测的数据集转换为RAD所需的类型数据。使用RAD.exec(Tupleinput)方法对数据进行检测。需要注意的是在对数据进行检测时要先对数据的输出格式进行格式化,使用方法RAD.outputSchema()。
在RAD.exec()方法首先是一些验证,包括输入数据格式的标识符是否为空和对输入数据的类型进行判断,检测是否支持该类型数据的检测。代码为:
得到输入数据,输入数据的数据类型为DataBag,代码为DataBaginputBag = (DataBag) input.get(0);将inputBag中的数据迭代的读入内存,存放在List中,并在此检验实例化RAD时所用的数组和所输入的待检测数据的格式是否匹配,代码为:
将输入的数据转化为一维数组,代码为:
判断是否使用迪基-福勒检验,代码为:
RAD主要是利用了RPCA算法,RPCA是通过矩阵计算来实现的,所以要把一维数组转化为二维数组,代码为:
然后利用此二维数组实例化RPCA算法,代码为
RPCA rSVD = newRPCA(input2DArray, this.lpenalty, this.spenalty);
得到RPCA相关的矩阵,包括E、L、S矩阵,代码为:
最后是搭建观察值,代码为:
四、使用帮助
1、 下载源码,地址https://github.com/Netflix/Surus
2、 进入Surus的主目录进行编译,执行命令mvn clean package (系统要提前安装maven)
命令执行成功之后会在Surus根目录中出现一个target文件夹,
进入target文件夹中会有一个surus-xxx.jar的jar包。
3、将surus-xxx.jar放在pig/hive的lib目录中,并且将surus-xxx.jar导入到运行环境中。例如,在pig脚本中将surus-xxx.jar注册到运行环境中,代码为:REGISTER surus-xxx.jar;