すべてのプロダクト
Search
ドキュメントセンター

E-MapReduce:EMR クラスター内の破損したローカルディスクの交換

最終更新日:Dec 28, 2025

ローカルディスクを搭載したインスタンスファミリー (ローカル SSD を搭載した i シリーズやビッグデータインスタンスファミリー d シリーズなど) 上に構築された E-MapReduce (EMR) クラスターを使用している場合、ローカルディスクが破損したという通知を受け取ることがあります。このトピックでは、クラスター内の破損したローカルディスクを交換する方法について説明します。

注意事項

  • この問題を解決するには、異常なノードを削除し、新しいノードを追加します。この方法により、ビジネス運用への長期的な影響を防ぐことができます。

  • ディスク交換後、元のディスク上のデータは失われます。続行する前に、データに十分なレプリカ数があり、バックアップされていることを確認してください。

  • ディスク交換プロセスには、サービスの停止、ディスクのアンマウント、新しいディスクのマウント、およびサービスの再起動が含まれます。交換は通常 5 営業日以内に完了します。このトピックの手順を実行する前に、サービスの停止中に、サービスのディスク使用率とクラスターの負荷がビジネス運用をサポートできるかどうかを評価してください。

手順

ECS コンソールにログインして、イベントの詳細を表示します。詳細には、インスタンス ID、ステータス、破損したディスク ID、イベントの進捗、関連する操作が含まれます。

ステップ 1:破損したディスクに関する情報の取得

  1. Secure Shell (SSH) を使用して、破損したディスクを含むノードにログインします。詳細については、「クラスターへのログイン」をご参照ください。

  2. 次のコマンドを実行して、ブロックデバイス情報を表示します。

    lsblk

    応答は次のようになります。

    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. 次のコマンドを実行して、ディスク情報を表示します。

    sudo fdisk -l

    返されるメッセージは次のようになります。

    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. 前の 2 つのステップの出力から、デバイス名 $device_name とマウントポイント $mount_path を記録します。

    たとえば、ディスク破損イベントのデバイスが vdd の場合、デバイス名は /dev/vdd で、マウントポイントは /mnt/disk3 です。

手順 2:破損したローカル ディスクを隔離する

  1. 破損したディスクからデータを読み書きするアプリケーションを停止します。

    1. EMR コンソールで、破損したディスクを含むクラスターをクリックします。[クラスターサービス] タブで、破損したディスクの読み取りまたは書き込みを行う EMR サービスを見つけます。これらのサービスには通常、HDFS、HBase、Kudu などのストレージサービスが含まれます。対象サービスのエンドポイントがデプロイされているエリアで、more > [停止] を選択してサービスを停止します。

    2. 次のコマンドを実行して、関連する管理プロセスを停止します。

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

      注:これらの管理プロセスを停止すると、ノードのメトリック収集とログ監視機能が影響を受けます。これらの機能は、ディスクが交換され、プロセスが再起動されると自動的に回復します。

    また、ノードで sudo fuser -mv $device_name コマンドを実行して、ディスクを使用しているプロセスの完全なリストを表示し、リスト内のサービスを EMR コンソールから停止することもできます。

  2. 次のコマンドを実行して、ローカルディスクにアプリケーションレイヤーの読み書き隔離を設定します。

    sudo chmod 000 $mount_path
  3. 次のコマンドを実行して、ローカルディスクをアンマウントします。

    sudo umount $device_name;sudo chmod 000 $mount_path
    重要

    ディスクをアンマウントしないと、ディスクが修復されて隔離が解除された後にデバイス名が変更される可能性があります。これにより、アプリケーションが間違ったディスクに読み書きする可能性があります。

  4. fstab ファイルを更新します。

    1. 既存の /etc/fstab ファイルをバックアップします。

    2. /etc/fstab ファイルからディスクのレコードを削除します。

      たとえば、このトピックの破損したディスクが dev/vdd の場合、そのディスクのレコードを削除します。disk

  5. 停止したアプリケーションを開始できます。

    破損したディスクのあるクラスターの [クラスターサービス] タブで、ステップ 2 で停止した EMR サービスを見つけます。 次に、各サービスについて、エンドポイントがデプロイされているエリアで、more > [開始] を選択します。

手順 3:ディスクを交換する

ECS コンソール でディスクを修復します。詳細については、「破損したローカル ディスクを隔離する」をご参照ください。

ステップ 4:ディスクのマウント

ディスクが修復されたら、マウントして新しいディスクとして使用します。

  1. 次のコマンドを実行して、デバイス名を正規化します。

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

    このコマンドはデバイス名を正規化します。たとえば、/dev/xvdk のようなデバイス名は /dev/vdk に変更されます。

  2. 次のコマンドを実行して、マウントディレクトリを作成します。

     mkdir -p "$mount_path"
  3. 次のコマンドを実行して、ディスクをマウントします。

    mount $device_name $mount_path;sudo chmod 755 $mount_path

    ディスクのマウントに失敗した場合は、次の手順を実行します。

    1. 次のコマンドを実行して、ディスクをフォーマットします。

      fdisk $device_name << EOF
      n
      p
      1
      
      wq
      EOF
    2. 次のコマンドを実行して、ディスクを再度マウントします。

      mount $device_name $mount_path;sudo chmod 755 $mount_path
  4. 次のコマンドを実行して、fstab ファイルを修正します。

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

    which mkfs.ext4 コマンドを実行して ext4 が存在するかどうかを確認します。存在する場合は、$fstype を ext4 に設定します。それ以外の場合は、$fstype を ext3 に設定します。

  5. スクリプトファイルを作成し、クラスタータイプに基づいてスクリプトコードを選択します。

    DataLake、DataFlow、OLAP、DataServing、および 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

    データレイク (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. 次のコマンドを実行してスクリプトファイルを実行し、サービスフォルダーを作成してから、スクリプトを削除します。$file_path はスクリプトファイルへのパスです。

    chmod +x $file_path
    sudo $file_path -p $mount_path
    rm $file_path
  7. 新しいディスクを使用します。

    1. EMR コンソールで、ノードで実行されているサービスを再起動します。

    2. 次のコマンドを実行して、管理プロセスを開始します。

      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. ディスクが正しく動作していることを確認します。