问题描述:通过oozie 提交任务,一直报权限连接异常。
我配置了两台oozie server做分布式的oozie文件提交。但是当我提交任务的时候。当一台server 挂掉时出现了下面的错误。
Exception while executing check(). Error Code [JA002], Message[JA002: Unauthorized connection for super-user: oozie from IP 192.168.2.104]
org.apache.oozie.action.ActionExecutorException: JA002: Unauthorized connection for super-user: oozie from IP 192.168.2.104
出现.ActionExecutorException,出现这个问题首先想到的是要执行的任务,的那台机器报权限问题。
首先分析一下oozie执行的基本流程:
以提交一个hive的任务为例:
(1)Oozie Client提交了一个workflow给Oozie Server。这个workflow里面要执行具体的Hive作业(Hive Action)
对于oozie server的理解:
具体的作业执行上下文不是在Oozie Server process中。也就是说:Oozie Server只负责执行workflow,而workflow中的Action,比如MapReduce Action或者Java Action的执行是以集群的方式执行的。Oozie Server只负责查询这些Action的执行状态和结果,从而降低了Oozie Server的负载。
通过将实际作业(MR Action or JAVA Action)的运行交给Hadoop来管理并执行,Oozie Server只负责查询作业的状态...如果用户提交的workflow增多了,只需要简单地增加Oozie Server 即可。
总结:这个oozie server 不是实际执行者,他只是对作业的检查。当提交的workflow增多的时候提高他的数量,对作业状态的检查。
(2)Oozie Server会启动一个MR作业,也就是launcher job,由launcher job来发起具体的Hive作业
我们知道在Hadoop1的时候是使用jobtrack来对作业进行调度。提交多的任务的时候资源的分配就使用到slot这个概念。
launcher job是个MR作业,它需要占用slot,也就是说:每提交一个workflow作业,都会创建一个launcher job并占用一个slot,如果底层Hadoop集群slot个数很少,而Oozie提交的 作业又很多,launcher job把 slot用完了,使得实际执行Action已经没有slot可用了,这就会导致死锁。当然,可以通过配置Oozie的相关参数来避免Oozie发起太多的launcher job
但是在Hadoop2之后我们引入了yarn这个概念,不在使用slot,而是出现了container这一概念。他是动态的对资源进行分配。不在因为资源占用很多的slot而。出现很多的资源占用
回到上面那个问题:
了解了整个的oozie的执行原理,我们来分析一下问题所在:
出现了ActionExecutorException,也就是在action阶段,不能正确执行。后面查了一堆资料。显示我们没有将全部权限打开。第二台上面的core-site-xml文件有问题。
通过配置如下的配置文件问题解决:
配置Hadoop的 /core-site.xml文件中的两个配置文件:
<property>
<name>hadoop.proxyuser.oozie.hosts</name>
<value>host1,hosts2</value>
</property>
至此问题解决;
问题总结:在两台server上执行任务的时候,我们挂掉一台想让他在另外一台上执行。检测oozie的分布式。但是在挂掉一台时,他会切换到另外一台上面。
这个时候服务启动比较慢。等过一会之后服务正常执行。