package com.cloudera.sa.node360.flume; import com.cloudera.sa.node360.model.EventPojo; import com.cloudera.sa.node360.service.HBaseService; import org.apache.flume.Context; import org.apache.flume.Event; import org.apache.flume.interceptor.Interceptor; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.HConstants; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectInputStream; import java.util.ArrayList; import java.util.List; /** * Created by ted.malaska on 6/9/15. */ public class EventInterceptor implements Interceptor { HBaseService hbaseService; @Override public void initialize() { Configuration config = HBaseConfiguration.create(); config.addResource("/etc/hbase/conf/hbase-site.xml"); //config.set(HConstants.ZOOKEEPER_QUORUM, "fce-4.vpc.cloudera.com,fce-3.vpc.cloudera.com,fce-2.vpc.cloudera.com"); //config.set(HConstants.ZOOKEEPER_CLIENT_PORT, "2181"); try { hbaseService = new HBaseService(config); } catch (IOException e) { e.printStackTrace(); } } @Override public Event intercept(Event event) { return event; } @Override public List<Event> intercept(List<Event> list) { List<EventPojo> eventList = new ArrayList<EventPojo>(); for (Event event: list) { ByteArrayInputStream bos = new ByteArrayInputStream(event.getBody()); ObjectInput input = null; try { input = new ObjectInputStream(bos); Object o = input.readObject(); if (o instanceof EventPojo) { EventPojo eventPojo = (EventPojo) o; eventList.add(eventPojo); } } catch (Exception e) { throw new RuntimeException(e); } } try { hbaseService.publishEvents(eventList); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } return list; } @Override public void close() { } public static class Builder implements Interceptor.Builder { @Override public void configure(Context context) { // TODO Auto-generated method stub } @Override public Interceptor build() { return new EventInterceptor(); } } }