Transfer dari HDFS ke Cloud Storage

Storage Transfer Service mendukung transfer dari sumber Hadoop Distributed File System (HDFS) cloud dan lokal.

Transfer dari HDFS harus menggunakan Cloud Storage sebagai tujuan.

Kasus penggunaan mencakup migrasi dari penyimpanan lokal ke Cloud Storage, mengarsipkan data untuk mengosongkan ruang penyimpanan lokal, mereplikasi data ke Google Cloud untuk kelangsungan bisnis, atau mentransfer data ke Google Cloud untuk dianalisis dan diproses.

Konfigurasikan izin

Sebelum membuat transfer, Anda harus mengonfigurasi izin untuk entitas berikut:

Akun pengguna yang digunakan untuk melakukan transfer. Akun ini digunakan untuk login ke Google Cloud Console, atau akun yang ditentukan saat melakukan autentikasi ke CLI `gcloud`. Akun pengguna dapat berupa akun pengguna biasa, atau akun layanan yang dikelola pengguna.
Akun layanan yang dikelola Google, juga dikenal sebagai agen layanan, yang digunakan oleh Storage Transfer Service. Akun ini biasanya diidentifikasi dengan alamat emailnya yang menggunakan format project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com.
Akun agen transfer yang memberikan izin Google Cloud untuk agen transfer. Akun agen transfer menggunakan kredensial pengguna yang menginstalnya, atau kredensial akun layanan yang dikelola pengguna, untuk mengautentikasi.

Lihat Izin transfer berbasis agen untuk mengetahui petunjuknya.

Menginstal agen ke dalam kumpulan agen

Transfer berbasis agen menggunakan agen software untuk mengatur transfer. Agen ini harus diinstal di satu atau beberapa komputer yang memiliki akses ke sistem file Anda. Agen harus memiliki akses ke namenode, semua datanode, Hadoop Key Management Server (KMS), dan Kerberos Key Distribution Center (KDC).

Agen transfer bekerja sama dalam kumpulan agen. Peningkatan jumlah agen dapat meningkatkan performa pekerjaan secara keseluruhan, tetapi hal ini bergantung pada beberapa faktor.

  • Penambahan lebih banyak agen dapat membantu Anda, hingga sekitar setengah jumlah node dalam cluster HDFS Anda. Misalnya, dengan cluster 30 node, peningkatan dari 5 menjadi 15 agen akan meningkatkan performa, tetapi di atas 15 node tidak akan membuat banyak perbedaan.

  • Untuk cluster HDFS kecil, satu agen mungkin cukup.

  • Agen tambahan cenderung memiliki dampak yang lebih besar terhadap performa jika transfer menyertakan sejumlah besar file kecil. Storage Transfer Service mencapai throughput yang tinggi dengan memparalelkan tugas transfer di antara beberapa agen. Makin banyak file dalam beban kerja, makin banyak manfaat yang diperoleh dengan menambahkan lebih banyak agen.

Jangan sertakan informasi sensitif seperti informasi identitas pribadi (PII) atau data keamanan di nama kumpulan agen atau awalan ID agen Anda. Nama resource dapat diterapkan ke nama resource Google Cloud lainnya dan dapat diekspos ke sistem internal Google di luar project Anda.

Membuat kumpulan agen

Buat kumpulan agen. Gunakan akun pengguna Simbol akun pengguna untuk tindakan ini.

Instal agen

Instal agen ke dalam kumpulan agen. Gunakan akun agen transfer untuk tindakan ini.

Konsol Google Cloud

  1. Di konsol Google Cloud, buka halaman Agent pool.

    Buka Agent pool

  2. Pilih kumpulan agen tempat akan menambahkan agen baru.

  3. Klik Instal agen.

  4. Ikuti petunjuk untuk menginstal dan menjalankan agen.

    Untuk mengetahui informasi selengkapnya tentang opsi command line agen, lihat Opsi command line agen.

gcloud CLI

Untuk menginstal satu atau beberapa agen menggunakan gcloud CLI, jalankan gcloud transfer agents install:

gcloud transfer agents install --pool=POOL_NAME \
  --count=NUM_AGENTS \
  --mount-directories=MOUNT_DIRECTORIES \
  --hdfs-namenode-uri=HDFS_NAMENODE_URI \
  --hdfs-username=HDFS_USERNAME \
  --hdfs-data-transfer-protection=HDFS_DATA_TRANSFER_PROTECTION \
  --kerberos-config-file=KERBEROS_CONFIG_FILE \
  --kerberos-keytab-file=KERBEROS_KEYTAB_FILE \
  --kerberos-user-principal=KERBEROS_USER_PRINCIPAL \
  --kerberos-service-principal=KERBEROS_SERVICE_PRINCIPAL \

Dengan keterangan:

  • --hdfs-namenode-uri menentukan cluster HDFS yang mencakup skema, namenode, dan port, dalam format URI. Contoh:

    • rpc://my-namenode:8020
    • http://my-namenode:9870

    Gunakan HTTP atau HTTPS untuk WebHDFS. Jika tidak ada skema yang diberikan, kami menganggap RPC. Jika tidak ada port yang diberikan, default-nya adalah 8020 untuk RPC, 9870 untuk HTTP, dan 9871 untuk HTTPS. Misalnya, my-namenode input menjadi rpc://my-namenode:8020.

    Jika cluster Anda dikonfigurasi dengan beberapa node nama, tentukan node utama saat ini. Lihat Cluster dengan beberapa node nama untuk mengetahui informasi selengkapnya.

  • --hdfs-username adalah nama pengguna untuk terhubung ke cluster HDFS dengan autentikasi sederhana. Hapus flag ini jika Anda mengautentikasi dengan Kerberos, atau jika Anda terhubung tanpa autentikasi apa pun.

  • --hdfs-data-transfer-protection (opsional) adalah setelan kualitas perlindungan sisi klien (QOP) untuk cluster Kerberized. Nilainya tidak boleh lebih ketat daripada nilai QOP sisi server. Nilai yang valid adalah: authentication, integrity, dan privacy.

Jika Anda mengautentikasi dengan Kerberos, sertakan juga flag berikut:

  • --kerberos-config-file adalah jalur ke file konfigurasi Kerberos. Misalnya, --kerberos-config-file=/etc/krb5.conf.

  • --kerberos-user-principal adalah akun utama pengguna Kerberos yang akan digunakan. Misalnya, --kerberos-user-principal=user1.

  • --kerberos-keytab-file adalah jalur ke file Keytab yang berisi akun utama pengguna yang ditentukan dengan tanda --kerberos-user-principal. Contohnya, --kerberos-keytab-file=/home/me/kerberos/user1.keytab.

  • --kerberos-service-principal adalah akun utama layanan Kerberos yang akan digunakan, dengan format <primary>/<instance>. Realm dipetakan dari file konfigurasi Kerberos Anda; realm yang disediakan akan diabaikan. Jika tanda ini tidak ditentukan, defaultnya adalah hdfs/<namenode_fqdn> dengan <namenode_fqdn> adalah nama domain yang sepenuhnya memenuhi syarat yang ditentukan dalam file konfigurasi.

    Misalnya, --kerberos-service-principal=hdfs/my-namenode.a.example.com.

Alat ini akan memandu Anda melakukan langkah-langkah yang diperlukan untuk menginstal agen. Perintah ini menginstal agen NUM_AGENTS di komputer Anda, memetakan ke nama kumpulan yang ditentukan sebagai POOL_NAME, dan mengautentikasi agen menggunakan kredensial gcloud Anda. Nama kumpulan harus ada, atau error akan ditampilkan.

Flag --mount-directories bersifat opsional, tetapi sangat direkomendasikan. Nilainya adalah daftar direktori yang dipisahkan koma pada sistem file yang akan diberikan akses agen. Jika flag ini tidak ada, seluruh sistem file akan dipasang ke container agen. Lihat referensi gcloud untuk mengetahui detail selengkapnya.

docker run

Sebelum menggunakan docker run untuk menginstal agen, ikuti petunjuk untuk menginstal Docker.

Perintah docker run menginstal satu agen. Untuk menambah jumlah agen di kumpulan Anda, jalankan kembali perintah ini sebanyak yang diperlukan.

Tanda perintah yang diperlukan bergantung pada jenis autentikasi yang Anda gunakan.

Kerberos

Untuk melakukan autentikasi ke sistem file menggunakan Kerberos, gunakan perintah berikut:

sudo docker run -d --ulimit memlock=64000000 --rm \
  --network=host \
  -v /:/transfer_root \
  gcr.io/cloud-ingest/tsop-agent:latest \
  --enable-mount-directory \
  --project-id=${PROJECT_ID} \
  --hostname=$(hostname) \
  --creds-file="service_account.json" \
  --agent-pool=${AGENT_POOL_NAME} \
  --hdfs-namenode-uri=cluster-namenode \
  --kerberos-config-file=/etc/krb5.conf \
  --kerberos-user-principal=user \
  --kerberos-keytab-file=/path/to/folder.keytab

Dengan keterangan:

  • --network=host harus dihilangkan jika Anda menjalankan lebih dari satu agen di komputer ini.
  • --hdfs-namenode-uri: Skema, namenode, dan port, dalam format URI, yang mewakili cluster HDFS. Contoh:

    • rpc://my-namenode:8020
    • http://my-namenode:9870

Gunakan HTTP atau HTTPS untuk WebHDFS. Jika tidak ada skema yang diberikan, kami menganggap RPC. Jika tidak ada port yang diberikan, default-nya adalah 8020 untuk RPC, 9870 untuk HTTP, dan 9871 untuk HTTPS. Misalnya, my-namenode input menjadi rpc://my-namenode:8020.

Jika cluster Anda dikonfigurasi dengan beberapa node nama, tentukan node utama saat ini. Lihat Cluster dengan beberapa node nama untuk mengetahui informasi selengkapnya.

  • --kerberos-config-file: Jalur ke file konfigurasi Kerberos. Defaultnya adalah /etc/krb5.conf.
  • --kerberos-user-principal: Akun utama pengguna Kerberos.
  • --kerberos-keytab-file: Jalur ke file Keytab yang berisi akun utama pengguna yang ditentukan dengan --kerberos-user-principal.
  • --kerberos-service-principal: Akun utama layanan Kerberos yang akan digunakan, dari formulir 'service/instance'. Realm dipetakan dari file konfigurasi Kerberos Anda; setiap realm yang disediakan akan diabaikan. Jika tanda ini tidak ditentukan, defaultnya adalah hdfs/<namenode_fqdn> dengan fqdn adalah nama domain yang sepenuhnya memenuhi syarat.

Autentikasi sederhana

Untuk mengautentikasi ke sistem file Anda menggunakan autentikasi sederhana:

sudo docker run -d --ulimit memlock=64000000 --rm \
  --network=host \
  -v /:/transfer_root \
  gcr.io/cloud-ingest/tsop-agent:latest \
  --enable-mount-directory \
  --project-id=${PROJECT_ID} \
  --hostname=$(hostname) \
  --creds-file="${CREDS_FILE}" \
  --agent-pool="${AGENT_POOL_NAME}" \
  --hdfs-namenode-uri=cluster-namenode \
  --hdfs-username="${USERNAME}"

Dengan keterangan:

  • --hdfs-username: Nama pengguna yang akan digunakan saat menghubungkan ke cluster HDFS menggunakan autentikasi sederhana.
  • --hdfs-namenode-uri: Skema, namenode, dan port, dalam format URI, yang mewakili cluster HDFS. Misalnya:
    • rpc://my-namenode:8020
    • http://my-namenode:9870

Gunakan HTTP atau HTTPS untuk WebHDFS. Jika tidak ada skema yang diberikan, kami menganggap RPC. Jika tidak ada port yang diberikan, defaultnya adalah 8020 untuk RPC, 9870 untuk HTTP, dan 9871 untuk HTTPS. Misalnya, my-namenode input menjadi rpc://my-namenode:8020.

Jika cluster Anda dikonfigurasi dengan beberapa node nama, tentukan node utama saat ini. Lihat Cluster dengan beberapa node nama untuk mengetahui informasi selengkapnya.

Tidak ada autentikasi

Untuk terhubung ke sistem file tanpa autentikasi:

sudo docker run -d --ulimit memlock=64000000 --rm \
  --network=host \
  -v /:/transfer_root \
  gcr.io/cloud-ingest/tsop-agent:latest \
  --enable-mount-directory \
  --project-id=${PROJECT_ID} \
  --hostname=$(hostname) \
  --creds-file="${CREDS_FILE}" \
  --agent-pool="${AGENT_POOL_NAME}" \
  --hdfs-namenode-uri=cluster-namenode \

Dengan keterangan:

  • --hdfs-namenode-uri: Skema, namenode, dan port, dalam format URI, yang mewakili cluster HDFS. Misalnya:
    • rpc://my-namenode:8020
    • http://my-namenode:9870

Gunakan HTTP atau HTTPS untuk WebHDFS. Jika tidak ada skema yang diberikan, kami menganggap RPC. Jika tidak ada port yang diberikan, defaultnya adalah 8020 untuk RPC, 9870 untuk HTTP, dan 9871 untuk HTTPS. Misalnya, my-namenode input menjadi rpc://my-namenode:8020.

Jika cluster Anda dikonfigurasi dengan beberapa node nama, tentukan node utama saat ini. Lihat Cluster dengan beberapa node nama untuk mengetahui informasi selengkapnya.

Opsi transfer

Fitur Storage Transfer Service berikut tersedia untuk transfer dari HDFS ke Cloud Storage.

File yang ditransfer dari HDFS tidak mempertahankan metadata-nya.

Buat transfer

Jangan sertakan informasi sensitif seperti informasi identitas pribadi (PII) atau data keamanan dalam nama tugas transfer Anda. Nama resource dapat diterapkan ke nama resource Google Cloud lainnya dan dapat diekspos ke sistem internal Google di luar project Anda.

Storage Transfer Service menyediakan beberapa antarmuka yang digunakan untuk membuat transfer.

Konsol Google Cloud

  1. Buka halaman Storage Transfer Service di Konsol Google Cloud.

    Buka Storage Transfer Service

  2. Klik Buat tugas transfer. Halaman Buat tugas transfer akan ditampilkan.

  3. Pilih Hadoop Distributed File System sebagai Source type. Tujuan harus berupa Google Cloud Storage.

    Klik Langkah berikutnya.

Mengonfigurasi sumber

  1. Tentukan informasi yang diperlukan untuk transfer ini:

    1. Pilih kumpulan agen yang Anda konfigurasi untuk transfer ini.

    2. Masukkan Jalur asal transfer, sesuai dengan direktori root.

  2. Jika ingin, tentukan filter apa pun yang akan diterapkan pada data sumber.

  3. Klik Langkah berikutnya.

Mengonfigurasi sink Anda

  1. Pada kolom Bucket or folder, masukkan bucket tujuan dan nama folder (opsional), atau klik Browse untuk memilih bucket dari daftar bucket yang ada di project saat ini. Untuk membuat bucket baru, klik Ikon bucket Buat bucket baru.

  2. Klik Langkah berikutnya.

Menjadwalkan transfer

Anda dapat menjadwalkan transfer agar berjalan satu kali saja, atau mengonfigurasi transfer berulang.

Klik Langkah berikutnya.

Pilih setelan transfer

  1. Di kolom Description, masukkan deskripsi transfer. Sebagai praktik terbaik, masukkan deskripsi yang bermakna dan unik sehingga Anda dapat membedakan tugas.

  2. Di bagian Metadata options, pilih kelas penyimpanan Cloud Storage Anda, dan apakah akan menyimpan waktu pembuatan setiap objek atau tidak. Baca Preservasi metadata untuk mengetahui detailnya.

  3. Di bagian Kapan harus menimpa, pilih salah satu opsi berikut:

    • Jangan pernah: Jangan menimpa file tujuan. Jika ada file dengan nama yang sama, file tersebut tidak akan ditransfer.

    • Jika berbeda: Menimpa file tujuan jika file sumber dengan nama yang sama memiliki nilai Etag atau checksum yang berbeda.

    • Selalu: Selalu menimpa file tujuan saat file sumber memiliki nama yang sama, meskipun file tersebut identik.

  4. Di bagian Kapan harus menghapus, pilih salah satu dari opsi berikut:

    • Tidak pernah: Jangan pernah menghapus file dari sumber atau tujuan.

    • Hapus file dari tujuan jika file tersebut tidak ada di sumbernya: Jika file di bucket Cloud Storage tujuan juga tidak ada di sumbernya, hapus file dari bucket Cloud Storage.

      Opsi ini memastikan bahwa bucket Cloud Storage tujuan sama persis dengan sumber Anda.

  5. Pilih apakah akan mengaktifkan logging transfer dan/atau notifikasi Pub/Sub.

Klik Buat untuk membuat tugas transfer.

gcloud CLI

Untuk membuat tugas transfer baru, gunakan perintah gcloud transfer jobs create. Membuat tugas baru akan memulai transfer yang ditentukan, kecuali jika jadwal atau --do-not-run ditentukan.

gcloud transfer jobs create \
  hdfs:///PATH/ gs://BUCKET_NAME/PATH/
  --source-agent-pool=AGENT_POOL_NAME

Dengan keterangan:

  • PATH adalah jalur absolut dari root cluster HDFS. Namenode dan port cluster dikonfigurasi pada level agen, sehingga perintah pembuatan tugas hanya perlu menentukan jalur (opsional) dan kumpulan agen.

  • --source-agent-pool menentukan kumpulan agen sumber yang akan digunakan untuk transfer ini.

Opsi tambahan mencakup:

  • --do-not-run mencegah Storage Transfer Service menjalankan tugas setelah pengiriman perintah. Untuk menjalankan tugas, perbarui tugas untuk menambahkan jadwal, atau gunakan jobs run untuk memulainya secara manual.

  • --manifest-file menentukan jalur ke file CSV di Cloud Storage yang berisi daftar file yang akan ditransfer dari sumber Anda. Untuk pemformatan file manifes, lihat Mentransfer file atau objek tertentu menggunakan manifes.

  • Informasi pekerjaan: Anda dapat menentukan --name dan --description.

  • Jadwal: Tentukan --schedule-starts, --schedule-repeats-every, dan --schedule-repeats-until, atau --do-not-run.

  • Kondisi objek: Gunakan kondisi untuk menentukan objek mana yang ditransfer. Situasi tersebut mencakup --include-prefixes dan --exclude-prefixes, serta kondisi berbasis waktu di --include-modified-[before | after]-[absolute | relative]. Jika Anda menentukan folder dengan sumber, filter awalan akan relatif terhadap folder tersebut. Lihat Memfilter objek sumber menurut awalan untuk mengetahui informasi selengkapnya.

  • Opsi transfer: Tentukan apakah akan menimpa file tujuan (--overwrite-when=different atau always) dan apakah akan menghapus file tertentu selama atau setelah transfer (--delete-from=destination-if-unique atau source-after-transfer); dan secara opsional menetapkan kelas penyimpanan pada objek yang ditransfer (--custom-storage-class).

  • Notifications: Konfigurasikan notifikasi Pub/Sub untuk transfer dengan --notification-pubsub-topic, --notification-event-types, dan --notification-payload-format.

Untuk melihat semua opsi, jalankan gcloud transfer jobs create --help atau lihat dokumentasi referensi gcloud.

REST API

Untuk membuat transfer dari sumber HDFS menggunakan REST API, buat objek JSON yang mirip dengan contoh berikut.

POST https://storagetransfer.googleapis.com/v1/transferJobs
{
  ...
  "transferSpec": {
    "source_agent_pool_name":"POOL_NAME",
    "hdfsDataSource": {
      "path": "/mount"
    },
    "gcsDataSink": {
      "bucketName": "SINK_NAME"
    },
    "transferOptions": {
      "deleteObjectsFromSourceAfterTransfer": false
    }
  }
}

Lihat referensi transferJobs.create untuk mengetahui detail tentang kolom tambahan yang didukung.

Cluster dengan beberapa node nama

Agen Storage Transfer Service hanya dapat dikonfigurasi dengan satu node nama. Jika cluster HDFS dikonfigurasi dengan beberapa node nama ("ketersediaan tinggi"), dan ada peristiwa failover yang menghasilkan namenode utama baru, Anda harus menginstal ulang agen dengan namenode yang benar.

Untuk menghapus agen lama, lihat Menghapus agen.

Namenode aktif cluster Anda dapat diambil dengan menjalankan:

hdfs haadmin -getAllServiceState