AWSDukungan Glue Data Catalog untuk pekerjaan Spark SQL - AWS Glue

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

AWSDukungan Glue Data Catalog untuk pekerjaan Spark SQL

Katalog Data Glue AWS adalah katalog yang kompatibel dengan metastore Apache Hive. Anda dapat mengonfigurasi AWS Glue pekerjaan dan titik akhir pengembangan untuk menggunakan Katalog Data sebagai metastore Apache Hive eksternal. Anda kemudian dapat langsung menjalankan kueri Apache Spark SQL terhadap tabel yang disimpan dalam Katalog Data. AWS Glueframe dinamis terintegrasi dengan Katalog Data secara default. Namun, dengan fitur ini, tugas Spark SQL dapat mulai menggunakan Katalog Data sebagai metastore Hive eksternal.

Fitur ini memerlukan akses jaringan ke titik akhir AWS Glue API. Untuk AWS Glue pekerjaan dengan koneksi yang terletak di subnet pribadi, Anda harus mengonfigurasi titik akhir VPC atau gateway NAT untuk menyediakan akses jaringan. Untuk informasi tentang mengonfigurasi titik akhir VPC, lihat. Menyiapkan akses jaringan ke penyimpanan data Untuk membuat gateway NAT, lihat Gateway NAT di Panduan Pengguna Amazon VPC.

Anda dapat mengonfigurasi AWS Glue pekerjaan dan titik akhir pengembangan dengan menambahkan "--enable-glue-datacatalog": "" argumen ke argumen pekerjaan dan argumen titik akhir pengembangan masing-masing. Dengan memberikan argumen ini akan menetapkan konfigurasi tertentu di Spark yang memungkinkannya untuk mengakses Katalog Data sebagai metastore Hive eksternal. Ini juga memungkinkan dukungan Hive di SparkSession objek yang dibuat di titik akhir AWS Glue pekerjaan atau pengembangan.

Untuk mengaktifkan akses Katalog Data, berikan tanda centang pada kotak centang Gunakan Katalog Data Glue AWS sebagai Metastore Hive di grup Opsi katalog pada Tambahkan tugas atau Tambahkan titik akhir di konsol. Perhatikan bahwa IAM role yang digunakan untuk tugas atau titik akhir pengembangan harus memiliki izin glue:CreateDatabase. Sebuah basis data dengan nama "default" dibuat dalam Katalog Data jika tidak ada.

Mari kita lihat contoh bagaimana Anda dapat menggunakan fitur ini dalam tugas Spark SQL Anda. Contoh berikut mengasumsikan bahwa Anda telah melakukan perayapan pada set data legislator AS yang tersedia di s3://awsglue-datasets/examples/us-legislators.

Untuk membuat serialisasi/deserialisasi data dari tabel yang didefinisikan dalam Katalog Data AWS Glue, Spark SQL membutuhkan kelas Hive SerDe untuk format yang ditentukan dalam Katalog Data AWS Glue di classpath pekerjaan percikan.

SerDes untuk format umum tertentu didistribusikan olehAWS Glue. Berikut ini adalah link Amazon S3 untuk ini:

Tambahkan JSON SerDe sebagai JAR tambahan ke titik akhir pengembangan. Untuk pekerjaan, Anda dapat menambahkan SerDe menggunakan --extra-jars argumen di bidang argumen. Untuk informasi selengkapnya, lihat AWS Glueparameter pekerjaan.

Berikut adalah contoh masukan JSON untuk membuat titik akhir pengembangan dengan Katalog Data yang diaktifkan untuk Spark SQL.

{ "EndpointName": "Name", "RoleArn": "role_ARN", "PublicKey": "public_key_contents", "NumberOfNodes": 2, "Arguments": { "--enable-glue-datacatalog": "" }, "ExtraJarsS3Path": "s3://crawler-public/json/serde/json-serde.jar" }

Sekarang lakukan kueri pada tabel yang dibuat dari set data legislator AS dengan menggunakan Spark SQL.

>>> spark.sql("use legislators") DataFrame[] >>> spark.sql("show tables").show() +-----------+------------------+-----------+ | database| tableName|isTemporary| +-----------+------------------+-----------+ |legislators| areas_json| false| |legislators| countries_json| false| |legislators| events_json| false| |legislators| memberships_json| false| |legislators|organizations_json| false| |legislators| persons_json| false| +-----------+------------------+-----------+ >>> spark.sql("describe memberships_json").show() +--------------------+---------+-----------------+ | col_name|data_type| comment| +--------------------+---------+-----------------+ | area_id| string|from deserializer| | on_behalf_of_id| string|from deserializer| | organization_id| string|from deserializer| | role| string|from deserializer| | person_id| string|from deserializer| |legislative_perio...| string|from deserializer| | start_date| string|from deserializer| | end_date| string|from deserializer| +--------------------+---------+-----------------+

Jika SerDe kelas untuk format tidak tersedia di classpath pekerjaan, Anda akan melihat kesalahan yang mirip dengan berikut ini.

>>> spark.sql("describe memberships_json").show() Caused by: MetaException(message:java.lang.ClassNotFoundException Class org.openx.data.jsonserde.JsonSerDe not found) at org.apache.hadoop.hive.metastore.MetaStoreUtils.getDeserializer(MetaStoreUtils.java:399) at org.apache.hadoop.hive.ql.metadata.Table.getDeserializerFromMetaStore(Table.java:276) ... 64 more

Untuk hanya melihat organization_id yang berbeda dari tabel memberships, jalankan kueri SQL berikut.

>>> spark.sql("select distinct organization_id from memberships_json").show() +--------------------+ | organization_id| +--------------------+ |d56acebe-8fdc-47b...| |8fa6c3d2-71dc-478...| +--------------------+

Jika Anda perlu melakukan hal yang sama dengan bingkai dinamis, jalankan yang berikut.

>>> memberships = glueContext.create_dynamic_frame.from_catalog(database="legislators", table_name="memberships_json") >>> memberships.toDF().createOrReplaceTempView("memberships") >>> spark.sql("select distinct organization_id from memberships").show() +--------------------+ | organization_id| +--------------------+ |d56acebe-8fdc-47b...| |8fa6c3d2-71dc-478...| +--------------------+

Sementara DynamicFrames dioptimalkan untuk operasi ETL, mengaktifkan Spark SQL untuk mengakses Katalog Data secara langsung menyediakan cara ringkas untuk menjalankan pernyataan SQL yang kompleks atau port aplikasi yang ada.