package org.apache.hadoop.hive.cassandra.output; import java.io.IOException; import java.util.Properties; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.hive.cassandra.CassandraException; import org.apache.hadoop.hive.cassandra.CassandraProxyClient; import org.apache.hadoop.hive.cassandra.serde.AbstractColumnSerDe; import org.apache.hadoop.hive.ql.exec.FileSinkOperator.RecordWriter; import org.apache.hadoop.hive.ql.io.HiveOutputFormat; import org.apache.hadoop.io.Text; import org.apache.hadoop.io.Writable; import org.apache.hadoop.mapred.JobConf; import org.apache.hadoop.mapred.OutputFormat; import org.apache.hadoop.util.Progressable; @SuppressWarnings("deprecation") public class HiveCassandraOutputFormat implements HiveOutputFormat<Text, CassandraPut>, OutputFormat<Text, CassandraPut> { static final Log LOG = LogFactory.getLog(HiveCassandraOutputFormat.class); @Override public RecordWriter getHiveRecordWriter(final JobConf jc, Path finalOutPath, Class<? extends Writable> valueClass, boolean isCompressed, Properties tableProperties, Progressable progress) throws IOException { final String cassandraKeySpace = jc.get(AbstractColumnSerDe.CASSANDRA_KEYSPACE_NAME); final String cassandraHost = jc.get(AbstractColumnSerDe.CASSANDRA_HOST); final int cassandraPort = Integer.parseInt(jc.get(AbstractColumnSerDe.CASSANDRA_PORT)); final CassandraProxyClient client; try { client = new CassandraProxyClient( cassandraHost, cassandraPort, true, true); } catch (CassandraException e) { throw new IOException(e); } return new RecordWriter() { @Override public void close(boolean abort) throws IOException { if (client != null) { client.close(); } } @Override public void write(Writable w) throws IOException { Put put = (Put) w; put.write(cassandraKeySpace, client, jc); } }; } @Override public void checkOutputSpecs(FileSystem arg0, JobConf jc) throws IOException { } @Override public org.apache.hadoop.mapred.RecordWriter<Text, CassandraPut> getRecordWriter(FileSystem arg0, JobConf arg1, String arg2, Progressable arg3) throws IOException { throw new RuntimeException("Error: Hive should not invoke this method."); } }