Penahapan Data dan Tabel dengan Aktivitas Alur - AWS Data Pipeline

AWS Data Pipeline tidak lagi tersedia untuk pelanggan baru. Pelanggan yang sudah ada dari AWS Data Pipeline dapat terus menggunakan layanan seperti biasa. Pelajari selengkapnya

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

Penahapan Data dan Tabel dengan Aktivitas Alur

AWS Data Pipeline dapat menahapkan input dan output data di alur Anda untuk memudahkan penggunaan aktivitas tertentu, seperti ShellCommandActivity dan HiveActivity.

Penahapan data memungkinkan Anda untuk menyalin data dari simpul data input ke sumber daya yang menjalankan aktivitas, dan, sama halnya, dari sumber daya ke simpul data output.

Data bertahap pada sumber daya Amazon EMR atau Amazon EC2 tersedia dengan menggunakan variabel khusus dalam perintah shell aktivitas atau skrip Hive.

Penahapan tabel mirip dengan penahapan data, kecuali data yang ditahapkan berbentuk tabel basis data, khususnya.

AWS Data Pipeline mendukung skenario penahapan berikut:

  • Penahapan data dengan ShellCommandActivity

  • Penahapan tabel dengan Hive dan simpul data yang didukung penahapan

  • Penahapan tabel dengan Hive dan simpul data yang tidak didukung penahapan

catatan

Penahapan hanya berfungsi ketika bidang stage diatur ke true pada suatu aktivitas, seperti ShellCommandActivity. Untuk informasi selengkapnya, lihat ShellCommandActivity.

Selain itu, simpul data dan aktivitas dapat berhubungan dalam empat cara:

Penahapan data secara lokal pada sumber daya

Data input secara otomatis disalin ke sistem file lokal sumber daya. Data output secara otomatis disalin dari sistem file lokal sumber daya ke simpul data output. Misalnya, ketika Anda mengonfigurasi input dan output ShellCommandActivity dengan penahapan = true, data input tersedia sebagai INPUTx_STAGING_DIR dan data output tersedia sebagai OUTPUTx_STAGING_DIR, di mana x adalah jumlah input atau output.

Penahapan definisi input dan output untuk suatu aktivitas

Format data input (nama kolom dan nama tabel) secara otomatis disalin ke sumber daya aktivitas. Misalnya, ketika Anda mengkonfigurasi HiveActivity dengan penahapan = true. Format data yang ditentukan pada input S3DataNode digunakan untuk menentukan definisi tabel dari tabel Hive.

Penahapan tidak diaktifkan

Objek input dan output serta bidangnya tersedia untuk aktivitas, tetapi datanya sendiri tidak tersedia. Misalnya, EmrActivity secara default atau saat Anda mengonfigurasi aktivitas lain dengan penahapan = false. Dalam konfigurasi ini, bidang data tersedia bagi aktivitas untuk membuat referensi ke bidang tersebut menggunakan sintaks ekspresi AWS Data Pipeline, dan ini hanya terjadi jika dependensi terpenuhi. Ini berfungsi sebagai pemeriksaan dependensi saja. Kode dalam aktivitas bertanggung jawab untuk menyalin data dari input ke sumber daya yang menjalankan aktivitas.

Hubungan dependensi antar objek

Ada hubungan tergantung-pada antara dua objek, yang menghasilkan situasi yang sama ketika penahapan tidak diaktifkan. Hal ini menyebabkan simpul data atau aktivitas bertindak sebagai prasyarat untuk eksekusi aktivitas lain.

Pementasan Data dengan ShellCommandActivity

Pertimbangkan skenario menggunakan objek ShellCommandActivity dengan S3DataNode sebagai input dan output data. AWS Data Pipeline secara otomatis menahapkan simpul data untuk membuatnya dapat diakses oleh perintah shell seolah-olah mereka adalah folder file lokal yang menggunakan variabel lingkungan ${INPUT1_STAGING_DIR} dan ${OUTPUT1_STAGING_DIR} seperti yang ditunjukkan dalam contoh berikut. Bagian numerik dari variabel bernama INPUT1_STAGING_DIR dan kenaikan OUTPUT1_STAGING_DIR tergantung pada jumlah simpul data referensi aktivitas Anda.

catatan

Skenario ini hanya berfungsi seperti yang dijelaskan jika input dan output data Anda adalah objek S3DataNode. Selain itu, penahapan data output hanya diperbolehkan jika directoryPath diatur pada objek S3DataNode output.

{ "id": "AggregateFiles", "type": "ShellCommandActivity", "stage": "true", "command": "cat ${INPUT1_STAGING_DIR}/part* > ${OUTPUT1_STAGING_DIR}/aggregated.csv", "input": { "ref": "MyInputData" }, "output": { "ref": "MyOutputData" } }, { "id": "MyInputData", "type": "S3DataNode", "schedule": { "ref": "MySchedule" }, "filePath": "s3://my_bucket/source/#{format(@scheduledStartTime,'YYYY-MM-dd_HHmmss')}/items" } }, { "id": "MyOutputData", "type": "S3DataNode", "schedule": { "ref": "MySchedule" }, "directoryPath": "s3://my_bucket/destination/#{format(@scheduledStartTime,'YYYY-MM-dd_HHmmss')}" } }, ...

Penahapan Tabel dengan Hive dan Simpul Data yang Didukung Penahapan

Pertimbangkan skenario menggunakan objek HiveActivity dengan S3DataNode sebagai input dan output data. AWS Data Pipeline secara otomatis menahapkan simpul data untuk membuatnya dapat diakses oleh skrip Hive seolah-olah mereka adalah tabel Hive yang menggunakan variabel ${input1} dan ${output1} seperti yang ditunjukkan dalam contoh berikut untuk HiveActivity. Bagian numerik dari variabel bernama input dan kenaikan output tergantung pada jumlah simpul data referensi aktivitas Anda.

catatan

Skenario ini hanya berfungsi seperti yang dijelaskan jika input dan output data Anda adalah objek S3DataNode atau MySqlDataNode. Penahapan tabel tidak didukung untuk DynamoDBDataNode.

{ "id": "MyHiveActivity", "type": "HiveActivity", "schedule": { "ref": "MySchedule" }, "runsOn": { "ref": "MyEmrResource" }, "input": { "ref": "MyInputData" }, "output": { "ref": "MyOutputData" }, "hiveScript": "INSERT OVERWRITE TABLE ${output1} select * from ${input1};" }, { "id": "MyInputData", "type": "S3DataNode", "schedule": { "ref": "MySchedule" }, "directoryPath": "s3://test-hive/input" } }, { "id": "MyOutputData", "type": "S3DataNode", "schedule": { "ref": "MySchedule" }, "directoryPath": "s3://test-hive/output" } }, ...

Penahapan Tabel dengan Hive dan Simpul Data yang Tidak Didukung Penahapan

Pertimbangkan skenario menggunakan HiveActivity dengan DynamoDBDataNode sebagai input data dan objek S3DataNode sebagai output. Tidak ada penahapan data yang tersedia untuk DynamoDBDataNode, oleh karena itu Anda harus terlebih dahulu secara manual membuat tabel dalam skrip Hive Anda, menggunakan nama variabel #{input.tableName} untuk merujuk ke tabel DynamoDB. Nomenklatur serupa berlaku jika tabel DynamoDB adalah outputnya, kecuali Anda menggunakan variabel #{output.tableName}. Penahapan tersedia untuk objek S3DataNode output dalam contoh ini, oleh karena itu Anda dapat merujuk ke simpul data output sebagai ${output1}.

catatan

Dalam contoh ini, variabel nama tabel memiliki prefiks karakter # (hash) karena AWS Data Pipeline menggunakan ekspresi untuk mengakses tableName atau directoryPath. Untuk informasi selengkapnya tentang cara kerja evaluasi ekspresi di AWS Data Pipeline, lihat Evaluasi Ekspresi.

{ "id": "MyHiveActivity", "type": "HiveActivity", "schedule": { "ref": "MySchedule" }, "runsOn": { "ref": "MyEmrResource" }, "input": { "ref": "MyDynamoData" }, "output": { "ref": "MyS3Data" }, "hiveScript": "-- Map DynamoDB Table SET dynamodb.endpoint=dynamodb.us-east-1.amazonaws.com; SET dynamodb.throughput.read.percent = 0.5; CREATE EXTERNAL TABLE dynamodb_table (item map<string,string>) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ("dynamodb.table.name" = "#{input.tableName}"); INSERT OVERWRITE TABLE ${output1} SELECT * FROM dynamodb_table;" }, { "id": "MyDynamoData", "type": "DynamoDBDataNode", "schedule": { "ref": "MySchedule" }, "tableName": "MyDDBTable" }, { "id": "MyS3Data", "type": "S3DataNode", "schedule": { "ref": "MySchedule" }, "directoryPath": "s3://test-hive/output" } }, ...