在minikube/kubernetes上运行Spark无法实例化外部调度器的原因是因为Kubernetes默认使用了自己的调度器,而Spark需要使用外部调度器来管理任务的调度和资源分配。由于Kubernetes的调度器与Spark的外部调度器不兼容,导致无法实例化外部调度器。
为了解决这个问题,可以采取以下几种方法:
- 使用Kubernetes原生的调度器:可以通过修改Spark的配置文件,将调度器设置为Kubernetes原生的调度器。这样Spark将使用Kubernetes的调度器进行任务的调度和资源分配。但是这种方式可能会导致Spark的调度性能下降,因为Kubernetes的调度器并不是专门为Spark设计的。
- 使用自定义的调度器:可以开发一个自定义的调度器,该调度器与Kubernetes兼容,并且能够满足Spark的需求。然后将该调度器部署到Kubernetes集群中,并将Spark的配置文件中的调度器设置为自定义调度器的地址。这样Spark将使用自定义调度器进行任务的调度和资源分配。
- 使用其他云原生调度器:除了Kubernetes,还有其他一些云原生调度器可以与Spark兼容,例如Mesos、Nomad等。可以将Spark部署到这些调度器上,并将Spark的配置文件中的调度器设置为相应调度器的地址。
总结起来,无法在minikube/kubernetes上实例化外部调度器是因为Kubernetes默认调度器与Spark的外部调度器不兼容。解决方法包括使用Kubernetes原生调度器、开发自定义调度器或使用其他云原生调度器。具体选择哪种方法取决于实际需求和环境。