Ranger スキーマをバックアップする、復元する

このページでは、Ranger クラスタを使用した Managed Service for Apache Spark で Ranger スキーマをバックアップして復元する方法について説明します。

始める前に

  1. 必要に応じてバケットを作成します。Ranger スキーマの保存と復元に使用する Cloud Storage バケットにアクセスできる必要があります。

    バケットを作成するには:

    1. Google Cloud コンソールで、Cloud Storage の [バケット] ページに移動します。

      [バケット] に移動

    2. [ 作成] をクリックします。
    3. [バケットの作成] ページでユーザーのバケット情報を入力します。次のステップに進むには、[続行] をクリックします。
      1. [始める] セクションで、次の操作を行います。
        • バケット名の要件を満たす、グローバルに一意の名前を入力します。
        • バケットラベルを追加するには、[ラベル] セクション()を開き、[ ラベルを追加] をクリックして、ラベルの keyvalue を指定します。
      2. [データの保存場所の選択] セクションで、次の操作を行います。
        1. ロケーション タイプを選択してください。
        2. [ロケーション タイプ] プルダウン メニューから、バケットのデータが永続的に保存されるロケーションを選択します。
        3. クロスバケット レプリケーションを設定するには、[Storage Transfer Service 経由でクロスバケット レプリケーションを追加する] を選択し、次の手順を実施します。

          クロスバケット レプリケーションを設定する

          1. [バケット] メニューで、バケットを選択します。
          2. [レプリケーション設定] セクションで、[構成] をクリックして、レプリケーション ジョブの設定を構成します。

            [クロスバケット レプリケーションを構成する] ペインが表示されます。

            • オブジェクト名の接頭辞で複製するオブジェクトをフィルタするには、オブジェクトを追加または除外する接頭辞を入力し、 [接頭辞を追加] をクリックします。
            • 複製されたオブジェクトのストレージ クラスを設定するには、[ストレージ クラス] メニューからストレージ クラスを選択します。この手順をスキップすると、複製されたオブジェクトはデフォルトで宛先バケットのストレージ クラスを使用します。
            • [完了] をクリックします。
      3. [データの保存場所を選択する] セクションで、次の操作を行います。
        1. バケットのデフォルトのストレージ クラスを選択するか、バケットデータのストレージ クラスを自動的に管理する Autoclass を選択します。
        2. 階層名前空間を有効にするには、[データ量が多いワークロード向けにストレージを最適化] セクションで、[このバケットで階層的な名前空間を有効にする] を選択します。
      4. [オブジェクトへのアクセスを制御する方法を選択する] セクションで、バケットに公開アクセスの防止を適用するかどうかを選択し、バケットのオブジェクトに使用するアクセス制御方法を選択します。
      5. [オブジェクト データを保護する方法を選択する] セクションで、次の操作を行います。
        • [データ保護] で、バケットに設定するオプションを選択します。
          • 削除(復元可能)を有効にするには、[削除(復元可能)ポリシー(データ復元用)] チェックボックスをオンにして、削除後にオブジェクトを保持する日数を指定します。
          • オブジェクトのバージョニングを設定するには、[オブジェクトのバージョニング(バージョン管理用)] チェックボックスをオンにして、オブジェクトごとの最大バージョン数と、非現行バージョンの有効期限が切れるまでの日数を指定します。
          • オブジェクトとバケットで保持ポリシーを有効にするには、[保持(コンプライアンス用)] チェックボックスをオンにして、次の操作を行います。
            • オブジェクト保持ロックを有効にするには、[オブジェクト保持を有効にする] チェックボックスをオンにします。
            • バケットロックを有効にするには、[バケット保持ポリシーを設定] チェックボックスをオンにして、保持期間の単位と期間を選択します。
        • オブジェクト データの暗号化方法を選択するには、[データ暗号化] セクション()を開き、データ暗号化方法を選択します。
    4. [作成] をクリックします。

Ranger スキーマをバックアップする

  1. SSH を使用して、Ranger スキーマを持つクラスタの Managed Service for Apache Spark マスターノードに接続します。このセクションのコマンドは、マスターノードで実行されている SSH ターミナル セッションで実行します。

  2. 環境変数を設定します。

    BUCKET_NAME=bucket name \
      MYSQL_PASSWORD=MySQL password
      SCHEMA_FILE=schema filename
    

    次のように置き換えます。

    • MySQL password: クラスタ マスターノードで /etc/mysql/my.cnf を開いて、MySQL パスワードをコピーできます。

    • bucket name: Ranger スキーマの保存に使用する Cloud Storage バケットの名前。

    • schema filename: ファイル拡張子(.sql)なしでファイル名を指定します。Ranger スキーマは、マスターノードのこのファイルに保存してから、Cloud Storage の bucket name に保存します。

  3. Hive サービスを停止します。

    sudo systemctl stop hive-metastore.service
    sudo systemctl stop hive-server2.service
    

  4. Ranger スキーマ テーブルへの変更を防止します。

    mysql -u root -p${MYSQL_PASSWORD}
    REVOKE ALL PRIVILEGES ON ranger.* from 'rangeradmin'@'localhost';
    GRANT SELECT ON ranger.* TO 'rangeradmin'@'localhost';
    FLUSH PRIVILEGES;
    SHOW GRANTS FOR 'rangeradmin'@'localhost';
    exit;
    
  5. Ranger スキーマを .sql ファイルに保存します。

    mysqldump -u root -p${MYSQL_PASSWORD} ranger > ${SCHEMA_FILE}.sql
    
  6. Ranger 権限をリセットします。

    mysql -u root -p${MYSQL_PASSWORD}
    REVOKE SELECT ON ranger.* from 'rangeradmin'@'localhost';
    GRANT ALL PRIVILEGES ON ranger.* to 'rangeradmin'@'localhost';
    FLUSH PRIVILEGES;
    SHOW GRANTS FOR 'rangeradmin'@'localhost';
    exit;
    
  7. Hive サービスと Ranger サービスを再起動します。

    sudo systemctl start hive-metastore.service
      sudo systemctl start hive-server2.service
      sudo systemctl restart ranger-admin.service
      sudo systemctl restart ranger-usersync.service
    
  8. Ranger スキーマを Cloud Storage にコピーします。

    gcloud storage cp ${SCHEMA_FILE}.sql gs://${BUCKET_NAME}
    

Ranger スキーマを復元する

  1. SSH を使用して、クラスタ スキーマを復元するクラスタの Managed Service for Apache Spark マスターノードに接続します。このセクションのコマンドは、マスターノードで実行されている SSH ターミナル セッションで実行します。

  2. 環境変数を設定します。

    BUCKET_NAME=bucket name \
      MYSQL_PASSWORD=MySQL password
      SCHEMA_FILE=schema filename
    

    次のように置き換えます。

    • MySQL password: クラスタ マスターノードで /etc/mysql/my.cnf を開いて、MySQL パスワードをコピーできます。

    • bucket name: 保存された Ranger スキーマを含む Cloud Storage バケットの名前。

    • schema filename: Cloud Storage の bucket name に保存されている Ranger スキーマ ファイルの名前(.sql ファイル拡張子なし)。

  3. Hive サービスを停止します。

    sudo systemctl stop hive-metastore.service
    sudo systemctl stop hive-server2.service
    

  4. Ranger スキーマ テーブルへの変更を防止します。

    mysql -u root -p${MYSQL_PASSWORD}
    REVOKE ALL PRIVILEGES ON ranger.* from 'rangeradmin'@'localhost';
    GRANT SELECT ON ranger.* TO 'rangeradmin'@'localhost';
    FLUSH PRIVILEGES;
    SHOW GRANTS FOR 'rangeradmin'@'localhost';
    exit;
    
  5. Cloud Storage の Ranger スキーマ .sql ファイルをクラスタのマスターノードにコピーします。

    gcloud storage cp ${BUCKET_NAME}/${SCHEMA_FILE}.sql .
    
  6. Ranger スキーマを復元します。このステップでは、既存の Ranger スキーマの内容が上書きされます。

    mysqldump -u root -p${MYSQL_PASSWORD} ranger < ${SCHEMA_FILE}.sql
    
  7. Ranger 権限をリセットします。

    mysql -u root -p${MYSQL_PASSWORD}
    REVOKE SELECT ON ranger.* from 'rangeradmin'@'localhost';
    GRANT ALL PRIVILEGES ON ranger.* to 'rangeradmin'@'localhost';
    FLUSH PRIVILEGES;
    SHOW GRANTS FOR 'rangeradmin'@'localhost';
    exit;
    
  8. Ranger 構成ファイルを更新します。次のプロパティを使用して、次のファイルで Ranger DB ホストを新しいデータベースのホスト名に変更します。

    ファイル プロパティ
    ranger-hdfs-security.xml ranger.plugin.hdfs.policy.rest.url
    ranger-yarn-security.xml ranger.plugin.yarn.policy.rest.url
  9. Hive サービスと Ranger サービスを再起動します。

    sudo systemctl start hive-metastore.service
      sudo systemctl start hive-server2.service
      sudo systemctl restart ranger-admin.service
      sudo systemctl restart ranger-usersync.service