Spark 2 - 實現一個定時器

使用笨辦法,實現了一個定時器。
不管怎麼樣,效果很好,可以執行定時任務了。

@Singleton
public class BuildingImportTimer {
    private static Logger logger = LoggerFactory.getLogger(BuildingImportTimer.class);

    @Inject
    private BuildingImportHisService service;

    public static void main(String[] args) throws Exception {
        Injector injector = Guice.createInjector();
        BuildingImportTimer importTimer = injector.getInstance(BuildingImportTimer.class);

        SparkConf conf = getConf(NEW_BUILDING_STREAM);

        JavaStreamingContext context = new JavaStreamingContext(conf, Durations.minutes(10));

        JavaReceiverInputDStream<Integer> stream = context.receiverStream(
                new BuildingImportReceiver(StorageLevel.MEMORY_ONLY()));

        stream.foreachRDD(n -> logger.info("loop for: {}.", n));

        context.start();
        context.awaitTermination();


    }
}

重點是JavaStreamingContext,以及使用receiverStream方法。
自定義的Receiver非常簡單

public class BuildingImportReceiver extends Receiver<Integer> {
    private final AtomicInteger num = new AtomicInteger();

    @Override
    public void onStart() {
        store(num.decrementAndGet());
    }

    @Override
    public void onStop() {

    }

    public BuildingImportReceiver(StorageLevel storageLevel) {
        super(storageLevel);
    }
}

想了很多方法,感覺這個最靠譜。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章