use of org.apache.nifi.processors.hadoop.util.SequenceFileWriter in project nifi by apache.
the class CreateHadoopSequenceFile method onTrigger.
@Override
public void onTrigger(ProcessContext context, ProcessSession session) throws ProcessException {
FlowFile flowFile = session.get();
if (flowFile == null) {
return;
}
String mimeType = flowFile.getAttribute(CoreAttributes.MIME_TYPE.key());
String packagingFormat = NOT_PACKAGED;
if (null != mimeType) {
switch(mimeType.toLowerCase()) {
case "application/tar":
packagingFormat = TAR_FORMAT;
break;
case "application/zip":
packagingFormat = ZIP_FORMAT;
break;
case "application/flowfile-v3":
packagingFormat = FLOWFILE_STREAM_FORMAT_V3;
break;
default:
getLogger().warn("Cannot unpack {} because its mime.type attribute is set to '{}', which is not a format that can be unpacked", new Object[] { flowFile, mimeType });
}
}
final SequenceFileWriter sequenceFileWriter;
switch(packagingFormat) {
case TAR_FORMAT:
sequenceFileWriter = new TarUnpackerSequenceFileWriter();
break;
case ZIP_FORMAT:
sequenceFileWriter = new ZipUnpackerSequenceFileWriter();
break;
case FLOWFILE_STREAM_FORMAT_V3:
sequenceFileWriter = new FlowFileStreamUnpackerSequenceFileWriter();
break;
default:
sequenceFileWriter = new SequenceFileWriterImpl();
}
final Configuration configuration = getConfiguration();
if (configuration == null) {
getLogger().error("HDFS not configured properly");
session.transfer(flowFile, RELATIONSHIP_FAILURE);
context.yield();
return;
}
final CompressionCodec codec = getCompressionCodec(context, configuration);
final String value = context.getProperty(COMPRESSION_TYPE).getValue();
final SequenceFile.CompressionType compressionType = value == null ? SequenceFile.CompressionType.valueOf(DEFAULT_COMPRESSION_TYPE) : SequenceFile.CompressionType.valueOf(value);
final String fileName = flowFile.getAttribute(CoreAttributes.FILENAME.key()) + ".sf";
flowFile = session.putAttribute(flowFile, CoreAttributes.FILENAME.key(), fileName);
try {
StopWatch stopWatch = new StopWatch(true);
flowFile = sequenceFileWriter.writeSequenceFile(flowFile, session, configuration, compressionType, codec);
session.getProvenanceReporter().modifyContent(flowFile, stopWatch.getElapsed(TimeUnit.MILLISECONDS));
session.transfer(flowFile, RELATIONSHIP_SUCCESS);
getLogger().info("Transferred flowfile {} to {}", new Object[] { flowFile, RELATIONSHIP_SUCCESS });
} catch (ProcessException e) {
getLogger().error("Failed to create Sequence File. Transferring {} to 'failure'", new Object[] { flowFile }, e);
session.transfer(flowFile, RELATIONSHIP_FAILURE);
}
}
Aggregations