Log Service が Object Storage Service (OSS) に送信するログは、圧縮方法を Snappy に設定できます。 設定すると、C++ ライブラリ、Java ライブラリ、Python ライブラリ、および Linux 用の解凍ツールを使用して、これらのログを解凍できます。

snappy アルゴリズムを使用して OSS に送信するログを圧縮すると、ログが OSS で占有するバケットストレージスペースが小さくなります。 本ページでは、.snappy ファイルを解凍するための以下の方法について説明します。

C++ ライブラリ

C++ ライブラリを Snappy official website からダウンロードし、Snappy.Uncompress メソッドを使用して .snappy ファイルを解凍します。

Java ライブラリ

xerial snappy-java をダウンロードし、Snappy.Uncompress メソッドまたは Snappy.SnappyInputStream メソッドを使用して、.snappy ファイルを解凍します。 SnappyFramedInputStream メソッドはサポートされていません。

既存バグのため、snappy-java 1.1.2.1 では一部の .snappy ファイルの解凍に失敗する場合があります。 このバグは、snappy-java 1.1.2.6 以降のバージョンで修正されています。 最新バージョンの使用を推奨します。
<dependency>
<groupId>org.xerial.snappy</groupId>
<artifactId>snappy-java</artifactId>
<version>1.0.4.1</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
  • Snappy.Uncompress

    String fileName = "C:\\Downloads\\36_1474212963188600684_4451886.snappy";
    RandomAccessFile randomFile = new RandomAccessFile(fileName, "r");
    int fileLength = (int) randomFile.length();
    randomFile.seek(0);
    byte[] bytes = new byte[fileLength];
    int byteread = randomFile.read(bytes);
    System.out.println(fileLength);
    System.out.println(byteread);
    byte[] uncompressed = Snappy.uncompress(bytes);
    String result = new String(uncompressed, "UTF-8");
    System.out.println(result);
  • Snappy.SnappyInputStream

    String fileName = "C:\\Downloads\\36_1474212963188600684_4451886.snappy";
    SnappyInputStream sis = new SnappyInputStream(new FileInputStream(fileName));
    byte[] buffer = new byte[4096];
    int len = 0;
    while ((len = sis.read(buffer)) ! = -1) {
        System.out.println(new String(buffer, 0, len));
    }

Python ライブラリ

  1. python-snappy をダウンロードして、インストールします。
  2. 解凍コードを実行します。
    サンプルの解凍コードは次のとおりです。
    import snappy
    compressed = open('/tmp/temp.snappy').read()
    snappy.uncompress(compressed)
    
次のコマンドでは、OSS に送信された .snappy ファイルを解凍することはできません。 この 2 つのコマンドは、Hadoop モード (hadoop_stream_decompress) またはストリームモード (stream_decompress) でのみ使用できます。
$ python -m snappy -c uncompressed_file compressed_file.snappy
$ python -m snappy -d compressed_file.snappy uncompressed_file

Linux 用の解凍ツール

Linux 環境では、Log Service でも .snappy ファイルを解凍するツールを提供しています。 snappy_tool をクリックしてダウンロードします。

./snappy_tool 03_1453457006548078722_44148.snappy 03_1453457006548078722_44148
compressed.size: 2217186
snappy::Uncompress return: 1
uncompressed.size: 25223660