Saat mengirim data dari Simple Log Service ke Object Storage Service (OSS), Anda dapat menggunakan Snappy untuk mengompres data tersebut. Setelah data dikirim ke OSS, Anda dapat menggunakan alat dekompresi untuk mendekompresnya. Alat ini mencakup pustaka Snappy untuk C++, Java, Python, serta alat Snappy berbasis Linux.
Versi lama pengiriman log ke OSS sudah tidak digunakan lagi. Lihat versi baru.
Pustaka Snappy untuk C++
Unduh dan instal pustaka Snappy untuk C++ dari Snappy.
Gunakan metode
snappy.uncompressuntuk mendekompres file yang dikompresi dengan Snappy.
Pustaka Snappy untuk Java
Pilih salah satu metode berikut untuk mengunduh pustaka Snappy untuk Java.
CatatanJika Anda menggunakan pustaka versi 1.1.2.1, beberapa file yang dikompresi dengan Snappy mungkin gagal didekompresi. Untuk mencegah masalah ini, disarankan menggunakan pustaka versi 1.1.2.6 atau yang lebih baru. Informasi lebih lanjut tentang masalah ini dapat ditemukan di penanganan buruk dari MAGIC HEADER.
Klik tautan berikut untuk mengunduh pustaka secara manual:
Tambahkan dependensi berikut ke proyek Maven untuk mengunduh pustaka:
<dependency> <groupId>org.xerial.snappy</groupId> <artifactId>snappy-java</artifactId> <version>1.0.4.1</version> <type>jar</type> <scope>compile</scope> </dependency>
Pilih salah satu metode berikut untuk mendekompres file yang dikompresi dengan Snappy.
CatatanSnappyFramedInputStream tidak didukung.
Snappy.uncompressContoh kode:
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.SnappyInputStreamContoh kode:
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)); }
Pustaka Snappy untuk Python
Unduh dan instal pustaka Snappy untuk Python dari python-snappy.
Gunakan metode
snappy.uncompressuntuk mendekompres file yang dikompresi dengan Snappy.Contoh kode untuk Python 2:
import snappy compressed = open('/tmp/temp.snappy').read() snappy.uncompress(compressed)Contoh kode untuk Python 3:
import snappy compressed = open('/tmp/temp.snappy','rb').read() print(snappy.uncompress(compressed).decode(encoding='utf-8',errors="ignore"))
CatatanJika Anda menggunakan metode snappy.uncompress untuk mendekompres file dalam sistem Windows, kesalahan mungkin terjadi. Misalnya, kesalahan
UnicodeDecodeError: 'gbk' codec can't decode byte 0xff in position 0: illegal multibyte sequencedapat terjadi karena file dalam sistem file Windows dimulai dengan byte order mark (BOM). Disarankan menggunakan sistem seperti UNIX atau menentukan format penyandian yang valid dalam parameter encoding fungsi open.Perintah berikut tidak dapat digunakan untuk mendekompres file OSS yang dikompresi dengan Snappy. Jika Anda ingin mendekompres data menggunakan CLI, gunakan mode Hadoop (hadoop_stream_decompress) atau mode streaming (stream_decompress).
python -m snappy -d compressed_file.snappy uncompressed_file
Alat Snappy sumber terbuka untuk PHP
Anda dapat menggunakan alat Snappy sumber terbuka untuk PHP untuk mendekompres file yang dikompresi dengan Snappy.
Unduh kode sumber alat tersebut dari php-ext-snappy.
Anda juga dapat menjalankan perintah berikut untuk mengunduh kode sumber:
git clone --recursive --depth=1 https://github.com/kjdev/php-ext-snappy.gitKompilasi kode sumber.
% cd php-ext-snappy % phpize % ./configure % make % make installKonfigurasikan ekstensi di file php.ini.
extension=snappy.soSetelah konfigurasi, Anda dapat mengompres file menggunakan Snappy dan mendekompres file yang dikompresi dengan Snappy berdasarkan kode berikut:
$file_path = "test.snappy" ; if (file_exists($file_path)) { $str = file_get_contents($file_path); // Baca isi file ke dalam string. $uncompressed = snappy_uncompress($str); echo $uncompressed; }
Referensi
Untuk dukungan lebih lanjut, lihat proyek sumber terbuka terkait Snappy di GitHub. Informasi lebih lanjut tersedia di snappy.