Korzystanie z tego seminarium utworzyłem przepływ pracy dla skryptu gałęzi, ale daje mi błąd, gdy uruchamiam poniżej polecenia:
oozie job -oozie http://xxx.xx.xx.xx:11000/oozie -config /home/ec2-user/ankit/oozie_job1/job.properties -submit
Błąd, który otrzymuję to:
Błąd: E0708: E0708: Nieprawidłowe przejście, przejście w węźle [Oozie_test] [Tester]
Mój kod przepływu pracy jest poniżej:
<workflow-app name="Tester" xmlns="uri:oozie:workflow:0.1">
<start to="Oozie_test"/>
<action name="Oozie_test">
<hive xmlns="uri:oozie:hive-action:0.2">
<job-tracker>xxx.xx.xx.xx:8021</job-tracker>
<name-node>xxx.xx.11.xx:8020</name-node>
<configuration>
<property>
<name>oozie.hive.defaults</name>
<value>/home/ec2-user/ankit/oozie_job1/hive-default.xml</value>
</property>
</configuration>
<script>hive_job1.hql</script>
</hive>
<ok to="Tester"/>
<error to="fail"/>
</action>
<end name="end"/>
</workflow-app>
Ponieważ jest to mój pierwszy przepływ pracy, nie jestem w stanie dotrzeć tam, gdzie dokładnie idę źle lub co przeoczyłem.
Próbowałem szukać rozwiązania w Internecie, ale nie mogłem znaleźć szczęścia.
Proszę dać mi znać, jak rozwiązać ten błąd i jakie inne informacje są wymagane z mojej strony.
Odpowiedzi:
5 dla odpowiedzi № 1W przypadku pomyślnego wykonania akcji (ula) przejście (ok
) jest do węzła Tester
, ale nie masz żadnego węzła o nazwie Tester
. To jest błąd.
Najlepiej, jeśli masz tylko jedną akcję w przepływie pracy, a następnie udane wykonanie akcji powinno przejść do end
, które już zdefiniowałeś w swoim obiegu pracy, ale go nie wykorzystałeś. W przypadku awarii chcesz przejść do kill
węzeł, którego brakuje w przepływie pracy. Musisz dodać kill
Węzeł i tranzyt do niego działają, w przypadku awarii / błędu.
@charantej zapewnił prawidłowy przepływ pracy.
1 dla odpowiedzi nr 2
jako @ YoungHobbit wyjaśnił
W przypadku pomyślnego wykonania akcji (ula) przejście (ok) do węzła Tester, ale nie masz żadnego węzła o nazwie Tester. To jest błąd.
Idealnie, jeśli masz tylko jedną akcję w swojejprzepływ pracy, a następnie pomyślne wykonanie akcji powinno kończyć się, co już zdefiniowałeś w swoim przepływie pracy, ale go nie użyłeś. W przypadku niepowodzenia chcesz przejść do zabicia węzła, którego brakuje w twoim obiegu pracy. Musisz dodać węzeł zabijania i przetransportować do niego akcję, na wypadek awarii / błędu. Spróbuj tego:
<workflow-app name="Tester" xmlns="uri:oozie:workflow:0.1">
<start to="Oozie_test"/>
<action name="Oozie_test">
<hive xmlns="uri:oozie:hive-action:0.2">
<job-tracker>xxx.xx.xx.xx:8021</job-tracker>
<name-node>xxx.xx.11.xx:8020</name-node>
<configuration>
<property>
<name>oozie.hive.defaults</name>
<value>/home/ec2-user/ankit/oozie_job1/hive-default.xml</value>
</property>
</configuration>
<script>hive_job1.hql</script>
</hive>
<ok to="end"/>
<error to="kill"/>
</action>
<kill name="kill">
<message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name="end" />
</workflow-app>
1 dla odpowiedzi nr 3
W ok
przejście, odwołujesz się do węzła "Tester", który nie istnieje w obiegu pracy.
<ok to="Tester"/>
Gdy dowolne działanie zakończy się pomyślnie, szuka węzła podanego w dobrze przejście.
Zdefiniuj nową akcję o nazwie "Próbnik" lub daj <ok to="end"/>
to trafi do end
węzeł.
0 dla odpowiedzi nr 4
Potwierdź, czy skopiowałeś plik workflow.xml do pliku hdfs. Nie musisz kopiować pliku job.properties do pliku hdfs, ale musisz skopiować wszystkie pozostałe pliki i biblioteki do pliku hdfs