package com.xavient.dip.apex;
import java.util.Map.Entry;
import org.apache.apex.malhar.kafka.KafkaSinglePortInputOperator;
import org.apache.hadoop.conf.Configuration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.datatorrent.api.DAG;
import com.datatorrent.api.DAG.Locality;
import com.datatorrent.api.StreamingApplication;
import com.datatorrent.api.annotation.ApplicationAnnotation;
import com.xavient.dip.apex.operator.HBaseSinkOperator;
import com.xavient.dip.apex.operator.HdfsSinkOperator;
import com.xavient.dip.apex.operator.TwitterStreamOperator;
import com.xavient.dip.common.config.DiPConfiguration;
import com.xavient.dip.common.utils.PropertyReader;
@ApplicationAnnotation(name = "ApexTwitterStreamProcessing")
public class ApexTwitterStreamProcessor implements StreamingApplication {
private static final Logger logger = LoggerFactory.getLogger(ApexTwitterStreamProcessor.class);
@Override
public void populateDAG(DAG dag, Configuration config) {
KafkaSinglePortInputOperator in = dag.addOperator("kafkaIn", new KafkaSinglePortInputOperator());
TwitterStreamOperator tweeterStream = dag.addOperator("tweeterStream", TwitterStreamOperator.class);
HdfsSinkOperator hdfsSinkOperator = dag.addOperator("hdfsSinkOperator", HdfsSinkOperator.class);
hdfsSinkOperator.setFileName(config.get(DiPConfiguration.HDFS_FILE_NAME));
HBaseSinkOperator hBaseSinkOperator = dag.addOperator("hBaseSinkOperator",new HBaseSinkOperator(config));
hBaseSinkOperator.getStore().setTableName(config.get(DiPConfiguration.HBASE_TABLE_NAME));
hBaseSinkOperator.getStore().setZookeeperQuorum(config.get(DiPConfiguration.ZK_HOST));
hBaseSinkOperator.getStore().setZookeeperClientPort(config.getInt(DiPConfiguration.ZK_PORT, 2181));
dag.addStream("kafkaStream", in.outputPort, tweeterStream.inputPort).setLocality(Locality.CONTAINER_LOCAL);
dag.addStream("hdfsStream", tweeterStream.hdfsOutputPort, hdfsSinkOperator.input);
dag.addStream("hbaseStream", tweeterStream.hBaseOutputPort, hBaseSinkOperator.input);
}
public void addConfiguration(Configuration config) {
try {
PropertyReader propertyReader = new PropertyReader(config.get(DiPConfiguration.CONFIG_FILE));
for (Entry<Object, Object> entry : propertyReader.getProperties().entrySet()) {
config.set(String.valueOf(entry.getKey()), String.valueOf(entry.getValue()));
}
} catch (Exception e) {
logger.error("Exception occured while reading application configuration", e);
}
}
}