我使用Oozie作为工具在cloudera平台上安排我的很多应用程序。 (spark,MR,Hive,HBase)。
令我担忧的一件事是Oozie是一个不可测试的框架。
如果我使用oozie编写工作流程。我如何对它进行单元测试?
是否有任何工具/最佳实践可以让我对oozie协调员和工作流程进行自动单元测试?
答案 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==] -->
构建测试涉及一些问题:
确保您使用的是包含OOZIE-2273修复程序的Oozie版本(已在Oozie 4.3.0中修复,但已向CDH中的早期Oozie版本移植)
确保登录用户名不包含MiniOozieTestCase
这是因为用于从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
相同)。如果您愿意,可以使用其他用户名。