前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面试|大数据中无处不在的ServiceLoader

面试|大数据中无处不在的ServiceLoader

作者头像
Spark学习技巧
发布2018-12-28 10:57:54
8530
发布2018-12-28 10:57:54
举报
文章被收录于专栏:Spark学习技巧

ServiceLoader是SPI的是一种实现,所谓SPI,即Service Provider Interface,用于一些服务提供给第三方实现或者扩展,可以增强框架的扩展或者替换一些组件。

要配置在相关项目的固定目录下:

resources/META-INF/services/接口全称。

这个在大数据的应用中颇为广泛,比如Spark2.3.1 的集群管理器插入:

代码语言:javascript
复制
private def getClusterManager(url: String): Option[ExternalClusterManager] = {
    val loader = Utils.getContextOrSparkClassLoader
    val serviceLoaders =
      ServiceLoader.load(classOf[ExternalClusterManager], loader).asScala.filter(_.canCreate(url))
    if (serviceLoaders.size > 1) {
      throw new SparkException(
        s"Multiple external cluster managers registered for the url $url: $serviceLoaders")
    }
    serviceLoaders.headOption
  }

配置是在

spark sql数据源的接入,新增数据源插入的时候可以采用这种方式,要实现的接口是DataSourceRegister。

简单测试

首先实现一个接口

代码语言:javascript
复制
package bigdata.spark.services;

public interface DoSomething {
    public String shortName(); //可以制定实现类名加载
    public void doSomeThing();
}

然后将接口配置在resources/META-INF/services/

实现该接口

代码语言:javascript
复制
package bigdata.spark.services;

public class SayHello implements DoSomething {
    @Override
    public String shortName() {
        return "SayHello";
    }

    @Override
    public void doSomeThing() {
        System.out.println("hello !!!");
    }
}

测试

代码语言:javascript
复制
package bigdata.spark.services;

import java.util.ServiceLoader;

public class test {
    static ServiceLoader<DoSomething> loader = ServiceLoader.load(DoSomething.class);
    public static void main(String[] args){
        for(DoSomething sayhello : loader){
         //要加载的类名称我们可以制定
            if(sayhello.shortName().equalsIgnoreCase("SayHello")){
                sayhello.doSomeThing();
            }
        }
    }
}

输出结果如下:

这个主要是为讲自定义数据源作准备。

欢迎订阅浪尖知识星球,跟450人一起学习。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-12-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 浪尖聊大数据 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档