У меня кластер Cloudera 5.12 с Kerberos, я могу запустить простой скрипт pyspark с spark2-submit без ошибок, но когда я пытаюсь запустить тот же скрипт с oozie, я получаю:
ОШИБКА запуска, причина: основной класс [org.apache.oozie.action.hadoop.SparkMain], исключение main () вызвала, маркер делегирования может быть выдан только с помощью Kerberos или веб-аутентификации на org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getDelegationToken (FSNamesystem.java:7503) в org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.getDelegationToken (NameNodeRpcServer.java:548) прокси-сервер.getDelegationToken (AuthorizationProviderProxyClientProtocol.java:663) в org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.getDelegationToken (ClientNamenodeProtocolServerSideTranslatorPB.java:981) в org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos $ ClientNamenodeProtocol $ 2.callBlockingМетод (ClientNamenodeProtocolProtos.java) по адресу org.apache.hadoop.ipc.ProtobufRpcEngine $ Server $ ProtoBufRpcInvoker.call (ProtobufRpcEngine.java:617) по адресу org.apache.hadoop.ipc.RPC $ Server.java: RPC $ Server.java: RPC $ Server.java: RPC $ Server.java: RP73в org.apache.hadoop.ipc.Server $ Handler $ 1.run (Server.java:2217) в org.apache.hadoop.ipc.Server $ Handler $ 1.run (Server.java:2213) в java.security.AccessController.doPrivileged (Родной метод) при javax.security.auth.Subject.doAs (Subject.java:422) при org.apache.hadoop.security.UserGroupInformation.doAs (UserGroupInformation.java:1917) при org.apache.hadoop.ipc.Server $ Handler.run (Server.java:2211)
Мой рабочий процесс:
<workflow-app name="${wfAppName}" xmlns="uri:oozie:workflow:0.5">
<credentials>
<credential name="hcatauth" type="hcat">
<property>
<name>hcat.metastore.uri</name>
<value>thrift://XXXXX:9083</value>
</property>
<property>
<name>hcat.metastore.principal</name>
<value>hive/_HOST@XXXXX</value>
</property>
</credential>
</credentials>
<start to="spark-launch"/>
<kill name="Kill">
<message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<action name="spark-launch" cred="hcatauth">
<spark xmlns="uri:oozie:spark-action:0.2">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<master>yarn</master>
<mode>cluster</mode>
<name>TestMe</name>
<jar>mini_job.py</jar>
<spark-opts>
--files hive-site.xml
--queue interne_isoprod
--principal interne_isoprod@XXXX
--keytab interne_isoprod.keytab
</spark-opts>
<file>${projectPath}/scripts/mini_job.py#mini_job.py</file>
<file>${projectPath}/lib/hive-site.xml#hive-site.xml</file>
<file>${projectPath}/lib/interne_isoprod.keytab#interne_isoprod.keytab</file>
</spark>
<ok to="End"/>
<error to="Kill"/>
и pysparkСценарий:
from datetime import datetime
from pyspark.sql import SparkSession
import sys
if __name__ == "__main__":
spark = SparkSession.builder.appName('test_spark2').getOrCreate()
print(spark.version)
spark.stop()
Я пытался с и без спаркопса без удачи