Сбой в действии Oozie Spark - PullRequest
0 голосов
/ 17 мая 2018

У меня есть простое приложение spark, которое читает данные csv и затем записывает их в avro. Это приложение работает нормально при отправке в виде командной строки spark-submit, но завершается неудачно с приведенной ниже ошибкой при попытке выполнить действие oozie spark.Сообщение об ошибке:


Failing Oozie Launcher, Main class [org.apache.oozie.action.hadoop.SparkMain], main() threw exception, net.jpountz.lz4.LZ4BlockInputStream.<init>(Ljava/io/InputStream;Z)V
java.lang.NoSuchMethodError: net.jpountz.lz4.LZ4BlockInputStream.<init>(Ljava/io/InputStream;Z)V
    at org.apache.spark.io.LZ4CompressionCodec.compressedInputStream(CompressionCodec.scala:122)
    at org.apache.spark.sql.execution.SparkPlan.org$apache$spark$sql$execution$SparkPlan$$decodeUnsafeRows(SparkPlan.scala:274)
    at org.apache.spark.sql.execution.SparkPlan$$anonfun$executeTake$1.apply(SparkPlan.scala:366)
    at org.apache.spark.sql.execution.SparkPlan$$anonfun$executeTake$1.apply(SparkPlan.scala:366)
    at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:241)
    at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:241)
    at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)
    at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:186)

Детали Oozie:

job.properties 
nameNode=NAMEMODE:8020
jobTracker=JT:8032
queueName=default
oozie.use.system.libpath=true
oozie.wf.application.path=${nameNode}/user/oozie/spark/

workflow.xml

<workflow-app name="sample-wf" xmlns="uri:oozie:workflow:0.1">
    <start to="sparkAction" />
    <action name="sparkAction">
        <spark xmlns="uri:oozie:spark-action:0.1">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <configuration>
            <property>
                        <name>oozie.launcher.mapreduce.map.memory.mb</name>
                        <value>1024</value>
                        </property>
                                <property>
                                    <name>oozie.launcher.mapreduce.map.java.opts</name>
                                    <value>-Xmx777m</value>
                                </property>
                                <property>
                                  <name>oozie.launcher.yarn.app.mapreduce.am.resource.mb</name>
                                         <value>2048</value>
</property>
<property>
    <name>oozie.launcher.mapreduce.map.java.opts</name>
    <value>-Xmx1111m</value>
</property>
            </configuration>
            <master>yarn</master>
            <mode>client</mode>
            <name>tssETL</name>
            <class>com.sc.eni.main.tssStart</class>
            <jar>${nameNode}/user/oozie/spark/tss-assembly-1.0.jar</jar>
            <spark-opts>--driver-memory 512m --executor-memory 512m --num-executors 1 </spark-opts>
            </spark>
        <ok to="end"/>
        <error to="fail"/>
    </action>
        <kill name="fail">
          <message>Workflow failed, error
            message[${wf:errorMessage(wf:lastErrorNode())}] </message>
        </kill>
        <end name="end" />
</workflow-app>

В трекере заданий задание MAP Reduce имеет видприходит как Succeded как вызывающий Spark Action и терпит неудачу там, но в целом Oozie терпит неудачу.

Используется Veriosn

EMR Cluster: emr-5.13.0
Spark : 2.3
Scala 2.11

Я также проверил lib общего ресурса oozie в hdfs: / user / oozie / share/ lib / lib_20180517102659 / spark и содержит lz4-1.3.0.jar с классом net.jpountz.lz4.LZ4BlockInputStream, упомянутым в ошибке.

Любая помощь будет очень признательна, так как я борюсь за довольнодолго на этом.

Большое спасибо

1 Ответ

0 голосов
/ 18 мая 2018

Узи дает

java.lang.NoSuchMethodError

когда одна библиотека доступна несколькими способами, что создает конфликт. Поскольку вы указали

oozie.use.system.libpath = истина

так что ему доступны все общие библиотеки Oozie spark и все jar-файлы, упомянутые в build build.sbt.

Чтобы решить эту проблему, проверьте, какие зависимости, которые вы упомянули в вашем build.sbt, также присутствуют в папке общих библиотек oozie spark, а затем добавьте «% обеспечить» в эти зависимости, которые будут удалять их из jar сборки и, следовательно, не будет конфликт банок.

...