

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

# Konfigurasi metastore untuk EMR Tanpa Server
<a name="metastore-config"></a>

*Metastore Hive* adalah lokasi terpusat yang menyimpan informasi struktural tentang tabel Anda, termasuk skema, nama partisi, dan tipe data. Dengan EMR Tanpa Server, pertahankan 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
<a name="glue-metastore"></a>

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 lebih lanjut tentang Katalog Data, lihat [Mengisi Katalog Data AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/populate-data-catalog.html). Untuk informasi tentang harga AWS Glue, lihat [harga AWS Glue](https://aws.amazon.com/glue/pricing).

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
<a name="glue-metastore-configure"></a>

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.

Bila Anda menggunakan SDKs atau AWS CLI, atur `spark.hadoop.hive.metastore.client.factory.class` konfigurasi ke `com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory` dalam `sparkSubmit` parameter job run 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](https://docs.aws.amazon.com/glue/latest/dg/getting-started-access.html) untuk AWS Glue. AWS 

------

### Konfigurasikan akses lintas akun untuk EMR Serverless AWS dan Glue Data Catalog
<a name="glue-metastore-cross-account"></a>

Untuk mengatur akses lintas akun untuk EMR Tanpa Server, pertama-tama 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. 

1. Pastikan administrator atau identitas resmi lainnya `AccountB` melampirkan kebijakan sumber daya ke Katalog Data di`AccountB`. 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"
       }
     ]
   }
   ```

------

1. 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"
       }
     ]
   }
   ```

------

1.  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 di`AccountB`.

   ```
   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 di`AccountB`.

   ```
   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"
           }
       }]
   }'
   ```

------

### Pertimbangan saat menggunakan Katalog Data AWS Glue
<a name="glue-metastore-considerations"></a>

Anda dapat menambahkan tambahan JARs dengan `ADD JAR` skrip Hive Anda. Untuk pertimbangan tambahan, lihat [Pertimbangan saat menggunakan AWS Glue Data](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-hive-metastore-glue.html#emr-hive-glue-considerations-hive) Catalog. 