Simple Log Service から Object Storage Service (OSS) にデータを送信する場合、Snappy を使用してデータを圧縮できます。データが OSS に送信された後、展開ツールを使用してデータを展開できます。展開ツールには、C++ 用の Snappy ライブラリ、Java 用の Snappy ライブラリ、Python 用の Snappy ライブラリ、および Linux ベースの Snappy ツールが含まれます。
OSS へのログ送信の旧バージョンは廃止されました。新バージョンを参照してください。
C++ 用 Snappy ライブラリ
Snappy から C++ 用の Snappy ライブラリをダウンロードしてインストールします。
snappy.uncompressメソッドを使用して、Snappy 圧縮ファイルを展開します。
Java 用 Snappy ライブラリ
次のいずれかの方法を選択して、Java 用の Snappy ライブラリをダウンロードします。
説明1.1.2.1 のライブラリを使用すると、一部の Snappy 圧縮ファイルが展開に失敗する場合があります。この問題を防ぐために、1.1.2.6 以降のライブラリを使用することをお勧めします。この問題の詳細については、MAGIC HEADER の不適切な処理をご覧ください。
ライブラリを手動でダウンロードするには、次のリンクをクリックします。
ライブラリをダウンロードするには、Maven プロジェクトに次の依存関係を追加します。
<dependency> <groupId>org.xerial.snappy</groupId> <artifactId>snappy-java</artifactId> <version>1.0.4.1</version> <type>jar</type> <scope>compile</scope> </dependency>
次のいずれかの方法を選択して、Snappy 圧縮ファイルを展開します。
説明SnappyFramedInputStream はサポートされていません。
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 用 Snappy ライブラリ
python-snappy から Python 用の Snappy ライブラリをダウンロードしてインストールします。
snappy.uncompressメソッドを使用して、Snappy 圧縮ファイルを展開します。Python 2 のサンプルコード:
import snappy compressed = open('/tmp/temp.snappy').read() snappy.uncompress(compressed)Python 3 のサンプルコード:
import snappy compressed = open('/tmp/temp.snappy','rb').read() print(snappy.uncompress(compressed).decode(encoding='utf-8',errors="ignore"))
説明Windows システムで snappy.uncompress メソッドを使用してファイルを展開すると、エラーが発生する場合があります。たとえば、Windows ファイルシステム内のファイルがバイトオーダーマーク(BOM)で始まるため、
UnicodeDecodeError: 'gbk' codec can't decode byte 0xff in position 0: illegal multibyte sequenceエラーが発生する場合があります。UNIX ライクなシステムを使用するか、open 関数の encoding パラメーターで有効なエンコード形式を指定することをお勧めします。次のコマンドを使用して Snappy 圧縮 OSS ファイルを展開することはできません。CLI を使用してデータを展開する場合は、Hadoop モード(hadoop_stream_decompress)またはストリーミングモード(stream_decompress)を使用する必要があります。
python -m snappy -d compressed_file.snappy uncompressed_file
PHP 用オープンソース Snappy ツール
PHP 用オープンソース Snappy ツールを使用して、Snappy 圧縮ファイルを展開できます。
php-ext-snappy からツールのソースコードをダウンロードします。
次のコマンドを実行してソースコードをダウンロードすることもできます。
git clone --recursive --depth=1 https://github.com/kjdev/php-ext-snappy.gitソースコードをコンパイルします。
% cd php-ext-snappy % phpize % ./configure % make % make installphp.ini ファイルで拡張機能を構成します。
extension=snappy.so構成後、次のコードに基づいて、Snappy を使用してファイルを圧縮し、Snappy 圧縮ファイルを展開できます。
$file_path = "test.snappy" ; if (file_exists($file_path)) { $str = file_get_contents($file_path); // ファイルの内容を文字列に読み込みます。 $uncompressed = snappy_uncompress($str); echo $uncompressed; }
参照
詳細については、GitHub で Snappy 関連のオープンソースプロジェクトをご覧ください。詳細については、「snappy」をご参照ください。