Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
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:
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
Untuk mengkonfigurasi Katalog Data, pilih jenis aplikasi EMR Tanpa Server yang ingin Anda gunakan.
- Spark
-
Saat Anda menggunakan EMR Studio untuk menjalankan pekerjaan Anda dengan aplikasi EMR Serverless Spark, Katalog Data AWS Glue adalah metastore default.
Saat Anda menggunakan SDKs atau AWS CLI, Anda dapat mengatur spark.hadoop.hive.metastore.client.factory.class
konfigurasi ke com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory
dalam sparkSubmit
parameter menjalankan pekerjaan Anda. Contoh berikut menunjukkan cara mengkonfigurasi Katalog Data dengan AWS CLI.
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
/code/pyspark/extreme_weather.py",
"sparkSubmitParameters": "--conf spark.hadoop.hive.metastore.client.factory.class=com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory --conf spark.driver.cores=1 --conf spark.driver.memory=3g --conf spark.executor.cores=4 --conf spark.executor.memory=3g"
}
}'
Atau, Anda dapat mengatur konfigurasi ini ketika Anda membuat yang baru SparkSession
dalam kode Spark Anda.
from pyspark.sql import SparkSession
spark = (
SparkSession.builder.appName("SparkSQL")
.config(
"spark.hadoop.hive.metastore.client.factory.class",
"com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory",
)
.enableHiveSupport()
.getOrCreate()
)
# we can query tables with SparkSQL
spark.sql("SHOW TABLES").show()
# we can also them with native Spark
print(spark.catalog.listTables())
- Hive
-
Untuk aplikasi EMR Serverless Hive, Katalog Data adalah metastore default. Artinya, ketika Anda menjalankan pekerjaan pada aplikasi EMR Serverless Hive, Hive mencatat informasi metastore dalam Katalog Data sama dengan aplikasi Anda. Akun AWS Anda tidak memerlukan virtual private cloud (VPC) untuk menggunakan Katalog Data sebagai metastore Anda.
Untuk mengakses tabel metastore Hive, tambahkan kebijakan Glue yang diperlukan yang diuraikan dalam Menyiapkan Izin IAM untuk AWS 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 Katalog Data AWS Glue yang Anda ingin pekerjaan EMR Tanpa Server Anda berjalan untuk mengakses.
-
Pastikan administrator atau identitas resmi lainnya AccountB
melampirkan kebijakan sumber daya ke Katalog Data diAccountB
. Kebijakan ini memberikan izin lintas akun AccountA
tertentu untuk melakukan operasi pada sumber daya dalam katalog. AccountB
- JSON
-
-
{
"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:*:123456789012:catalog"
],
"Sid": "AllowGLUEGetdatabase"
}
]
}
-
Tambahkan kebijakan IAM ke peran runtime pekerjaan EMR Tanpa Server sehingga peran dapat mengakses sumber daya Katalog Data AccountA
di. AccountB
- JSON
-
-
{
"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:*:123456789012:catalog"
],
"Sid": "AllowGLUEGetdatabase"
}
]
}
-
Mulai menjalankan pekerjaan Anda. Langkah ini sedikit berbeda tergantung pada jenis aplikasi AccountA
EMR Serverless.
- Spark
-
Lulus spark.hadoop.hive.metastore.glue.catalogid
properti di sparkSubmitParameters
seperti yang ditunjukkan pada contoh berikut. Ganti AccountB-catalog-id
dengan ID Katalog Data diAccountB
.
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/test.py",
"sparkSubmitParameters": "--conf spark.hadoop.hive.metastore.client.factory.class=com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory --conf spark.hadoop.hive.metastore.glue.catalogid=AccountB-catalog-id
--conf spark.executor.cores=1 --conf spark.executor.memory=1g --conf spark.driver.cores=1 --conf spark.driver.memory=1g --conf spark.executor.instances=1"
}
}' \
--configuration-overrides '{
"monitoringConfiguration": {
"s3MonitoringConfiguration": {
"logUri": "s3://amzn-s3-demo-bucket
/logs/"
}
}
}'
- Hive
-
Tetapkan hive.metastore.glue.catalogid
properti dalam hive-site
klasifikasi seperti yang ditunjukkan pada contoh berikut. Ganti AccountB-catalog-id
dengan ID Katalog Data diAccountB
.
aws emr-serverless start-job-run \
--application-id "application-id
" \
--execution-role-arn "job-role-arn
" \
--job-driver '{
"hive": {
"query": "s3://amzn-s3-demo-bucket
/hive/scripts/create_table.sql",
"parameters": "--hiveconf hive.exec.scratchdir=s3://amzn-s3-demo-bucket
/hive/scratch --hiveconf hive.metastore.warehouse.dir=s3://amzn-s3-demo-bucket
/hive/warehouse"
}
}' \
--configuration-overrides '{
"applicationConfiguration": [{
"classification": "hive-site",
"properties": {
"hive.metastore.glue.catalogid": "AccountB-catalog-id
"
}
}]
}'
Anda dapat menambahkan tambahan JARs dengan ADD JAR
skrip Hive Anda. Untuk pertimbangan tambahan, lihat Pertimbangan saat menggunakan AWS Glue Data Catalog.