hadoop hdfsに書きます。ファイルはlzoを使用して圧縮する必要があります。また、ファイルはリアルタイムで追加されます。マップなしでlzo圧縮を使用してhadoop hdfsに書き込む方法
ソースファイルは、hadoopに存在しないgzipファイルです。バッチはこのgzipファイルを処理し、lzo圧縮を行い、hadoopに追加します。これにより、マップの縮小を使用する可能性が排除されますか?
これをどのように達成できますか?助けを事前に
おかげ
hadoop hdfsに書きます。ファイルはlzoを使用して圧縮する必要があります。また、ファイルはリアルタイムで追加されます。マップなしでlzo圧縮を使用してhadoop hdfsに書き込む方法
ソースファイルは、hadoopに存在しないgzipファイルです。バッチはこのgzipファイルを処理し、lzo圧縮を行い、hadoopに追加します。これにより、マップの縮小を使用する可能性が排除されますか?
これをどのように達成できますか?助けを事前に
おかげ
カスタムJavaコードからHDFSに直接書き込むことができます。
public class HdfsWrite extends Configured implements Tool {
public int run(String[] arg0) throws Exception {
// create am HDFS file system
FileSystem fs = FileSystem.get(getConf());
// create an output stream to write to a new file in hdfs
Path outputPath = new Path(
"/path/to/file/in/hdfs.default");
OutputStream outputStream = fs.create(outputPath);
// now wrap the output stream with a Zlib compression codec
CompressionCodecFactory codecFactory = new CompressionCodecFactory(getConf());
CompressionCodec codec = codecFactory.getCodec(outputPath);
CompressionOutputStream compressedOutput = codec.createOutputStream(outputStream);
// send content to file via compressed output stream using .write methods
// ..
// close out stream
compressedOutput.close();
return 0;
}
public static void main(String[] args) throws Exception {
ToolRunner.run(new HdfsWrite(), args);
}
}
このコードは、zlib圧縮のために働く - あなたはすでにいくつかのJavaライブラリを持っている、LZO圧縮のために(例えばhadoop-gpl-compressionライブラリー)を圧縮することができます。上記のライブラリを詳細にインストールする場合は、出力パスの拡張子を ".lzo_deflate"に変更するだけで済みます。すべてうまくいくはずです。別の圧縮ライブラリを使用する場合は、CompressionCodecFactoryコードブロックをスキップしてoutputStreamを直接ラップすることができます。
ファイルへの追加については、使用しているバージョンによってはサポートされない場合があります。また、圧縮ライブラリが連結ファイルをサポートしているかどうかを検討する必要があります(GZipなど)。ただし、以前のバージョンのJava/hadoopではこれらのタイプの問題があります。あなたが追加をサポートするバージョンのhadoopを持っていて、あなたの圧縮ライブラリがそれをsuupしているなら、
に電話してください。 –
私はhadoopでいくつかの圧縮テストを実行しようとしています。シナリオは単純です:圧縮された入力でwordcountを実行してください。 ubuntuのlzopツールを使ってlzo圧縮ファイルを作成し、それをwordcountに与えた後、結果ファイルに面白い文字が含まれていることに気付きました。そこで私はHadoopからファイルを圧縮することを考えました。私は日食であなたのコードを実行した、それは出力ファイルを作成する..しかし、彼らは期待どおりに圧縮されていません。理由はわからない – AlexandruC
あなたのコードの唯一の変更は、私がcodecFactoryを使用していることです。 "org.apache.hadoop.io.compress.GzipCodec"); – AlexandruC