如何开发Presto Listener

开发

  1. 新建2个类,分别实现EventListenerFactoryEventListener
  2. 自定义一个Plugin,实现com.facebook.presto.spi.Plugin,重写getEventListenerFactories,返回自定义EventListenerFactory的实例
  3. resources目录下新建文件夹META-INF/services,在该目录下新建文件com.facebook.presto.spi.Plugin,并追加自定义Listener的全类名

配置

在presto根目录的etc目录下新建event-listener.properties,并追加

// 必须,和EventListenerFactory.getName()保持一致
event-listener.name=custom-event-listener
// 非必须,key和value会被作为EventListenerFactory.create的入参,方便自己实现一些逻辑,不需要可不写,也可以有多个
custom.key1=value2
custom.key2=value2

部署

$ # 将jar包部署到presto 主节点上,只需要是主节点就行,无需分配至所有节点
$ cd $PRESTO_HOME
$ cd plugin
$ mkdir custom-event-listener
$ mv custom-event-listener-1.0.jar custom-event-listener/
$ # 配置event-listener.properties
$ touch event-listener.properties
$ echo "event-listener.name=custom-event-listener" >> event-listener.properties
$ echo "custom.key=value" >> event-listener.properties
$ # 重启presto主节点
$ bin/launcher restart

代码示例

MEventListener.java

package com.mfw.xxx;

import com.facebook.presto.spi.eventlistener.EventListener;
import com.facebook.presto.spi.eventlistener.QueryCompletedEvent;

public class MEventListener implements EventListener {

    private final String cluster;

    public MEventListener(String cluster) {
        this.cluster = cluster;
    }

    // event中包含的信息很多,比如input、ouput,CPU、memory使用情况等,这里由于演示只做打印
    @Override
    public void queryCompleted(QueryCompletedEvent event) {
        System.out.println("cluster = " + cluster)
    }

}

MEventListenerFactory.java

package com.mfw.xxx;

import com.facebook.presto.spi.eventlistener.EventListener;
import com.facebook.presto.spi.eventlistener.EventListenerFactory;

import java.util.Map;

public class MEventListenerFactory implements EventListenerFactory {

    @Override
    public String getName() {
        return "mfw-event-listener";
    }

    @Override
    public EventListener create(Map<String, String> config) {
        return new MEventListener(config.getOrDefault("mfw.cluster", "UNKNOWN"));
    }

}

MPlugin.java

package com.mfw.xxx;

import com.facebook.presto.spi.Plugin;
import com.facebook.presto.spi.eventlistener.EventListenerFactory;

import java.util.ArrayList;
import java.util.List;

public class MPlugin implements Plugin {

    @Override
    public Iterable<EventListenerFactory> getEventListenerFactories() {
        MEventListenerFactory factory = new MEventListenerFactory();
        List<EventListenerFactory> list = new ArrayList<>();
        list.add(factory);
        return list;
    }

}

com.facebook.presto.spi.Plugin

com.mfw.xxx.MPlugin

event-listener.properties

event-listener.name=mfw-event-listener
mfw.cluster=G1

部署成功后,当有SQL执行完成,就可以在日志文件里看到cluster = G1

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值