Menggunakan S3 Select dengan Hive untuk meningkatkan performa - Amazon EMR

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menggunakan S3 Select dengan Hive untuk meningkatkan performa

Dengan versi EMR rilis Amazon 5.18.0 dan yang lebih baru, Anda dapat menggunakan S3 Select with Hive di Amazon. EMR S3 Select memungkinkan aplikasi untuk mengambil hanya subset data dari suatu objek. Untuk AmazonEMR, pekerjaan komputasi memfilter kumpulan data besar untuk diproses “didorong ke bawah” dari cluster ke Amazon S3, yang dapat meningkatkan kinerja di beberapa aplikasi dan mengurangi jumlah data yang ditransfer antara Amazon dan Amazon S3. EMR

S3 Select didukung dengan tabel Hive berdasarkan CSV dan JSON file dan dengan mengatur variabel s3select.filter konfigurasi true selama sesi Hive Anda. Untuk informasi selengkapnya dan contoh tambahan, lihat Menentukan S3 Select dalam kode Anda.

Apakah S3 Select tepat untuk aplikasi saya?

Kami menyarankan Anda membuat tolok ukur aplikasi dengan dan tanpa S3 Select untuk melihat apakah cocok dengan aplikasi Anda.

Gunakan pedoman berikut untuk menentukan apakah aplikasi Anda adalah kandidat untuk menggunakan S3 Select:

  • Permintaan Anda menyaring lebih dari setengah set data asli.

  • Predikat filter kueri permintaan Anda menggunakan kolom yang memiliki tipe data yang didukung oleh Amazon S3 Select. Untuk informasi selengkapnya, lihat Jenis data di Panduan Pengguna Layanan Penyimpanan Sederhana Amazon.

  • Koneksi jaringan Anda antara Amazon S3 dan EMR cluster Amazon memiliki kecepatan transfer yang baik dan bandwidth yang tersedia. Amazon S3 tidak memampatkan HTTP respons, sehingga ukuran respons cenderung meningkat untuk file input terkompresi.

Pertimbangan dan batasan

  • Enkripsi sisi server Amazon S3 dengan kunci enkripsi yang disediakan pelanggan (SSE-C) dan enkripsi sisi klien tidak didukung.

  • Properti AllowQuotedRecordDelimiters tidak didukung. Jika properti ini ditentukan, kueri akan gagal.

  • Hanya CSV dan JSON file dalam format UTF -8 yang didukung. Multi-line CSVs dan JSON tidak didukung.

  • Hanya file yang tidak terkompresi atau gzip atau bzip2 yang didukung.

  • Karakter komentar di baris terakhir tidak didukung.

  • Baris kosong di akhir file tidak diproses.

  • Hive di Amazon EMR mendukung tipe data primitif yang didukung S3 Select. Untuk informasi selengkapnya, lihat Jenis data di Panduan Pengguna Layanan Penyimpanan Sederhana Amazon.

Menentukan S3 Select dalam kode Anda

Untuk menggunakan S3 Select dalam tabel Hive Anda, buat tabel dengan menentukan com.amazonaws.emr.s3select.hive.S3SelectableTextInputFormat sebagai INPUTFORMAT nama kelas, dan tenntukan nilai untuk s3select.format properti menggunakan TBLPROPERTIES klausul.

Secara default, S3 Select dinonaktifkan saat Anda menjalankan kueri. Aktifkan S3 Select dengan mengatur s3select.filter ke true di sesi Hive Anda seperti yang ditunjukkan di bawah ini. Contoh di bawah ini menunjukkan cara menentukan S3 Select saat membuat tabel dari dasar CSV dan JSON file dan kemudian menanyakan tabel menggunakan pernyataan pilih sederhana.

contoh CREATETABLEpernyataan untuk tabel CSV berbasis
CREATE TABLE mys3selecttable ( col1 string, col2 int, col3 boolean ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS INPUTFORMAT 'com.amazonaws.emr.s3select.hive.S3SelectableTextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://path/to/mycsvfile/' TBLPROPERTIES ( "s3select.format" = "csv", "s3select.headerInfo" = "ignore" );
contoh CREATETABLEpernyataan untuk tabel JSON berbasis
CREATE TABLE mys3selecttable ( col1 string, col2 int, col3 boolean ) ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' STORED AS INPUTFORMAT 'com.amazonaws.emr.s3select.hive.S3SelectableTextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://path/to/json/' TBLPROPERTIES ( "s3select.format" = "json" );
contoh SELECTTABLEpernyataan
SET s3select.filter=true; SELECT * FROM mys3selecttable WHERE col2 > 10;