Hi Guys,
After long day's I started to write my blog-spot. today i am going to give some Hadoop Compression code stuff. i think it may help ful for your's projects.
if it is help ful for your project, please send the feedback/ write the comments.
The below codes are deal with reading and writing the file from hdfs using different hadoop compression techniques.
CompressionOperation.java
package com.srini.compression;
import java.io.File;
import java.io.InputStream;
import java.util.List;
import org.apache.hadoop.fs.Path;
public interface CompressionOperation {
public List<String> readFile(String namenode_address, Path inpath);
public void WriteFile(String namenode_address, File inputFile, Path outpath);
public void WriteFile(String namenode_address, File[] inputFile,
Path outpath);
public void WriteFile(String namenode_address, InputStream inputStream,
Path outpath);
public void WriteFile(String namenode_address, File[] inputFile,
Path[] outpath);
}
DefaultCompression.java
package com.srini.compression;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.compress.CompressionCodec;
import org.apache.hadoop.io.compress.CompressionCodecFactory;
import org.apache.hadoop.io.compress.CompressionInputStream;
import org.apache.hadoop.io.compress.CompressionOutputStream;
import org.apache.hadoop.io.compress.DefaultCodec;
public class DefaultCompression implements CompressionOperation {
private CompressionInputStream stream;
private List<String> content;
private static Configuration conf = new Configuration();
private static FileInputStream inputStream;
private static FSDataOutputStream outputStream;
private static FileSystem fs;
private static final String COMPRESSION_EXTENSION = "deflate";
@Override
public List<String> readFile(String namenode_address, Path inpath) {
conf.set("fs.default.name", namenode_address);
try {
fs = FileSystem.get(conf);
if (fs.exists(inpath)) {
FSDataInputStream inputStream = fs.open(inpath);
CompressionCodecFactory factory = new CompressionCodecFactory(
conf);
CompressionCodec codec = factory
.getCodecByClassName(DefaultCodec.class.getName());
stream = codec.createInputStream(inputStream,
codec.createDecompressor());
content = IOUtils.readLines(stream, "UTF-8");
fs.close();
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(stream);
} else {
System.out.println("The file " + inpath
+ " is not avilable in the hdfs.");
}
} catch (IOException e) {
e.printStackTrace();
}
return content;
}
@Override
public void WriteFile(String namenode_address, File inputFile, Path outpath) {
conf.set("fs.default.name", namenode_address);
try {
inputStream = new FileInputStream(inputFile);
fs = FileSystem.get(conf);
if (!fs.exists(outpath)) {
outputStream = fs.create(outpath);
CompressionCodecFactory factory = new CompressionCodecFactory(
conf);
CompressionCodec codec = factory
.getCodecByClassName(DefaultCodec.class.getName());
CompressionOutputStream stream = codec.createOutputStream(
outputStream, codec.createCompressor());
List<String> lines = IOUtils.readLines(inputStream, "UTF-8");
for (String string : lines) {
IOUtils.write(string, stream, "UTF-8");
}
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(stream);
IOUtils.closeQuietly(outputStream);
fs.close();
} else {
System.out
.println("The ouput--"
+ outpath
+ "-- is already exsist in the hdfs. please choose the diffrent path");
}
} catch (IOException e) {
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(stream);
IOUtils.closeQuietly(outputStream);
e.printStackTrace();
}
}
@Override
public void WriteFile(String namenode_address, File[] inputFile,
Path outpath) {
conf.set("fs.default.name", namenode_address);
for (File file : inputFile) {
try {
inputStream = new FileInputStream(file);
fs = FileSystem.get(conf);
FileStatus status = fs.getFileStatus(outpath);
if (status.isDir()) {
outputStream = fs.create(new Path(outpath.toString()
+ Path.SEPARATOR
+ FilenameUtils.getBaseName(file.getName()) + "."
+ COMPRESSION_EXTENSION));
CompressionCodecFactory factory = new CompressionCodecFactory(
conf);
CompressionCodec codec = factory
.getCodecByClassName(DefaultCodec.class.getName());
CompressionOutputStream stream = codec.createOutputStream(
outputStream, codec.createCompressor());
List<String> lines = IOUtils
.readLines(inputStream, "UTF-8");
for (String string : lines) {
IOUtils.write(string, stream, "UTF-8");
}
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(stream);
IOUtils.closeQuietly(outputStream);
} else {
System.out.println("The ouput--" + outpath
+ "-- is not a directory");
}
} catch (IOException e) {
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(stream);
IOUtils.closeQuietly(outputStream);
e.printStackTrace();
}
}
try {
fs.close();
} catch (IOException e) {
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(stream);
IOUtils.closeQuietly(outputStream);
e.printStackTrace();
}
}
@Override
public void WriteFile(String namenode_address, InputStream inputStream,
Path outpath) {
conf.set("fs.default.name", namenode_address);
try {
fs = FileSystem.get(conf);
outputStream = fs.create(outpath);
CompressionCodecFactory factory = new CompressionCodecFactory(conf);
CompressionCodec codec = factory
.getCodecByClassName(DefaultCodec.class.getName());
CompressionOutputStream stream = codec.createOutputStream(
outputStream, codec.createCompressor());
List<String> lines = IOUtils.readLines(inputStream, "UTF-8");
for (String string : lines) {
IOUtils.write(string, stream, "UTF-8");
}
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(stream);
IOUtils.closeQuietly(outputStream);
} catch (IOException e) {
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(stream);
IOUtils.closeQuietly(outputStream);
e.printStackTrace();
}
}
@Override
public void WriteFile(String namenode_address, File[] inputFile,
Path[] outpath) {
for (int i = 0; i <= File.listRoots().length; i++) {
WriteFile(namenode_address, inputFile[i], outpath[i]);
}
}
}
Bzip2Compression.java
package com.srini.compression;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.compress.BZip2Codec;
import org.apache.hadoop.io.compress.CompressionCodec;
import org.apache.hadoop.io.compress.CompressionCodecFactory;
import org.apache.hadoop.io.compress.CompressionInputStream;
import org.apache.hadoop.io.compress.CompressionOutputStream;
public class Bzip2Compression implements CompressionOperation {
private CompressionInputStream stream;
private List<String> content;
private static Configuration conf = new Configuration();
private static FileInputStream inputStream;
private static FSDataOutputStream outputStream;
private static FileSystem fs;
private static final String COMPRESSION_EXTENSION = "bzip2";
@Override
public List<String> readFile(String namenode_address, Path inpath) {
conf.set("fs.default.name", namenode_address);
try {
fs = FileSystem.get(conf);
if (fs.exists(inpath)) {
FSDataInputStream inputStream = fs.open(inpath);
CompressionCodecFactory factory = new CompressionCodecFactory(
conf);
CompressionCodec codec = factory
.getCodecByClassName(BZip2Codec.class.getName());
stream = codec.createInputStream(inputStream,
codec.createDecompressor());
content = IOUtils.readLines(stream, "UTF-8");
fs.close();
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(stream);
} else {
System.out.println("The file " + inpath
+ " is not avilable in the hdfs.");
}
} catch (IOException e) {
e.printStackTrace();
}
return content;
}
@Override
public void WriteFile(String namenode_address, File inputFile, Path outpath) {
conf.set("fs.default.name", namenode_address);
try {
inputStream = new FileInputStream(inputFile);
fs = FileSystem.get(conf);
if (!fs.exists(outpath)) {
outputStream = fs.create(outpath);
CompressionCodecFactory factory = new CompressionCodecFactory(
conf);
CompressionCodec codec = factory
.getCodecByClassName(BZip2Codec.class.getName());
CompressionOutputStream stream = codec.createOutputStream(
outputStream, codec.createCompressor());
List<String> lines = IOUtils.readLines(inputStream, "UTF-8");
for (String string : lines) {
IOUtils.write(string, stream, "UTF-8");
}
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(stream);
IOUtils.closeQuietly(outputStream);
fs.close();
} else {
System.out
.println("The ouput--"
+ outpath
+ "-- is already exsist in the hdfs. please choose the diffrent path");
}
} catch (IOException e) {
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(stream);
IOUtils.closeQuietly(outputStream);
e.printStackTrace();
}
}
@Override
public void WriteFile(String namenode_address, File[] inputFile,
Path outpath) {
conf.set("fs.default.name", namenode_address);
for (File file : inputFile) {
try {
inputStream = new FileInputStream(file);
fs = FileSystem.get(conf);
FileStatus status = fs.getFileStatus(outpath);
if (status.isDir()) {
outputStream = fs.create(new Path(outpath.toString()
+ Path.SEPARATOR
+ FilenameUtils.getBaseName(file.getName()) + "."
+ COMPRESSION_EXTENSION));
CompressionCodecFactory factory = new CompressionCodecFactory(
conf);
CompressionCodec codec = factory
.getCodecByClassName(BZip2Codec.class.getName());
CompressionOutputStream stream = codec.createOutputStream(
outputStream, codec.createCompressor());
List<String> lines = IOUtils
.readLines(inputStream, "UTF-8");
for (String string : lines) {
IOUtils.write(string, stream, "UTF-8");
}
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(stream);
IOUtils.closeQuietly(outputStream);
} else {
System.out.println("The ouput--" + outpath
+ "-- is not a directory");
}
} catch (IOException e) {
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(stream);
IOUtils.closeQuietly(outputStream);
e.printStackTrace();
}
}
try {
fs.close();
} catch (IOException e) {
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(stream);
IOUtils.closeQuietly(outputStream);
e.printStackTrace();
}
}
@Override
public void WriteFile(String namenode_address, InputStream inputStream,
Path outpath) {
conf.set("fs.default.name", namenode_address);
try {
fs = FileSystem.get(conf);
outputStream = fs.create(outpath);
CompressionCodecFactory factory = new CompressionCodecFactory(conf);
CompressionCodec codec = factory
.getCodecByClassName(BZip2Codec.class.getName());
CompressionOutputStream stream = codec.createOutputStream(
outputStream, codec.createCompressor());
List<String> lines = IOUtils.readLines(inputStream, "UTF-8");
for (String string : lines) {
IOUtils.write(string, stream, "UTF-8");
}
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(stream);
IOUtils.closeQuietly(outputStream);
} catch (IOException e) {
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(stream);
IOUtils.closeQuietly(outputStream);
e.printStackTrace();
}
}
@Override
public void WriteFile(String namenode_address, File[] inputFile,
Path[] outpath) {
for (int i = 0; i <= File.listRoots().length; i++) {
WriteFile(namenode_address, inputFile[i], outpath[i]);
}
}
}
GzipCompression.java
package com.srini.compression;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.compress.CompressionCodec;
import org.apache.hadoop.io.compress.CompressionCodecFactory;
import org.apache.hadoop.io.compress.CompressionInputStream;
import org.apache.hadoop.io.compress.CompressionOutputStream;
import org.apache.hadoop.io.compress.GzipCodec;
public class GzipCompression implements CompressionOperation {
private CompressionInputStream stream;
private List<String> content;
private static Configuration conf = new Configuration();
private static FileInputStream inputStream;
private static FSDataOutputStream outputStream;
private static FileSystem fs;
private static final String COMPRESSION_EXTENSION = "gz";
@Override
public List<String> readFile(String namenode_address, Path inpath) {
conf.set("fs.default.name", namenode_address);
try {
fs = FileSystem.get(conf);
if (fs.exists(inpath)) {
FSDataInputStream inputStream = fs.open(inpath);
CompressionCodecFactory factory = new CompressionCodecFactory(
conf);
CompressionCodec codec = factory
.getCodecByClassName(GzipCodec.class.getName());
stream = codec.createInputStream(inputStream,
codec.createDecompressor());
content = IOUtils.readLines(stream, "UTF-8");
fs.close();
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(stream);
} else {
System.out.println("The file " + inpath
+ " is not avilable in the hdfs.");
}
} catch (IOException e) {
e.printStackTrace();
}
return content;
}
@Override
public void WriteFile(String namenode_address, File inputFile, Path outpath) {
conf.set("fs.default.name", namenode_address);
try {
inputStream = new FileInputStream(inputFile);
fs = FileSystem.get(conf);
if (!fs.exists(outpath)) {
outputStream = fs.create(outpath);
CompressionCodecFactory factory = new CompressionCodecFactory(
conf);
CompressionCodec codec = factory
.getCodecByClassName(GzipCodec.class.getName());
CompressionOutputStream stream = codec.createOutputStream(
outputStream, codec.createCompressor());
List<String> lines = IOUtils.readLines(inputStream, "UTF-8");
for (String string : lines) {
IOUtils.write(string, stream, "UTF-8");
}
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(stream);
IOUtils.closeQuietly(outputStream);
fs.close();
} else {
System.out
.println("The ouput--"
+ outpath
+ "-- is already exsist in the hdfs. please choose the diffrent path");
}
} catch (IOException e) {
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(stream);
IOUtils.closeQuietly(outputStream);
e.printStackTrace();
}
}
@Override
public void WriteFile(String namenode_address, File[] inputFile,
Path outpath) {
conf.set("fs.default.name", namenode_address);
for (File file : inputFile) {
try {
inputStream = new FileInputStream(file);
fs = FileSystem.get(conf);
FileStatus status = fs.getFileStatus(outpath);
if (status.isDir()) {
outputStream = fs.create(new Path(outpath.toString()
+ Path.SEPARATOR
+ FilenameUtils.getBaseName(file.getName()) + "."
+ COMPRESSION_EXTENSION));
CompressionCodecFactory factory = new CompressionCodecFactory(
conf);
CompressionCodec codec = factory
.getCodecByClassName(GzipCodec.class.getName());
CompressionOutputStream stream = codec.createOutputStream(
outputStream, codec.createCompressor());
List<String> lines = IOUtils
.readLines(inputStream, "UTF-8");
for (String string : lines) {
IOUtils.write(string, stream, "UTF-8");
}
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(stream);
IOUtils.closeQuietly(outputStream);
} else {
System.out.println("The ouput--" + outpath
+ "-- is not a directory");
}
} catch (IOException e) {
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(stream);
IOUtils.closeQuietly(outputStream);
e.printStackTrace();
}
}
try {
fs.close();
} catch (IOException e) {
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(stream);
IOUtils.closeQuietly(outputStream);
e.printStackTrace();
}
}
@Override
public void WriteFile(String namenode_address, InputStream inputStream,
Path outpath) {
conf.set("fs.default.name", namenode_address);
try {
fs = FileSystem.get(conf);
outputStream = fs.create(outpath);
CompressionCodecFactory factory = new CompressionCodecFactory(conf);
CompressionCodec codec = factory
.getCodecByClassName(GzipCodec.class.getName());
CompressionOutputStream stream = codec.createOutputStream(
outputStream, codec.createCompressor());
List<String> lines = IOUtils.readLines(inputStream, "UTF-8");
for (String string : lines) {
IOUtils.write(string, stream, "UTF-8");
}
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(stream);
IOUtils.closeQuietly(outputStream);
} catch (IOException e) {
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(stream);
IOUtils.closeQuietly(outputStream);
e.printStackTrace();
}
}
@Override
public void WriteFile(String namenode_address, File[] inputFile,
Path[] outpath) {
for (int i = 0; i <= File.listRoots().length; i++) {
WriteFile(namenode_address, inputFile[i], outpath[i]);
}
}
}
SnappyCompression.java
package com.srini.compression;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.compress.CompressionCodec;
import org.apache.hadoop.io.compress.CompressionCodecFactory;
import org.apache.hadoop.io.compress.CompressionInputStream;
import org.apache.hadoop.io.compress.CompressionOutputStream;
import org.apache.hadoop.io.compress.SnappyCodec;
public class SnappyCompression implements CompressionOperation {
private CompressionInputStream stream;
private List<String> content;
private static Configuration conf = new Configuration();
private static FileInputStream inputStream;
private static FSDataOutputStream outputStream;
private static FileSystem fs;
private static final String COMPRESSION_EXTENSION = "snappy";
@Override
public List<String> readFile(String namenode_address, Path inpath) {
conf.set("fs.default.name", namenode_address);
try {
fs = FileSystem.get(conf);
if (fs.exists(inpath)) {
FSDataInputStream inputStream = fs.open(inpath);
CompressionCodecFactory factory = new CompressionCodecFactory(
conf);
CompressionCodec codec = factory
.getCodecByClassName(SnappyCodec.class.getName());
stream = codec.createInputStream(inputStream,
codec.createDecompressor());
content = IOUtils.readLines(stream, "UTF-8");
fs.close();
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(stream);
} else {
System.out.println("The file " + inpath
+ " is not avilable in the hdfs.");
}
} catch (IOException e) {
e.printStackTrace();
}
return content;
}
@Override
public void WriteFile(String namenode_address, File inputFile, Path outpath) {
conf.set("fs.default.name", namenode_address);
try {
inputStream = new FileInputStream(inputFile);
fs = FileSystem.get(conf);
if (!fs.exists(outpath)) {
outputStream = fs.create(outpath);
CompressionCodecFactory factory = new CompressionCodecFactory(
conf);
CompressionCodec codec = factory
.getCodecByClassName(SnappyCodec.class.getName());
CompressionOutputStream stream = codec.createOutputStream(
outputStream, codec.createCompressor());
List<String> lines = IOUtils.readLines(inputStream, "UTF-8");
for (String string : lines) {
IOUtils.write(string, stream, "UTF-8");
}
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(stream);
IOUtils.closeQuietly(outputStream);
fs.close();
} else {
System.out
.println("The ouput--"
+ outpath
+ "-- is already exsist in the hdfs. please choose the diffrent path");
}
} catch (IOException e) {
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(stream);
IOUtils.closeQuietly(outputStream);
e.printStackTrace();
}
}
@Override
public void WriteFile(String namenode_address, File[] inputFile,
Path outpath) {
conf.set("fs.default.name", namenode_address);
for (File file : inputFile) {
try {
inputStream = new FileInputStream(file);
fs = FileSystem.get(conf);
FileStatus status = fs.getFileStatus(outpath);
if (status.isDir()) {
outputStream = fs.create(new Path(outpath.toString()
+ Path.SEPARATOR
+ FilenameUtils.getBaseName(file.getName()) + "."
+ COMPRESSION_EXTENSION));
CompressionCodecFactory factory = new CompressionCodecFactory(
conf);
CompressionCodec codec = factory
.getCodecByClassName(SnappyCodec.class.getName());
CompressionOutputStream stream = codec.createOutputStream(
outputStream, codec.createCompressor());
List<String> lines = IOUtils
.readLines(inputStream, "UTF-8");
for (String string : lines) {
IOUtils.write(string, stream, "UTF-8");
}
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(stream);
IOUtils.closeQuietly(outputStream);
} else {
System.out.println("The ouput--" + outpath
+ "-- is not a directory");
}
} catch (IOException e) {
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(stream);
IOUtils.closeQuietly(outputStream);
e.printStackTrace();
}
}
try {
fs.close();
} catch (IOException e) {
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(stream);
IOUtils.closeQuietly(outputStream);
e.printStackTrace();
}
}
@Override
public void WriteFile(String namenode_address, InputStream inputStream,
Path outpath) {
conf.set("fs.default.name", namenode_address);
try {
fs = FileSystem.get(conf);
outputStream = fs.create(outpath);
CompressionCodecFactory factory = new CompressionCodecFactory(conf);
CompressionCodec codec = factory
.getCodecByClassName(SnappyCodec.class.getName());
CompressionOutputStream stream = codec.createOutputStream(
outputStream, codec.createCompressor());
List<String> lines = IOUtils.readLines(inputStream, "UTF-8");
for (String string : lines) {
IOUtils.write(string, stream, "UTF-8");
}
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(stream);
IOUtils.closeQuietly(outputStream);
} catch (IOException e) {
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(stream);
IOUtils.closeQuietly(outputStream);
e.printStackTrace();
}
}
@Override
public void WriteFile(String namenode_address, File[] inputFile,
Path[] outpath) {
for (int i = 0; i <= File.listRoots().length; i++) {
WriteFile(namenode_address, inputFile[i], outpath[i]);
}
}
}
TestClass.java
package com.srini.compression;
import java.util.List;
import org.apache.hadoop.fs.Path;
public class TestClass {
public static void main(String[] args) {
CompressionOperation operation = new GzipCompression();
List<String> line = operation.readFile("hdfs://localhost:8020",
new Path("/user/hadoop.gz"));
System.out.println(line);
}
}