package storm.applications.sink; import backtype.storm.tuple.Tuple; import java.io.BufferedWriter; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.Writer; import java.util.HashMap; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import storm.applications.constants.BaseConstants.BaseConf; import storm.applications.util.data.StringUtil; public class FileSink extends BaseSink { private static final Logger LOG = LoggerFactory.getLogger(FileSink.class); protected BufferedWriter writer = null; protected String file; @Override public void initialize() { super.initialize(); file = config.getString(getConfigKey(BaseConf.SINK_PATH)); Map<String, Object> map = new HashMap<>(3); map.put("taskid", context.getThisTaskId()); map.put("taskindex", context.getThisTaskIndex()); map.put("componentid", context.getThisComponentId()); file = StringUtil.dictFormat(file, map); try { writer = new BufferedWriter(new OutputStreamWriter( new FileOutputStream(file), "utf-8")); } catch (IOException ex) { LOG.error("Error while creating file " + file, ex); } } @Override public void execute(Tuple tuple) { try { writer.write(formatter.format(tuple)); collector.ack(tuple); } catch (IOException ex) { LOG.error("Error while writing to file " + file, ex); } } @Override public void cleanup() { super.cleanup(); try { writer.flush(); writer.close(); } catch (IOException ex) { LOG.error("Error while closing the file " + file, ex); } } @Override protected Logger getLogger() { return LOG; } }