单元测试Oozie工作流程

时间:2016-06-02 23:53:07

标签: unit-testing oozie

我使用Oozie作为工具在cloudera平台上安排我的很多应用程序。 (spark,MR,Hive,HBase)。

令我担忧的一件事是Oozie是一个不可测试的框架。

如果我使用oozie编写工作流程。我如何对它进行单元测试?

是否有任何工具/最佳实践可以让我对oozie协调员和工作流程进行自动单元测试?

2 个答案:

答案 0 :(得分:3)

您可以使用MiniOozie进行Oozie工作流程的单元测试。

以下是oozie工作流程的示例junit测试: https://github.com/apache/oozie/blob/master/minitest/src/test/java/org/apache/oozie/test/WorkflowTest.java

答案 1 :(得分:0)

使用<countries> <country countrycode="AD" name="Andorra" /> <country countrycode="AE" name="United Arab Emirates" /> <!-- example output. Use the API for a complete updated list --> </countries> <!-- RUID: [XXXXXXXXXXXXXXXXXXXXXXXXXXX==] --> 构建测试涉及一些问题:

  1. 确保您使用的是包含OOZIE-2273修复程序的Oozie版本(已在Oozie 4.3.0中修复,但已向CDH中的早期Oozie版本移植)

  2. 确保登录用户名不包含MiniOozieTestCase

  3. 这是因为用于从Hadoop配置构建代理用户ACL列表的正则表达式是:

    .

    DefaultImpersonationProvider.java#L78

    如果您的登录用户名包含hadoop\.proxyuser\.[^.]*(\Q.users\E|\Q.groups\E) (例如.),则当测试代码尝试访问HDFS时,您会收到以下错误:

    user.name

    在这种情况下,您可以使用org.apache.hadoop.security.authorize.AuthorizationException): User: user.name is not allowed to impersonate test 环境变量或通过设置系统属性来覆盖登录用户名:

    HADOOP_USER_NAME

    您还需要在类路径中包含public class IntTestCustomerModelLoaderJobWorkflow extends MiniOozieTestCase { @Override public void setUp() throws Exception { System.setProperty("HADOOP_USER_NAME", "test"); } ... } ,以允许登录用户作为测试用户进行代理。例如:

    hdfs-site.xml

    在上面的示例中,登录用户名为<?xml version="1.0"?> <configuration> <property> <name>hadoop.proxyuser.test.groups</name> <value>*</value> <description>Allow the superuser test to impersonate any members of any group</description> </property> <property> <name>hadoop.proxyuser.test.hosts</name> <value>*</value> <description>Allow the superuser test to connect from any host to impersonate a user</description> </property> </configuration>(与test user used by MiniOozieTestCase相同)。如果您愿意,可以使用其他用户名。