全部产品
Search
文档中心

E-MapReduce:Ganti disk lokal yang rusak dalam kluster EMR

更新时间:Dec 28, 2025

Saat menggunakan kluster E-MapReduce (EMR) yang dibangun di atas instans dengan disk lokal—seperti instans seri SSD lokal (seri i) dan instans big data (seri d)—Anda mungkin menerima notifikasi bahwa disk lokal mengalami kerusakan. Topik ini menjelaskan cara mengganti disk lokal yang rusak dalam kluster tersebut.

Tindakan pencegahan

  • Untuk menangani masalah ini, hapus node yang bermasalah dan tambahkan node baru. Pendekatan ini mencegah dampak jangka panjang terhadap operasi bisnis Anda.

  • Data pada disk asli akan hilang setelah disk diganti. Pastikan data Anda memiliki jumlah replika yang cukup dan telah dicadangkan sebelum melanjutkan proses ini.

  • Proses penggantian disk mencakup penghentian layanan, pelepasan pemasangan (unmount) disk, pemasangan disk baru, dan restart layanan. Penggantian biasanya selesai dalam waktu lima hari kerja. Sebelum menjalankan langkah-langkah dalam topik ini, evaluasi apakah penggunaan disk oleh layanan dan beban kluster masih dapat mendukung operasi bisnis selama layanan dihentikan.

Prosedur

Login ke Konsol ECS untuk melihat detail event. Detail tersebut mencakup ID instans, status, ID disk yang rusak, progres event, serta operasi terkait.

Langkah 1: Dapatkan informasi tentang disk yang rusak

  1. Login ke node yang berisi disk rusak menggunakan Secure Shell (SSH). Untuk informasi lebih lanjut, lihat Login ke kluster.

  2. Jalankan perintah berikut untuk melihat informasi perangkat blok.

    lsblk

    Responsnya mirip dengan berikut ini.

    NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    vdd    254:48   0  5.4T  0 disk /mnt/disk3
    vdb    254:16   0  5.4T  0 disk /mnt/disk1
    vde    254:64   0  5.4T  0 disk /mnt/disk4
    vdc    254:32   0  5.4T  0 disk /mnt/disk2
    vda    254:0    0  120G  0 disk
    └─vda1 254:1    0  120G  0 part /
  3. Jalankan perintah berikut untuk melihat informasi disk.

    sudo fdisk -l

    Pesan yang dikembalikan mirip dengan berikut ini.

    Disk /dev/vdd: 5905.6 GB, 5905580032000 bytes, 11534336000 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes
  4. Dari output dua langkah sebelumnya, catat nama perangkat $device_name dan titik pemasangan $mount_path.

    Sebagai contoh, jika perangkat dalam event kerusakan disk adalah vdd, maka nama perangkatnya adalah /dev/vdd dan titik pemasangannya adalah /mnt/disk3.

Langkah 2: Mengisolasi disk lokal yang rusak

  1. Hentikan aplikasi yang membaca atau menulis data ke disk yang rusak.

    1. Di Konsol EMR, klik kluster yang berisi disk rusak. Pada tab Cluster Services, temukan layanan EMR yang membaca atau menulis ke disk yang rusak. Layanan tersebut biasanya mencakup layanan penyimpanan seperti HDFS, HBase, dan Kudu. Di Wilayah layanan tempat endpoint layanan tersebut ditempatkan, pilih more > Stop untuk menghentikan layanan tersebut.

    2. Jalankan perintah berikut untuk menghentikan proses manajemen terkait.

      sudo crontab -l | grep -v "exporter_check.sh" | sudo crontab -
      sudo service taihao_exporter stop
      sudo service ilogtaild stop
      sudo service ilogtaildclt stop

      Catatan: Setelah proses manajemen ini dihentikan, fitur pengumpulan metrik dan pemantauan log untuk node tersebut akan terpengaruh. Fitur-fitur ini akan pulih secara otomatis setelah disk diganti dan proses-proses tersebut dijalankan kembali.

    Anda juga dapat menjalankan perintah sudo fuser -mv $device_name pada node tersebut untuk melihat daftar lengkap proses yang menggunakan disk, lalu hentikan layanan dalam daftar tersebut dari Konsol EMR.

  2. Jalankan perintah berikut untuk mengaktifkan pemagaran (fencing) baca-tulis di lapisan aplikasi untuk disk lokal tersebut.

    sudo chmod 000 $mount_path
  3. Jalankan perintah berikut untuk melepas pemasangan (unmount) disk lokal.

    sudo umount $device_name;sudo chmod 000 $mount_path
    Penting

    Jika Anda tidak melepas pemasangan disk, nama perangkatnya mungkin berubah setelah disk diperbaiki dan pemagaran dihapus. Hal ini dapat menyebabkan aplikasi membaca atau menulis ke disk yang salah.

  4. Perbarui file fstab.

    1. Backup file /etc/fstab yang ada.

    2. Hapus catatan untuk disk tersebut dari file /etc/fstab.

      Sebagai contoh, jika disk yang rusak dalam topik ini adalah dev/vdd, hapus catatan untuk disk tersebut.disk

  5. Anda dapat menjalankan kembali aplikasi yang dihentikan.

    Pada tab Cluster Services kluster yang berisi disk rusak, temukan layanan EMR yang Anda hentikan di Langkah 2. Kemudian, untuk setiap layanan, di Wilayah layanan tempat endpoint ditempatkan, pilih more > Start.

Langkah 3: Mengganti disk

Perbaiki disk di Konsol ECS. Untuk informasi lebih lanjut, lihat Isolasi Disk Lokal yang Rusak.

Langkah 4: Pasang disk

Setelah disk diperbaiki, pasang kembali untuk menggunakannya sebagai disk baru.

  1. Jalankan perintah berikut untuk menormalisasi nama perangkat.

    device_name=`echo "$device_name" | sed 's/x//1'`

    Perintah ini menormalisasi nama perangkat. Misalnya, nama perangkat seperti /dev/xvdk diubah menjadi /dev/vdk.

  2. Jalankan perintah berikut untuk membuat direktori pemasangan.

     mkdir -p "$mount_path"
  3. Jalankan perintah berikut untuk memasang disk.

    mount $device_name $mount_path;sudo chmod 755 $mount_path

    Jika disk gagal dipasang, lakukan langkah-langkah berikut:

    1. Jalankan perintah berikut untuk memformat disk.

      fdisk $device_name << EOF
      n
      p
      1
      
      wq
      EOF
    2. Jalankan perintah berikut untuk memasang disk kembali.

      mount $device_name $mount_path;sudo chmod 755 $mount_path
  4. Jalankan perintah berikut untuk memodifikasi file fstab.

    echo "$device_name $mount_path $fstype defaults,noatime,nofail 0 0" >> /etc/fstab
    Catatan

    Jalankan perintah which mkfs.ext4 untuk memeriksa apakah ext4 tersedia. Jika tersedia, atur $fstype ke ext4. Jika tidak, atur $fstype ke ext3.

  5. Buat file skrip dan pilih kode skrip berdasarkan tipe kluster.

    Kluster DataLake, DataFlow, OLAP, DataServing, dan Custom

    while getopts p: opt
    do
    	case "${opt}" in
      	p) mount_path=${OPTARG};;
      esac
    done
    
    sudo mkdir -p $mount_path/flink
    sudo chown flink:hadoop $mount_path/flink
    sudo chmod 775 $mount_path/flink
    
    sudo mkdir -p $mount_path/hadoop
    sudo chown hadoop:hadoop $mount_path/hadoop
    sudo chmod 755 $mount_path/hadoop
    
    sudo mkdir -p $mount_path/hdfs
    sudo chown hdfs:hadoop $mount_path/hdfs
    sudo chmod 750 $mount_path/hdfs
    
    sudo mkdir -p $mount_path/yarn
    sudo chown root:root $mount_path/yarn
    sudo chmod 755 $mount_path/yarn
    
    sudo mkdir -p $mount_path/impala
    sudo chown impala:hadoop $mount_path/impala
    sudo chmod 755 $mount_path/impala
    
    sudo mkdir -p $mount_path/jindodata
    sudo chown root:root $mount_path/jindodata
    sudo chmod 755 $mount_path/jindodata
    
    sudo mkdir -p $mount_path/jindosdk
    sudo chown root:root $mount_path/jindosdk
    sudo chmod 755 $mount_path/jindosdk
    
    sudo mkdir -p $mount_path/kafka
    sudo chown root:root $mount_path/kafka
    sudo chmod 755 $mount_path/kafka
    
    sudo mkdir -p $mount_path/kudu
    sudo chown root:root $mount_path/kudu
    sudo chmod 755 $mount_path/kudu
    
    sudo mkdir -p $mount_path/mapred
    sudo chown root:root $mount_path/mapred
    sudo chmod 755 $mount_path/mapred
    
    sudo mkdir -p $mount_path/starrocks
    sudo chown root:root $mount_path/starrocks
    sudo chmod 755 $mount_path/starrocks
    
    sudo mkdir -p $mount_path/clickhouse
    sudo chown clickhouse:clickhouse $mount_path/clickhouse
    sudo chmod 755 $mount_path/clickhouse
    
    sudo mkdir -p $mount_path/doris
    sudo chown root:root $mount_path/doris
    sudo chmod 755 $mount_path/doris
    
    sudo mkdir -p $mount_path/log
    sudo chown root:root $mount_path/log
    sudo chmod 755 $mount_path/log
    
    sudo mkdir -p $mount_path/log/clickhouse
    sudo chown clickhouse:clickhouse $mount_path/log/clickhouse
    sudo chmod 755 $mount_path/log/clickhouse
    
    sudo mkdir -p $mount_path/log/kafka
    sudo chown kafka:hadoop $mount_path/log/kafka
    sudo chmod 755 $mount_path/log/kafka
    
    sudo mkdir -p $mount_path/log/kafka-rest-proxy
    sudo chown kafka:hadoop $mount_path/log/kafka-rest-proxy
    sudo chmod 755 $mount_path/log/kafka-rest-proxy
    
    sudo mkdir -p $mount_path/log/kafka-schema-registry
    sudo chown kafka:hadoop $mount_path/log/kafka-schema-registry
    sudo chmod 755 $mount_path/log/kafka-schema-registry
    
    sudo mkdir -p $mount_path/log/cruise-control
    sudo chown kafka:hadoop $mount_path/log/cruise-control
    sudo chmod 755 $mount_path/log/cruise-control
    
    sudo mkdir -p $mount_path/log/doris
    sudo chown doris:doris $mount_path/log/doris
    sudo chmod 755 $mount_path/log/doris
    
    sudo mkdir -p $mount_path/log/celeborn
    sudo chown hadoop:hadoop $mount_path/log/celeborn
    sudo chmod 755 $mount_path/log/celeborn
    
    sudo mkdir -p $mount_path/log/flink
    sudo chown flink:hadoop $mount_path/log/flink
    sudo chmod 775 $mount_path/log/flink
    
    sudo mkdir -p $mount_path/log/flume
    sudo chown root:root $mount_path/log/flume
    sudo chmod 755 $mount_path/log/flume
    
    sudo mkdir -p $mount_path/log/gmetric
    sudo chown root:root $mount_path/log/gmetric
    sudo chmod 777 $mount_path/log/gmetric
    
    sudo mkdir -p $mount_path/log/hadoop-hdfs
    sudo chown hdfs:hadoop $mount_path/log/hadoop-hdfs
    sudo chmod 755 $mount_path/log/hadoop-hdfs
    
    sudo mkdir -p $mount_path/log/hbase
    sudo chown hbase:hadoop $mount_path/log/hbase
    sudo chmod 755 $mount_path/log/hbase
    
    sudo mkdir -p $mount_path/log/hive
    sudo chown root:root $mount_path/log/hive
    sudo chmod 775 $mount_path/log/hive
    
    sudo mkdir -p $mount_path/log/impala
    sudo chown impala:hadoop $mount_path/log/impala
    sudo chmod 755 $mount_path/log/impala
    
    sudo mkdir -p $mount_path/log/jindodata
    sudo chown root:root $mount_path/log/jindodata
    sudo chmod 777 $mount_path/log/jindodata
    
    sudo mkdir -p $mount_path/log/jindosdk
    sudo chown root:root $mount_path/log/jindosdk
    sudo chmod 777 $mount_path/log/jindosdk
    
    sudo mkdir -p $mount_path/log/kyuubi
    sudo chown kyuubi:hadoop $mount_path/log/kyuubi
    sudo chmod 755 $mount_path/log/kyuubi
    
    sudo mkdir -p $mount_path/log/presto
    sudo chown presto:hadoop $mount_path/log/presto
    sudo chmod 755 $mount_path/log/presto
    
    sudo mkdir -p $mount_path/log/spark
    sudo chown spark:hadoop $mount_path/log/spark
    sudo chmod 755 $mount_path/log/spark
    
    sudo mkdir -p $mount_path/log/sssd
    sudo chown sssd:sssd $mount_path/log/sssd
    sudo chmod 750 $mount_path/log/sssd
    
    sudo mkdir -p $mount_path/log/starrocks
    sudo chown starrocks:starrocks $mount_path/log/starrocks
    sudo chmod 755 $mount_path/log/starrocks
    
    sudo mkdir -p $mount_path/log/taihao_exporter
    sudo chown taihao:taihao $mount_path/log/taihao_exporter
    sudo chmod 755 $mount_path/log/taihao_exporter
    
    sudo mkdir -p $mount_path/log/trino
    sudo chown trino:hadoop $mount_path/log/trino
    sudo chmod 755 $mount_path/log/trino
    
    sudo mkdir -p $mount_path/log/yarn
    sudo chown hadoop:hadoop $mount_path/log/yarn
    sudo chmod 755 $mount_path/log/yarn

    Kluster Data lake (Hadoop)

    while getopts p: opt
    do
    	case "${opt}" in
      	p) mount_path=${OPTARG};;
      esac
    done
    
    mkdir -p $mount_path/data
    chown hdfs:hadoop $mount_path/data
    chmod 1777 $mount_path/data
    
    mkdir -p $mount_path/hadoop
    chown hadoop:hadoop $mount_path/hadoop
    chmod 775 $mount_path/hadoop
    
    mkdir -p $mount_path/hdfs
    chown hdfs:hadoop $mount_path/hdfs
    chmod 755 $mount_path/hdfs
    
    mkdir -p $mount_path/yarn
    chown hadoop:hadoop $mount_path/yarn
    chmod 755 $mount_path/yarn
    
    mkdir -p $mount_path/kudu/master
    chown kudu:hadoop $mount_path/kudu/master
    chmod 755 $mount_path/kudu/master
    
    mkdir -p $mount_path/kudu/tserver
    chown kudu:hadoop $mount_path/kudu/tserver
    chmod 755 $mount_path/kudu/tserver
    
    mkdir -p $mount_path/log
    chown hadoop:hadoop $mount_path/log
    chmod 775 $mount_path/log
    
    mkdir -p $mount_path/log/hadoop-hdfs
    chown hdfs:hadoop $mount_path/log/hadoop-hdfs
    chmod 775 $mount_path/log/hadoop-hdfs
    
    mkdir -p $mount_path/log/hadoop-yarn
    chown hadoop:hadoop $mount_path/log/hadoop-yarn
    chmod 755 $mount_path/log/hadoop-yarn
    
    mkdir -p $mount_path/log/hadoop-mapred
    chown hadoop:hadoop $mount_path/log/hadoop-mapred
    chmod 755 $mount_path/log/hadoop-mapred
    
    mkdir -p $mount_path/log/kudu
    chown kudu:hadoop $mount_path/log/kudu
    chmod 755 $mount_path/log/kudu
    
    mkdir -p $mount_path/run
    chown hadoop:hadoop $mount_path/run
    chmod 777 $mount_path/run
    
    mkdir -p $mount_path/tmp
    chown hadoop:hadoop $mount_path/tmp
    chmod 777 $mount_path/tmp
  6. Jalankan perintah berikut untuk menjalankan file skrip, membuat folder layanan, lalu menghapus skrip tersebut. $file_path adalah path ke file skrip.

    chmod +x $file_path
    sudo $file_path -p $mount_path
    rm $file_path
  7. Gunakan disk baru.

    1. Di Konsol EMR, restart layanan yang berjalan di node tersebut.

    2. Jalankan perintah berikut untuk memulai proses manajemen.

      sudo service taihao_exporter start
      sudo service ilogtaild start
      sudo service ilogtaildclt start
      (sudo crontab -l; echo "*/5 * * * * bash /usr/local/taihao_exporter/exporter_check.sh") | sudo crontab -
    3. Verifikasi bahwa disk berfungsi dengan benar.