我有一个包含 4 个节点的 Spark 集群,我尝试启动应用程序:
spark-submit --deploy-mode cluster --class "Init"--master Spark://host/home/cassandra/spark2Cassandra- assembly-0.1.jar
- 即使这样也不起作用我添加这个: --jars/home/cassandra/jsr166e-1.1.0.jar
此外,我尝试使用所有依赖项来组装我的应用程序,包括 com/twitter/jsr166e/LongAdder
libraryDependencies += "com.twitter" % "jsr166e" % "1.1.0"
此外,我尝试将此 jar 添加到所有节点的 Spark\jars 目录中 - 这对我不起作用
如何将此 jar 分发到我的集群?
完全错误(同一消息多次):
java.lang.NoClassDefFoundError: com/twitter/jsr166e/LongAdder at org.apache.spark.metrics.OutputMetricsUpdater$TaskMetricsSupport$class.$init$(OutputMetricsUpdater.scala:107) at org.apache.spark.metrics.OutputMetricsUpdater$TaskMetricsUpdater.(OutputMetricsUpdater.scala:153) at org.apache.spark.metrics.OutputMetricsUpdater$.apply(OutputMetricsUpdater.scala:75) at com.datastax.spark.connector.writer.TableWriter.writeInternal(TableWriter.scala:174) at com.datastax.spark.connector.writer.TableWriter.insert(TableWriter.scala:162) at com.datastax.spark.connector.writer.TableWriter.write(TableWriter.scala:149) at com.datastax.spark.connector.RDDFunctions$$anonfun$saveToCassandra$1.apply(RDDFunctions.scala:36) at com.datastax.spark.connector.RDDFunctions$$anonfun$saveToCassandra$1.apply(RDDFunctions.scala:36) at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:87) at org.apache.spark.scheduler.Task.run(Task.scala:108) at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:335) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:748)
已更新
如果我使用本地模式并通过以下方式启动:
spark-shell --jars /data/tmp/spark-cassandra-connector-2.0.5-s_2.11.jar,/data/tmp/jsr166e-1.1.0.jar
它可以工作,但同样不适用于集群模式
最佳答案
如果您没有,请从 Maven 存储库下载 jsr166e.jar
将 jsr166e.jar
文件复制到 SPARK_HOME/jars/
(在所有 Spark 节点上)并重试。这对我有用。
关于scala - java.lang.NoClassDefFoundError : com/twitter/jsr166e/LongAdder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46118225/