Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Konfigurasi metastore
Metastore Hive adalah lokasi terpusat yang menyimpan informasi struktural tentang tabel Anda, termasuk skema, nama partisi, dan tipe data. Dengan EMR Tanpa Server, Anda dapat mempertahankan metadata tabel ini dalam metastore yang memiliki akses ke pekerjaan Anda.
Anda memiliki dua opsi untuk metastore Hive:
-
Katalog Data AWS Glue
-
Metastore Apache Hive eksternal
Menggunakan Katalog Data AWS Glue sebagai metastore
Anda dapat mengonfigurasi pekerjaan Spark dan Hive Anda untuk menggunakan Katalog Data AWS Glue sebagai metastore. Kami merekomendasikan konfigurasi ini ketika Anda memerlukan metastore persisten atau metastore yang dibagikan oleh berbagai aplikasi, layanan, atau. Akun AWS Untuk informasi selengkapnya tentang Katalog Data, lihat Mengisi Katalog Data AWS Glue. Untuk informasi tentang harga AWS Glue, lihat harga AWS Glue
Anda dapat mengonfigurasi pekerjaan EMR Tanpa Server Anda untuk menggunakan Katalog Data AWS Glue baik yang Akun AWS sama dengan aplikasi Anda, atau yang berbeda. Akun AWS
Konfigurasikan Katalog Data AWS Glue
Untuk mengkonfigurasi Katalog Data, pilih jenis aplikasi EMR Tanpa Server yang ingin Anda gunakan.
Konfigurasikan akses lintas akun untuk Katalog EMR Data Tanpa Server dan Glue AWS
Untuk mengatur akses lintas akun untuk EMR Tanpa Server, Anda harus terlebih dahulu masuk ke yang berikut: Akun AWS
-
AccountA
— Akun AWS Tempat Anda telah membuat aplikasi EMR Tanpa Server. -
AccountB
— Sebuah Akun AWS yang berisi AWS Glue Data Catalog yang Anda ingin pekerjaan EMR Serverless Anda berjalan untuk mengakses.
-
Pastikan administrator atau identitas resmi lainnya
AccountB
melampirkan kebijakan sumber daya ke Katalog Data diAccountB
. Kebijakan ini memberikan izin lintas akunAccountA
tertentu untuk melakukan operasi pada sumber daya dalam katalog.AccountB
{ "Version" : "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Principal": { "AWS": [ "arn:aws:iam::
accountA
:role/job-runtime-role-A" ]}, "Action" : [ "glue:GetDatabase", "glue:CreateDatabase", "glue:GetDataBases", "glue:CreateTable", "glue:GetTable", "glue:UpdateTable", "glue:DeleteTable", "glue:GetTables", "glue:GetPartition", "glue:GetPartitions", "glue:CreatePartition", "glue:BatchCreatePartition", "glue:GetUserDefinedFunctions" ], "Resource": ["arn:aws:glue:region:AccountB
:catalog"] } ] } -
Tambahkan IAM kebijakan ke peran runtime pekerjaan EMR Tanpa Server
AccountA
agar peran tersebut dapat mengakses sumber daya Katalog Data di.AccountB
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:CreateDatabase", "glue:GetDataBases", "glue:CreateTable", "glue:GetTable", "glue:UpdateTable", "glue:DeleteTable", "glue:GetTables", "glue:GetPartition", "glue:GetPartitions", "glue:CreatePartition", "glue:BatchCreatePartition", "glue:GetUserDefinedFunctions" ], "Resource": ["arn:aws:glue:
region:AccountB
:catalog"] } ] } -
Mulai menjalankan pekerjaan Anda. Langkah ini sedikit berbeda tergantung pada
AccountA
jenis aplikasi EMR Tanpa Server.
Pertimbangan saat menggunakan Katalog Data AWS Glue
Anda dapat menambahkan tambahan JARs dengan ADD JAR
skrip Hive Anda. Untuk pertimbangan tambahan, lihat Pertimbangan saat menggunakan AWS Glue Data Catalog.
Menggunakan metastore Hive eksternal
Anda dapat mengonfigurasi pekerjaan Spark dan Hive EMR Tanpa Server untuk terhubung ke metastore Hive eksternal, seperti Amazon Aurora atau Amazon for My. RDS SQL Bagian ini menjelaskan cara menyiapkan metastore Amazon RDS Hive, mengonfigurasiVPC, dan mengonfigurasi pekerjaan EMR Tanpa Server untuk menggunakan metastore eksternal.
Buat metastore Hive eksternal
-
Buat Amazon Virtual Private Cloud (AmazonVPC) dengan subnet pribadi dengan mengikuti petunjuk di Buat VPC.
-
Buat aplikasi EMR Tanpa Server Anda dengan Amazon baru VPC dan subnet pribadi Anda. Ketika Anda mengkonfigurasi aplikasi EMR Serverless Anda dengan aVPC, pertama-tama menyediakan sebuah elastic network interface untuk setiap subnet yang Anda tentukan. Kemudian melampirkan grup keamanan yang Anda tentukan ke antarmuka jaringan itu. Ini memberikan kontrol akses aplikasi Anda. Untuk detail selengkapnya tentang cara mengaturVPC, lihatMengkonfigurasi akses VPC.
-
Buat SQL database My SQL atau Aurora Postgre di subnet pribadi di Amazon Anda. VPC Untuk informasi tentang cara membuat RDS database Amazon, lihat Membuat instans Amazon RDS DB.
-
Ubah grup keamanan database Saya SQL atau Aurora Anda untuk mengizinkan JDBC koneksi dari grup keamanan EMR Tanpa Server Anda dengan mengikuti langkah-langkah dalam Memodifikasi instans Amazon DB. RDS Tambahkan aturan untuk lalu lintas masuk ke grup RDS keamanan dari salah satu grup keamanan EMR Tanpa Server Anda.
Tipe Protokol Rentang port Sumber Semua TCP
TCP
3306
emr-serverless-security-group
Konfigurasikan opsi Spark
Menggunakan JDBC
Untuk mengonfigurasi aplikasi EMR Serverless Spark agar terhubung ke metastore Hive berdasarkan instans Amazon for RDS My atau SQL Amazon Aurora My, gunakan koneksi. SQL JDBC Lewati mariadb-connector-java.jar
dengan --jars
dalam spark-submit
parameter lari pekerjaan Anda.
aws emr-serverless start-job-run \ --application-id "
application-id
" \ --execution-role-arn "job-role-arn
" \ --job-driver '{ "sparkSubmit": { "entryPoint": "s3://amzn-s3-demo-bucket
/scripts/spark-jdbc.py", "sparkSubmitParameters": "--jars s3://amzn-s3-demo-bucket
/mariadb-connector-java.jar --conf spark.hadoop.javax.jdo.option.ConnectionDriverName=org.mariadb.jdbc.Driver --conf spark.hadoop.javax.jdo.option.ConnectionUserName=<connection-user-name> --conf spark.hadoop.javax.jdo.option.ConnectionPassword=<connection-password> --conf spark.hadoop.javax.jdo.option.ConnectionURL=<JDBC-Connection-string> --conf spark.driver.cores=2 --conf spark.executor.memory=10G --conf spark.driver.memory=6G --conf spark.executor.cores=4" } }' \ --configuration-overrides '{ "monitoringConfiguration": { "s3MonitoringConfiguration": { "logUri": "s3://amzn-s3-demo-bucket
/spark/logs/" } } }'
Contoh kode berikut adalah skrip entrypoint Spark yang berinteraksi dengan metastore Hive di Amazon. RDS
from os.path import expanduser, join, abspath from pyspark.sql import SparkSession from pyspark.sql import Row # warehouse_location points to the default location for managed databases and tables warehouse_location = abspath('spark-warehouse') spark = SparkSession \ .builder \ .config("spark.sql.warehouse.dir", warehouse_location) \ .enableHiveSupport() \ .getOrCreate() spark.sql("SHOW DATABASES").show() spark.sql("CREATE EXTERNAL TABLE `sampledb`.`sparknyctaxi`(`dispatching_base_num` string, `pickup_datetime` string, `dropoff_datetime` string, `pulocationid` bigint, `dolocationid` bigint, `sr_flag` bigint) STORED AS PARQUET LOCATION 's3://<s3 prefix>/nyctaxi_parquet/'") spark.sql("SELECT count(*) FROM sampledb.sparknyctaxi").show() spark.stop()
Menggunakan layanan hemat
Anda dapat mengonfigurasi aplikasi EMR Serverless Hive untuk terhubung ke metastore Hive berdasarkan instans Amazon for RDS My atau SQL Amazon Aurora My. SQL Untuk melakukan ini, jalankan server penghematan pada node master dari cluster Amazon EMR yang ada. Opsi ini sangat ideal jika Anda sudah memiliki EMR cluster Amazon dengan server hemat yang ingin Anda gunakan untuk menyederhanakan konfigurasi pekerjaan Tanpa EMR Server Anda.
aws emr-serverless start-job-run \ --application-id "
application-id
" \ --execution-role-arn "job-role-arn
" \ --job-driver '{ "sparkSubmit": { "entryPoint": "s3://amzn-s3-demo-bucket
/thriftscript.py", "sparkSubmitParameters": "--jars s3://amzn-s3-demo-bucket
/mariadb-connector-java.jar --conf spark.driver.cores=2 --conf spark.executor.memory=10G --conf spark.driver.memory=6G --conf spark.executor.cores=4" } }' \ --configuration-overrides '{ "monitoringConfiguration": { "s3MonitoringConfiguration": { "logUri": "s3://amzn-s3-demo-bucket
/spark/logs/" } } }'
Contoh kode berikut adalah entrypoint script (thriftscript.py
) yang menggunakan protokol hemat untuk terhubung ke metastore Hive. Perhatikan bahwa hive.metastore.uris
properti perlu disetel untuk membaca dari metastore Hive eksternal.
from os.path import expanduser, join, abspath from pyspark.sql import SparkSession from pyspark.sql import Row # warehouse_location points to the default location for managed databases and tables warehouse_location = abspath('spark-warehouse') spark = SparkSession \ .builder \ .config("spark.sql.warehouse.dir", warehouse_location) \ .config("hive.metastore.uris","thrift://
thrift-server-host
:thift-server-port
") \ .enableHiveSupport() \ .getOrCreate() spark.sql("SHOW DATABASES").show() spark.sql("CREATE EXTERNAL TABLE sampledb.`sparknyctaxi`( `dispatching_base_num` string, `pickup_datetime` string, `dropoff_datetime` string, `pulocationid` bigint, `dolocationid` bigint, `sr_flag` bigint) STORED AS PARQUET LOCATION 's3://<s3 prefix>/nyctaxi_parquet/'") spark.sql("SELECT * FROM sampledb.sparknyctaxi").show() spark.stop()
Konfigurasikan opsi Hive
Menggunakan JDBC
Jika Anda ingin menentukan lokasi database Hive eksternal pada instans Amazon RDS My SQL atau Amazon Aurora, Anda dapat mengganti konfigurasi metastore default.
catatan
Di Hive, Anda dapat melakukan beberapa penulisan ke tabel metastore secara bersamaan. Jika Anda berbagi informasi metastore antara dua pekerjaan, pastikan Anda tidak menulis ke tabel metastore yang sama secara bersamaan kecuali Anda menulis ke partisi yang berbeda dari tabel metastore yang sama.
Atur konfigurasi berikut dalam hive-site
klasifikasi untuk mengaktifkan metastore Hive eksternal.
{ "classification": "hive-site", "properties": { "hive.metastore.client.factory.class": "org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClientFactory", "javax.jdo.option.ConnectionDriverName": "org.mariadb.jdbc.Driver", "javax.jdo.option.ConnectionURL": "jdbc:mysql://
db-host
:db-port
/db-name
", "javax.jdo.option.ConnectionUserName": "username
", "javax.jdo.option.ConnectionPassword": "password
" } }
Menggunakan server penghematan
Anda dapat mengonfigurasi aplikasi EMR Serverless Hive Anda untuk terhubung ke metastore Hive berdasarkan Amazon untuk RDS My atau SQL Amazon Aurora M. ySQLinstance Untuk melakukan ini, jalankan server barang bekas di node utama cluster Amazon EMR yang ada. Opsi ini sangat ideal jika Anda sudah memiliki EMR cluster Amazon yang menjalankan server barang bekas dan Anda ingin menggunakan konfigurasi pekerjaan Tanpa EMR Server Anda.
Atur konfigurasi berikut dalam hive-site
klasifikasi sehingga EMR Tanpa Server dapat mengakses metastore penghematan jarak jauh. Perhatikan bahwa Anda harus mengatur hive.metastore.uris
properti untuk dibaca dari metastore Hive eksternal.
{ "classification": "hive-site", "properties": { "hive.metastore.client.factory.class": "org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClientFactory", "hive.metastore.uris": "thrift://
thrift-server-host
:thirft-server-port
" } }
Pertimbangan saat menggunakan metastore eksternal
-
Anda dapat mengonfigurasi database yang kompatibel dengan JDBC MariaDB sebagai metastore Anda. Contoh database ini adalah RDS untuk MariaDB, My, SQL dan Amazon Aurora.
-
Metastores tidak diinisialisasi secara otomatis. Jika metastore Anda tidak diinisialisasi dengan skema untuk versi Hive Anda, gunakan Hive Schema Tool.
-
EMRTanpa server tidak mendukung otentikasi Kerberos. Anda tidak dapat menggunakan server metastore barang bekas dengan otentikasi Kerberos dengan pekerjaan Serverless Spark atau Hive. EMR