package com.xavient.dip.storm.builder; import org.apache.storm.hdfs.bolt.HdfsBolt; import org.apache.storm.hdfs.bolt.format.DefaultFileNameFormat; import org.apache.storm.hdfs.bolt.format.DelimitedRecordFormat; import org.apache.storm.hdfs.bolt.format.FileNameFormat; import org.apache.storm.hdfs.bolt.format.RecordFormat; import org.apache.storm.hdfs.bolt.rotation.FileRotationPolicy; import org.apache.storm.hdfs.bolt.rotation.FileSizeRotationPolicy; import org.apache.storm.hdfs.bolt.rotation.FileSizeRotationPolicy.Units; import org.apache.storm.hdfs.bolt.sync.CountSyncPolicy; import org.apache.storm.hdfs.bolt.sync.SyncPolicy; import com.xavient.dip.common.AppArgs; import com.xavient.dip.common.config.DiPConfiguration; import com.xavient.dip.storm.bolt.DataIngestionHdfsBolt; public class HdfsBoltBuilder { public static HdfsBolt build(AppArgs appArgs) { RecordFormat format = new DelimitedRecordFormat() .withFieldDelimiter(appArgs.getProperty(DiPConfiguration.HDFS_OUTPUT_DELIMITER)); SyncPolicy syncPolicy = new CountSyncPolicy( Integer.valueOf(appArgs.getProperty(DiPConfiguration.HDFS_SYNC_POLICY, "1000"))); FileRotationPolicy rotationPolicy = new FileSizeRotationPolicy( Float.valueOf(appArgs.getProperty(DiPConfiguration.FILE_SIZE_ROTATION)), Units.MB); FileNameFormat fileNameFormat = new DefaultFileNameFormat().withPrefix("Twitter") .withPath(appArgs.getProperty(DiPConfiguration.HDFS_OUTPUT_PATH)); HdfsBolt bolt = new DataIngestionHdfsBolt().withFsUrl(appArgs.getProperty(DiPConfiguration.CLUSTER_FS_URL)) .withFileNameFormat(fileNameFormat).withRecordFormat(format).withRotationPolicy(rotationPolicy) .withSyncPolicy(syncPolicy); return bolt; } }