我使用的是带有 MapR 6.0 发行版和 sprak2.2 的 TOS 7.1。
流程: Master job -> BigData Spark job1 [yarn mode: client] Master job -> BigData spark job2 [yarn mode: cluster]
job1 和 job2 都是一样的,只是 yarn 部署模式不同。从 Linux 边缘节点执行时,具有“客户端”模式的作业工作正常,但来自同一父作业的“集群”模式未运行。
以下是集群模式下纱线应用日志的错误: 线程“main”中的异常 java.lang.NoClassDefFoundError:routines/system/api/TalendJob。
从错误和其他在线帮助来看,很明显有些库在构建过程中没有被导出。但是,如果是这样的话,即使是“客户端”模式,作业也不应该运行。
请提出建议。
答案 0 :(得分:0)
Talend 在 ../lib/ 目录中创建一个routines.jar。这个routines.jar为调用spark驱动程序所需的接口提供了强制定义,并且spark驱动上下文无法从调用Talend的Edge节点找到这个jar。
简单的解决方案是将此 jar 作为额外的所需纱线存档 jar,以及其他任何需要的文件。 我已将此 jar 与其他所需的 hive/zookeeper 所需的 jar 捆绑在一起,然后移至 hdfs。并且此 hdfs 路径是作为 Yarn Archive jar 的附加 spark 属性提供的。