Big Data Appliance (BDA)またはBig Data Cloud Service (BDCS)からの移行

Oracle Big Data ApplianceまたはBig Data Cloud Serviceからビッグ・データ・サービスへの移行方法の確認

ノート

OCIへの移行後も、Big Data ApplianceまたはBig Data Cloud Serviceクラスタを(停止状態で)少なくとも3か月間バックアップとして保持することをお薦めします。

WANdisco LiveData Migratorを使用したリソースの移行

宛先でポート8020が開いていることを確認します。

WANdisco LiveData Migratorの詳細は、ここをクリックしてください。

WANdisco LiveData Migratorを使用してリソースを移行するには、次のステップに従います。

  1. 次のコマンドを実行して、ソース・クラスタの任意のエッジにLiveDataマイグレータをインストールします。
    wget https://wandisco.com/downloads/livedata-migrator.sh
     
    chmod +x livedata-migrator.sh && ./livedata-migrator.sh
     
    service livedata-migrator status
    service hivemigrator status
    service livedata-ui status
  2. LiveDataマイグレータのインストールおよび設定が完了したら、UIにアクセスし、ユーザー・アカウントを作成します。UIのURLは次のとおりです。
    http://<LDM-Installation-Host.com>:8081
  3. データを移行するには、次を実行します。
    1. ソースファイルシステムを構成します。
      ソース・ファイルシステムを追加するには、LiveDataマイグレータ・ダッシュボードで次を実行します:
      1. 「製品」パネルから、関連するインスタンスを選択します。
      2. 「ファイルシステム構成」ページで、「ソース・ファイルシステムの追加」をクリックします。
    2. ターゲットファイルシステムを構成します。
      ターゲット・ファイルシステムを追加するには、LiveDataマイグレータ・ダッシュボードで次を実行します:
      1. 「製品」パネルから、関連するインスタンスを選択します。
      2. 「ファイルシステム構成」ページで、「ターゲット・ファイルシステムの追加」をクリックします。
      3. 「Apache Hadoop for Target as BDS cluster」を選択し、デフォルトのファイルシステム・パスを指定します。ソースとターゲットが8020ポートの宛先に接続していることを確認します。
    3. パス・マッピングを作成します。
      パス・マッピングを使用すると、移行されたデータをターゲット上の同等のデフォルトの場所に格納できます。UIを使用してパス・マッピングを作成するには、次のステップに従います。
      1. ダッシュボードの「製品」リストから、パス・マッピングを作成するLiveDataマイグレータ・インスタンスを選択します。
      2. 「移行」メニューから、「パス・マッピング」を選択します。
      3. インタフェースの右上にある「Add New Path」ボタンをクリックします。
    4. 移行の作成
      移行では、既存のデータが定義済のソースからターゲットに転送されます。UIから新しい移行を作成するには、次のステップに従います。
      1. 移行の名前を入力します。
      2. ファイルシステムから、ソースとターゲットを選択します。
      3. 移行するソースファイルシステム上のパスを選択します。フォルダ・ブラウザを使用して、移行するパス名を選択します。パス名の横にある灰色のフォルダを選択して、そのサブディレクトリを表示します。
  4. メタデータを移行します。
    メタデータを移行するには、これらのステップに従います。
    1. メタストアを接続します。
      LiveData MigratorにバンドルされているHive Migratorを使用すると、メタデータをソース・メタストアからターゲット・メタストアに転送できます。ローカルまたはリモートのメタデータ・エージェントを作成して、メタストアに接続します。
    2. メタデータ移行を作成します。
      メタデータ移行を作成するには、次のステップに従います。
      1. ダッシュボードで、「Hive移行の追加」を選択します。
      2. 移行の名前を入力します。
      3. ソース・エージェントとターゲット・エージェントを選択します。
      4. 移行するデータベースおよび表と一致するHive DDLに基づいて、データベース・パターンおよび表パターンを作成します。

        たとえば、データベース・パターンにtest*を使用すると、testで始まるすべてのデータベース名(test01test02test03など)と一致します。

      5. 「作成」をクリックします。

BDRを使用したリソースの移行

Oracle Object StorageへのBDAデータのバックアップ

Oracle Big Data Applianceクラスタをバックアップする前に、次のことを確認してください。

  • ビッグ・データ・アプライアンス・クラスタへの管理者アクセス権があります。

    • Cloudera Managerの管理者資格証明が必要です。

    • Oracle Object StorageにバックアップされるHDFSデータおよびHiveメタデータへのフル・アクセス権を持つHadoop管理者ユーザーが必要です。

  • HDFSデータがコピーされるOracle Cloud Infrastructureオブジェクト・ストアを設定します。詳細は、オブジェクト・ストレージの概要を参照してください。

  • 次の詳細を使用してOracle Cloud Infrastructureテナンシを設定します

    • 管理者はOracle Cloud Infrastructureでユーザーを作成し、そのユーザーを必要なグループに追加しました。

    • ユーザーには権限があり、Oracle Cloud Infrastructureコンソールにアクセスできます。

    • ユーザーには権限があり、バケットを作成できます。詳細は、共通ポリシーオブジェクト・ストレージ管理者によるバケットおよびオブジェクトの管理を参照してください。

    • ユーザーは、Oracle Cloud Infrastructureオブジェクト・ストアの構成を検査できます。

BDAクラスタをバックアップするには、次のステップを実行します。

  1. Oracle Object Storage内にバケットを作成します。

    バケットは、データの格納および編成に使用されます。作成するバケットは、Oracle Object Storageにバックアップされるデータのコンテナです。Oracle Object Storageの管理の詳細は、オブジェクト・ストレージの概要を参照してください。

    1. OCIコンソールにログオンします
    2. ナビゲーション・メニューを開き、「ストレージ」をクリックします。「オブジェクト・ストレージ」で、「バケット」をクリックします。
    3. 「バケットの作成」をクリックします。
    4. 名前を持つバケットを大文字で作成します。例: BDA-MIGRATIONHadoop S3コネクタは、バケット名が大文字の場合にのみ機能します。クラスタが別のリージョンにあるかどうかに関係なく、ホーム・リージョンにバケットを作成します。バケットの詳細は、オブジェクト・ストレージへのデータの配置を参照してください。
  2. 顧客秘密キーを作成します。
    HadoopクラスタからOracle Object Storageへのセキュアな接続を行うには、秘密キーが必要です。キーは、ターゲット・バケットの更新を実行する権限を持つユーザーに対して作成されます。
    1. OCIコンソールにログオンします
    2. ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」をクリックします。「アイデンティティ」で、「ユーザー」をクリックします。
    3. リストでユーザーを見つけてから、ユーザーの名前をクリックして詳細を表示します。
    4. ページの左側の「顧客秘密キー」をクリックします。
    5. 「秘密キーの生成」をクリックします。
    6. キーの簡単な説明(mysecretkeyなど)を入力し、「秘密キーの生成」をクリックします。
    7. セキュリティのためにダイアログ・ボックスを閉じた後は秘密キーを取得できないため、秘密キーをただちにコピーしてください。
  3. Cloudera Managerでバックアップ用の外部アカウントを作成します。

    アクセス・キーと秘密キーを使用して、Cloudera Managerに外部アカウントを作成します。Oracle Object Storageのターゲット・バケットにアクセスできるOracle Cloud Infrastructureユーザーのキーを使用してください。

    1. ソース・クラスタでCloudera Managerにログオンします。
    2. 「管理」に移動し、「外部アカウント」をクリックします。
    3. 「AWS資格証明」タブで、「アクセス・キー資格証明の追加」をクリックし、次を指定します:
      • 名前: 資格証明の名前を指定します。たとえば、oracle-credentialです。

      • AWSアクセス・キーID: アクセス・キーの名前を指定します。たとえば、myaccesskeyです。

      • AWS秘密キー: 顧客秘密キーの作成時に書き留めた秘密キーの値を入力します。

    4. 「追加」をクリックします。S3Guardの編集ページが表示されます。「S3Guardの有効化」は選択しないでください。
    5. 「保存」をクリックします。
  4. オブジェクト・ストレージ資格証明を使用してcore-site.xmlを更新します。

    次に、データのバックアップ中にオブジェクト・ストレージに接続するために追加する必要があるコアsite.xml更新のサンプルを示します。ソース・クラスタと宛先クラスタの両方でcore-site.xmlを更新した後、変更を保存してHDFSを再起動します。/tmp/s3-tempという名前のステージング・ディレクトリが、ソースおよび宛先のローカル・クラスタ・ノードに存在することを確認します。

    <property>
        <name>fs.s3a.secret.key</name>
        <value><SECRET-KEY></value>
      </property>
      <property>
        <name>fs.s3a.access.key</name>
        <value><ACCESS-KEY></value>
      </property>
      <property>
        <name>fs.s3a.bucket.<BUCKET-NAME>.endpoint</name>
        <value>https://<TENANCY>.compat.objectstorage.us-ashburn-1.oraclecloud.com</value>
      </property>
      <property>
        <name>fs.s3a.acl.default</name>
        <value>Private</value>
      </property>
      <property>
        <name>fs.s3a.path.style.access</name>
        <value>true</value>
      </property>
      <property>
        <name>fs.s3a.paging.maximum</name>
        <value>1000</value>
      </property>
      <property>
        <name>fs.s3a.buffer.dir</name>
        <value>/tmp/s3-temp</value>
      </property>
  5. バックアップ用のHiveレプリケーション・スケジュールを作成します。

    HadoopクラスタからOracle Object StorageにHiveデータおよびメタデータをバックアップするには、Cloudera ManagerでHiveレプリケーション・スケジュールを作成する必要があります。

    レプリケーションを実行する前に、/user/hive/warehouseディレクトリのスナップショットを有効にすることをお薦めします。スナップショットを有効にすると、レプリケーション・プロセス中にファイルに加えられた変更によってレプリケーション障害が発生しないことが保証されます。詳細は、Clouderaドキュメントのレプリケーションでのスナップショットの使用を参照してください。

    Hiveレプリケーション・スケジュールを作成するには、次のステップに従います。

    1. ソース・クラスタでCloudera Managerにログオンします。
    2. /user/hive/warehouseディレクトリのスナップショットを有効にします。
      1. 左側のサービスのリストから、「HDFS」をクリックします。
      2. ページ上部の「ファイル・ブラウザ」タブをクリックします。
      3. /user/hive/warehouseディレクトリに移動します。
      4. 「スナップショットの有効化」をクリックします。
    3. Hiveレプリケーション・スケジュールを作成します。
      1. 「バックアップ」に移動し、「レプリケーションスケジュール」をクリックします。
      2. 「スケジュールの作成」をクリックし、「Hiveレプリケーション」を選択します。
      3. レプリケーション・スケジュールについて次の詳細を指定します:
        • 名前: 名前を入力します。たとえば、hive-rep1です。

        • ソース: 前に定義した資格証明を選択します。たとえば、oracle-credentialです。

        • 宛先: Hive (クラスタ名)を選択します。

        • クラウド・ルート・パス: データをバックアップするルートの場所を指定します。たとえば、s3a://BDCS-BACKUP/です。

        • HDFS宛先: オブジェクト・ストレージにバックアップするため、これを空のままにします。
        • データベース: 「すべてレプリケート」を選択します。

        • レプリケーション・オプション: 「メタデータとデータ」を選択します。

        • スケジュール: 「Immediate(即時)」を選択します。

        • ユーザー名として実行: バックアップされるデータおよびメタデータへのアクセス権を持つユーザーを指定します。これは通常、HadoopスーパーユーザーおよびSentry管理者です。

          ノート

          必要なデータおよびメタデータへのアクセス権を持つユーザーがない場合は、作成します。このステップでは、hdfsスーパーユーザーを使用しないでください。
          ノート

          暗号化されたデータをHDFSに格納するHadoop暗号化を有効にしている場合は、暗号化ゾーンへの復号化アクセス権を持つユーザーとして実行してください。
    4. 「スケジュールの保存」をクリックします。レプリケーションのスケジュール・ページでレプリケーションを監視できます。
  6. ソースクラスタ構成を確認します。

    ソース・クラスタのすべてのカスタム構成設定を書き留めます。ビッグ・データ・サービス・クラスタに同様の更新が必要な場合があります。これには、サード・パーティ製品のインストール、追加のJARファイル、Hadoop構成の更新(Hiveの補助JARなど)などが含まれます。

    Cloudera Manager APIを使用すると、デフォルトのクラスタ構成に加えられたすべての変更を確認できます。クラスタ・デプロイメントをダウンロードし、出力を確認して、ビッグ・データ・サービスに適用する必要がある変更を理解します。

    次のURLを使用してCloudera Managerにログオンし、クラスタ・デプロイメントをダウンロードします。

    https://your-CM-host:7183/api/v18/cm/deployment

    クラスタ構成はJSON形式で取得され、クラスタで行われたオーバーライドがリストされます。ファイルを調べ、デフォルトへのオーバーライドがあるかどうかを確認します。たとえば、hive.aux.jars.pathを検索して、Hive問合せの実行に必要なアプリケーションJARのリストを確認します。これらのファイルをビッグ・データ・サービス・クラスタにコピーし、hive.aux.jars.pathに相当する更新を行います。

ビッグ・データ・サービス・クラスタへのBDAバックアップのリストア

Oracle Big Data ApplianceクラスタをOracle Big Data Serviceにリストアする前に、次のものが必要です。

  • Big Data Applianceクラスタのバックアップ。Oracle Object StorageへのBDAデータのバックアップを参照してください。

  • デプロイされたビッグ・データ・サービス・クラスタ。Oracle Cloud Infrastructureでのビッグ・データ・サービス・クラスタの作成を参照してください。

  • ビッグ・データ・アプライアンス・クラスタ・バックアップを含むOracle Object Storageバケットの読取り権限を持つ秘密キーへのアクセス。

  • ビッグ・データ・サービス・クラスタ上のCloudera Managerの管理者資格証明。

  • データおよびメタデータをクラスタにリストアする権限を持つHDFSスーパーユーザーおよびHive管理者。

BDAバックアップのリストア

BDAのバックアップをリストアするには、次のステップを実行します。
  1. ビッグ・データ・サービス・クラスタでCloudera Managerにログオンします。
    1. https://your-utility-node-1:7183にログオンします。your-utility-nodeは、ユーティリティ・ノードのパブリックIPアドレスまたはプライベートIPアドレスです。高可用性が使用されている場合、これはクラスタの最初のユーティリティ・ノードです。高可用性を使用しない場合、これが唯一のユーティリティ・ノードです。
    2. ユーザー名adminと、クラスタの作成時に指定したパスワードを入力します。
  2. Cloudera Managerにリストア用の外部アカウントを作成します。

    アクセス・キーと秘密キーを使用して、Cloudera Managerに外部アカウントを作成します。クラスタがOracle Object Storageのデータにアクセスできるように外部アカウントを設定します。

    外部アカウントを作成するには、次のステップを実行します。
    1. Oracle Big Data ServiceクラスタでCloudera Managerにログオンします。
    2. 「管理」に移動し、「外部アカウント」をクリックします。
    3. 「AWS資格証明」タブで、「アクセス・キー資格証明の追加」をクリックし、次を指定します:
      • 名前: 資格証明の名前を指定します。たとえば、oracle-credentialです。

      • AWSアクセス・キーID: アクセス・キーの名前を指定します。たとえば、myaccesskeyです。

      • AWS秘密キー: 顧客秘密キーの作成時に以前に生成された秘密キーの値を入力します。

    4. 「追加」をクリックします。S3Guardの編集ページが表示されます。「S3Guardの有効化」は選択しないでください。
    5. 「保存」をクリックします。
    6. 表示されるページで、S3へのクラスタ・アクセスを有効にします。
      1. クラスタ名に「Enable」を選択します。
      2. 「よりセキュアな資格証明ポリシー」を選択し、「続行」をクリックします。
      3. 「依存サービスの再起動」ページで、「今すぐ再起動」を選択し、「続行」をクリックします。再起動の詳細が表示されます。クラスタの再起動には数分かかる場合があります。
      4. 再起動後、「続行」をクリックし、「終了」をクリックします。
  3. s3aエンドポイントを更新します。
    ノート

    core-site.xmlファイルをすでに更新している場合は、このステップをスキップします。

    エンドポイントURIを使用すると、Hadoopクラスタはソース・データを含むオブジェクト・ストアに接続できます。Cloudera ManagerでこのURIを指定します。

    エンドポイントを更新するには、次のステップを実行します。

    1. Oracle Big Data ServiceクラスタでCloudera Managerにログオンします。
    2. 左側のサービスのリストから、S3「コネクタ」をクリックします。
    3. 「構成」タブをクリックします。
    4. デフォルトのS3エンドポイント・プロパティを次のように更新します。
      https://your-tenancy.compat.objectstorage.your-region.oraclecloud.com

      例、 https://oraclebigdatadb.compat.objectstorage.us-phoenix-1.oraclecloud.com

    5. 変更を保存します。
    6. クラスタを更新します。
      1. クラスタに移動し、「アクション」をクリックして、「クライアント構成のデプロイ」を選択し、アクションを確認します。
      2. 完了後、「Close」をクリックします。
    7. クラスタを再起動します(「アクション」をクリックし、「再起動」をクリックします)。
  4. リストアのHDFSレプリケーション・スケジュールを作成します。

    Oracle Object StorageにバックアップされたHDFSデータをリストアします。HDFSデータをHDFSファイル・システムのルート・ディレクトリにリストアして、ソースをミラー化します。

    HiveにHDFSで取得され、Hiveで管理されない外部データがある場合は、Hiveレプリケーション・スケジュールを作成する前に、HDFSレプリケーション・スケジュールを作成します。

    HDFSレプリケーション・スケジュールを作成するには:

    1. Oracle Big Data ServiceクラスタでCloudera Managerにログインします。
    2. HDFSレプリケーション・スケジュールを作成します。
      1. 「バックアップ」に移動し、「レプリケーションスケジュール」をクリックします。
      2. 「スケジュールの作成」をクリックし、「HDFSレプリケーション」を選択します。
      3. レプリケーション・スケジュールの詳細を指定します:
        • 名前: 名前を入力します。たとえば、hdfs-rep1です。

        • ソース: 前に定義した資格証明を選択します。たとえば、oracle-credentialです。

        • ソース・パス: データをバックアップしたルートの場所を指定します。たとえば、s3a://BDA-BACKUP/です。

        • 宛先: HDFS (クラスタ名)を選択します。

        • 宛先パス: /と入力します

        • スケジュール: 「Immediate(即時)」を選択します。

        • ユーザー名として実行: リストアされるデータおよびメタデータへのアクセス権を持つユーザーを指定します。これは通常、HadoopスーパーユーザーおよびSentry管理者です。
          ノート

          必要なデータおよびメタデータへのアクセス権を持つユーザーがない場合は、作成する必要があります。このステップでは、hdfsスーパーユーザーを使用しないでください。
          ノート

          : Hadoop暗号化を使用する場合は、適切なキーを使用して宛先ディレクトリが作成されていることを確認し、コマンドが暗号化アクセス権を持つユーザーとして実行されます。
    3. 「スケジュールの保存」をクリックします。レプリケーションのスケジュール・ページでレプリケーションを監視できます。
  5. リストアのHiveレプリケーション・スケジュールを作成します。

    HiveデータおよびメタデータをOracle Object StorageからHadoopクラスタにリストアするには、Cloudera ManagerでHiveレプリケーション・スケジュールを作成します。

    Hiveレプリケーション・スケジュールを作成するには、次のステップに従います。

    1. Oracle Big Data ServiceクラスタでCloudera Managerにログオンします。
    2. レプリケーション・スケジュールを作成します。
      1. 「バックアップ」に移動し、「レプリケーションスケジュール」をクリックします。
      2. 「スケジュールの作成」をクリックし、「Hiveレプリケーション」を選択します。
      3. Hiveレプリケーション・スケジュールの詳細を指定します:
        • 名前: 名前を入力します。たとえば、hive-rep1です。

        • ソース: 前に定義した資格証明を指定します。たとえば、oracle-credentialです。

        • 宛先: Hive (クラスタ名)を選択します。

        • クラウド・ルート・パス: データをバックアップしたルートの場所を選択します。たとえば、s3a://BDA-BACKUP/です。

        • HDFS宛先パス: /と入力します

        • データベース: 「すべてレプリケート」を選択します。

        • レプリケーション・オプション: 「メタデータとデータ」を選択します。

        • スケジュール: 「Immediate(即時)」を選択します。

        • ユーザー名として実行: リストアされるデータおよびメタデータへのアクセス権を持つユーザーを指定します。これは通常、HadoopおよびHiveのスーパーユーザーおよびSentry管理者です。
          ノート

          必要なデータおよびメタデータへのアクセス権を持つユーザーがない場合は、作成する必要があります。このステップでは、hdfsスーパーユーザーを使用しないでください。
    3. 「スケジュールの保存」をクリックします。レプリケーションのスケジュール・ページでレプリケーションを監視できます。
サービスの移行の確認

Spark

スパーク・ジョブを確認し、新しいクラスタの詳細に基づいて更新します。

Yarn

ソース・クラスタから同じキュー名を使用するには、次を実行します:
  • ソース・クラスタから、Cloudera Managerをコピーします。(YARNに移動し、「構成」をクリックして、ターゲット・クラスタの同じ位置への「Fair Scheduler Allocations (Deployed)」コンテンツをクリックします。)
  • コピーできない場合は、キューを手動で作成します。(Cloudera Managerで、「Clusters」に移動し、「Dynamic Resource Pool Configuration」を選択します。)

Sentry

  • BDR、WandiscoまたはHadoop Distcpを使用して、HDFSデータおよびHiveメタデータを移行します。
  • ソースのSentryデータベースから送信データをエクスポートし、宛先のsentryデータベースで復元するには、Sentryメタ移行ツールが必要です。Sentryメタ移行ツールについては、Oracle Support for MOSノートのドキュメントID 2879665.1を参照してください。

Distcpツールを使用したリソースの移行

データおよびメタデータをBDAから移行し、Distcpツールを使用してビッグ・データ・サービスにインポートすることもできます。Distcpは、クラスタ内およびクラスタ間の分散ファイル・システム間で大規模なデータ・セットをコピーするために使用できるオープン・ソース・ツールです。

BDAまたはBDCSクラスタの準備

エクスポート用にBDAまたはBDCSクラスタを準備するには、次のステップに従います。

  1. HDFSサービスをメンテナンス・モードに設定して、アラートおよび一括操作をブロックします。詳細は、「サービスのメンテナンス・モードの設定」を参照してください。
  2. opcユーザーとしてSSHを使用してBDAまたはBDCSクラスタに接続します。詳細は、Secure Shell (SSH)を介したクラスタ・ノードへの接続を参照してください。
  3. 次のコマンドを実行して、HDFSサービスをセーフ・モードに設定します。
    $ sudo su hdfs -c 'hdfs dfsadmin -safemode get'
    Safe mode is OFF
     
    $ sudo su hdfs -c 'hdfs dfsadmin -safemode enter'
    Safe mode is ON
  4. 次の手順を実行します。
    1. rootユーザーとして、OCI秘密キー(~/.oci/oci_api_key.pemなど)をBDAまたはBDCSクラスタの/home/opc/.ociディレクトリにコピーします。
      sudo su -
      cp <private-key> /home/opc/.oci/oci_api_key.pem
    2. 秘密キー・ファイル権限を読取り専用に変更します。
      chmod 444 /home/opc/.oci/oci_api_key.pem
    3. プライベートPEMキー・ファイルの所有権をhdfsユーザーに変更します。
      chown -R hdfs:hdfs /home/opc/.oci/oci_api_key.pem
    4. HDFSユーザーがアクセスできるdataという名前のディレクトリを作成します。
    5. OCI秘密キーを/home/opc/.ociディレクトリから/dataディレクトリにコピーします。
      cp /home/opc/.oci/oci_api_key.pem /data
    6. rootユーザーとして、/dataディレクトリの秘密キー・ファイルを読取り専用に変更します。
      chmod 444 /data/oci_api_key.pem
    BDAまたはBDCSクラスタに複数のノードがある場合は、同じパスを持つすべてのノードでOCI秘密キーが使用可能であることを確認してください。otoolsユーザーを使用して、ファイルをすべてのノードにコピーできます。ただし、ファイルがotoolsで読取り可能であることを確認してください。ファイルをすべてのノードにコピーしたら、元のアクセス権を設定します。

    すべてのホストにOCI秘密キーをインストールするには、 otoolsユーザーとして、各ホストに対して指定された順序で次のコマンドを実行します:

    sudo su - otools
    ssh <hostname> sudo mkdir /data
    scp oci_api_key.pem <hostname>:/data
    ssh <hostname> sudo chown hdfs:hdfs /data/oci_api_key.pem
    ssh <hostname> sudo chmod 444 /data/oci_api_key.pem
HDFSからのデータのエクスポート

HDFSからデータをエクスポートするには、次のステップを実行します。

  1. distcpツールを設定します。distcpツールには、更新されたoci-hdfsドライバが必要です。したがって、distcpツールを実行する必要があるホストにドライバをダウンロードする必要があります。ドライバをダウンロードするには、次のコマンドを使用します:
    1. 次のコマンドを実行して、/dataの下にhdfsjarという名前のディレクトリを作成し、ディレクトリに移動します。
      mkdir -p /data/hdfsjars
      cd /data/hdfsjars
    2. oci-hdfs.zipをダウンロードします。
      wget https://github.com/oracle/oci-hdfs-connector/releases/download/v2.7.7.0/oci-hdfs.zip
    3. oci-hdfs.zipファイルを抽出します。
      1. /data/hdfsjars/libディレクトリの下のファイルを解凍します。
        unzip oci-hdfs.zip lib/oci-hdfs-full-2.7.7.0.jar
      2. lib/oci-hdfs-full-2.7.7.0.jarを現在の作業ディレクトリ(/data/hdfsjar)に移動します。
        mv lib/oci-hdfs-full-2.7.7.0.jar .
      3. libディレクトリおよびoci-hdfs.zipファイルを削除します。
        rm -rf lib/ oci-hdfs.zip
  2. oci-hdfs-full-2.7.7.0.jarを指すように環境変数を設定します。
    export LIBJARS=/data/hdfsjars/oci-hdfs-full-2.7.7.0.jar
  3. (オプション)sun.net.inetaddr.ttlを使用して次の変数を設定して、プロキシを構成します。
    export DISTCP_PROXY_OPTS="-Dhttps.proxyHost=<proxy-host> -Dhttps.proxyPort=<proxy-port> -Dsun.net.inetaddr.ttl=60"
    
  4. OCIストレージ・コンテナの内容をリストして構成をテストします。
    hadoop fs -Dfs.oci.client.auth.fingerprint=<fingerprint> \
    -Dfs.oci.client.auth.pemfilepath=<oci_pem_key> \
    -Dfs.oci.client.auth.passphrase=<passphrase> \
    -Dfs.oci.client.auth.tenantId=<OCID forTenancy> \
    -Dfs.oci.client.auth.userId=<OCID forUser> \
    -Dfs.oci.client.hostname=<HostName. Example: https://objectstorage.us-phoenix-1.oraclecloud.com/> \
    -Dfs.oci.client.proxy.uri=http://<proxyhost>:<proxyport> \
    -ls oci://<bucket>@<namespace>/
  5. OCIオブジェクト・ストア・バケットの特定のディレクトリにあるすべてのHDFSデータをコピーするには、バケットの下にディレクトリを作成します。
    hadoop fs -Dfs.oci.client.auth.fingerprint=<fingerprint> \
          -Dfs.oci.client.auth.pemfilepath=<oci_pem_key> \
          -Dfs.oci.client.auth.passphrase=<passphrase> \
          -Dfs.oci.client.auth.tenantId=<OCID for Tenancy> \
          -Dfs.oci.client.auth.userId=<OCID for User> \
          -Dfs.oci.client.hostname=<HostName. Example: https://objectstorage.us-phoenix-1.oraclecloud.com/> \
          -Dfs.oci.client.proxy.uri=http://<proxyhost>:<proxyport>  \
          -mkdir oci://<bucket>@<namespace>/<Dir>
  6. 次のコマンドを実行して、ディレクトリがオブジェクト・ストアに作成されていることを確認します。
    hadoop fs -Dfs.oci.client.auth.fingerprint=<fingerprint> \
          -Dfs.oci.client.auth.pemfilepath=<oci_pem_key> \
          -Dfs.oci.client.auth.passphrase=<passphrase> \
          -Dfs.oci.client.auth.tenantId=<OCID forTenancy> \
          -Dfs.oci.client.auth.userId=<OCID forUser> \
          -Dfs.oci.client.hostname=<HostName>\
          -ls oci://<bucket>@<namespace>/
  7. HDFSデータをエクスポートするには、次のいずれかを実行します。
    • hadoop fs -cpを使用して、HDFSデータを単一ノード・クラスタからHDFSユーザーとしてオブジェクト・ストアにエクスポートします。
      sudo su - hdfs
      hadoop fs -Dfs.oci.client.auth.fingerprint=<fingerprint> \
            -Dfs.oci.client.auth.pemfilepath=<oci_pem_key> \
            -Dfs.oci.client.auth.passphrase=<passphrase> \
            -Dfs.oci.client.auth.tenantId=<OCID for Tenancy> \
            -Dfs.oci.client.auth.userId=<OCID for User> \
            -Dfs.oci.client.hostname=<HostName> \
            -Dfs.oci.client.proxy.uri=http://<proxyhost>:<proxyport>  \
            -cp <hdfs-dir-to-copy> oci://<bucket>@<namespace>/<dir>/
    • hadoop distcpを使用して、マルチノード・クラスタからオブジェクト・ストアにHDFSデータをエクスポートします。特定のディレクトリに対して検証します。たとえば、次のコマンドで<hdfs-dir-to-copy>/user/oozie/を使用し、HDFS全体(/)に対して実行します。
      hadoop distcp -libjars ${LIBJARS} \
      -Dfs.client.socket-timeout=3000000
      -Dfs.oci.client.auth.fingerprint=<fingerprint> \
      -Dfs.oci.client.auth.pemfilepath=<oci_pem_key> \
      -Dfs.oci.client.auth.passphrase=<passphrase> \
      -Dfs.oci.client.auth.tenantId=<OCID for Tenancy> \
      -Dfs.oci.client.auth.userId=<OCID for User> \
      -Dfs.oci.client.hostname=<HostName. Example: https://objectstorage.us-phoenix-1.oraclecloud.com/> \
      -Dfs.oci.client.multipart.allowed=true \
      -Dfs.oci.client.proxy.uri=<http://proxy-host>:port \
      -Dmapreduce.map.java.opts="$DISTCP_PROXY_OPTS" \
      -Dmapreduce.reduce.java.opts="$DISTCP_PROXY_OPTS" \
      -Dmapreduce.task.timeout=6000000 \
      -skipcrccheck -m 40 -bandwidth 500 \
      -update -strategy dynamic -i <hdfs-dir-to-copy> oci://<bucket>@<namespace>/<exportedHdfsDir>/
  8. オブジェクト・ストアの内容を確認します。
    hadoop fs -Dfs.oci.client.auth.fingerprint=<fingerprint> \
         -Dfs.oci.client.auth.pemfilepath=<oci_pem_key> \
         -Dfs.oci.client.auth.passphrase=<passphrase> \
         -Dfs.oci.client.auth.tenantId=<OCID forTenancy> \
         -Dfs.oci.client.auth.userId=<OCID forUser> \
         -Dfs.oci.client.hostname=<HostName>\
         -ls oci://<bucket>@<namespace>/<dir>
  9. メタデータ・ファイルを作成し、オブジェクト・ストアにエクスポートします。
    1. 次のzipファイルをダウンロードします。

      ファイル/create_metadata.zip

    2. ファイルを解凍し、create_metadata.shおよびcreate_permissions.pyを1つのディレクトリに配置します。
    3. 次のシェル・スクリプトを実行します。このスクリプトは、複数のメタデータ・ファイルを作成し、それらをHDFSの/metadataディレクトリに配置します。
      bash create_metadata.sh <hdfs_directory>
    4. メタデータ・ファイルをオブジェクト・ストアにエクスポートします。
      hadoop distcp -Dfs.client.socket-timeout=3000000 \
          -Dfs.oci.client.auth.fingerprint=67:3a:86:d2:8b:61:b0:fd:c4:21:58:92:5a:d2:e8:83 \
          -Dfs.oci.client.auth.pemfilepath=<oci_pem_key> \
          -Dfs.oci.client.auth.tenantId=ocid1.tenancy.oc1..aaaaaaaajh6gxgbuudok7odjpwe5wyv2iq74ihhac5lyulxdgrhsssxc4hna \
          -Dfs.oci.client.auth.userId=ocid1.user.oc1..aaaaaaaaeslrldhdvniuue3dsi7p3xblpfpsluxtx2g6txg5iiukfhzg77ua \
          -Dfs.oci.client.hostname=https://objectstorage.us-ashburn-1.oraclecloud.com/ \
          -Dfs.oci.client.multipart.allowed=true -Dmapreduce.task.timeout=6000000  \
          -skipcrccheck -m 20 -bandwidth 100 -update -strategy dynamic -i /metadata/Metadata* oci://<bucket>@<namespace>/metadata
      
HDFSからのデータの増分エクスポート

distcpを使用してHDFSデータを増分的に移行し、一定期間後にソースからターゲットにデータを送信し、ソース・データに追加、更新または削除します。

ノート

  • ソース・クラスタとターゲット・クラスタのスナップショット名が同じであることを確認してください。
  • ターゲット・クラスタ内のHDFSデータを削除または変更しないでください。これによって、次の項で説明するエラーが発生する可能性があります。
  1. ソースとターゲットの親ディレクトリを指定します。
  2. ソース・ディレクトリのスナップショットを許可します。
    hdfs dfsadmin -allowSnapshot /data/a
  3. /data/aのスナップショットを作成します。
    hdfs dfs -createSnapshot /data/a s1
  4. /data/a_targetにレプリケートする必要があるソース・ディレクトリ/data/aにコンテンツを作成します。
  5. /data/aの新しいスナップショットを取得します:
    hdfs dfs -createSnapshot /data/a s2
  6. (オプション)2つのスナップショットの違いを確認します:
    hdfs snapshotDiff /data/a s1 s2
  7. 変更を/data/a_targetに移行します。
    hadoop distcp -diff s1 s2 -update /data/a /data/a_target
  8. /data/a_targetで一致するスナップショットを作成します。
    hdfs dfs -createSnapshot /data/a_target s2
Hiveメタデータのエクスポート

Hiveメタデータをエクスポートするには、次のステップを実行します。

  1. hive_migrate.propertiesを更新するターゲット・ビッグ・データ・サービスHDFSパスを取得します。
    1. TARGET_HDFS_PATHを取得するには、要塞ホストを使用してターゲットBDSクラスタにログオンします。
      cat /etc/hadoop/conf/core-site.xml | grep -A1 "fs.defaultFS"
    2. TARGET_HDFS_PATHを書き留めます。

  2. hive_migrate.propertiesスクリプトのTARGET_HDFS_PATHおよびTARGET_OBJECTSTORE_PATHを、移行後にHive表データを使用できる場所に更新します。パス内のスラッシュをエスケープする必要はありません。
    #!/bin/bash
    #
    # Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
    # Properties file to overide
    #
    # This file will be sourced by the generate_target_ddl_from_source.sh
    # to customize/overide properties
    # SRC_HDFS_PATH and SRC_OBJECTSTORE_PATH will be derived automatically from the cluster.
    # You will be customizing
    #     RUNDIR , TARGET_HDFS_PATH, TARGET_OBJECTSTORE_PATH
    #
    # ------------------------------------------------------------
    # Location to hold intermediate and final scripts to be generated.
    # You must have write privileges on this directory
    export RUNDIR=/tmp/hivemigrate
     
    # ------------------------------------------------------------
    # Specify current hive.metastore.warehouse.dir from Hive Config.
    #
    export SRC_WAREHOUSE_DIR=/apps/hive/warehouse
     
     
    # ------------------------------------------------------------
    # Modify expected target BDS hdfs path in your hive DDL script
    #
    export TARGET_HDFS_PATH=hdfs://testbdmn0.bmbdcsad1.bmbdcs.oraclevcn.com:8020/warehouse/tablespace/external/hive
     
     
    # ------------------------------------------------------------
    # Modify expected target BDS Object Store path in your hive DDL script
    #
    export TARGET_OBJECTSTORE_PATH=oci://bdc2odh@bdsdevcluster/warehouse
  3. opcユーザーとしてsshを使用して、BDAまたはBDCSクラスタに接続します。詳細は、Secure Shell (SSH)を介したクラスタ・ノードへの接続を参照してください。
  4. 次のコードを使用して、~opcホーム・ディレクトリにgenerate_target_ddl_from_source.shという名前のスクリプトを作成します。このスクリプトは、ターゲット・クラスタで実行してハイブ・メタデータを作成できるDDL文を生成します。
    #!/bin/bash
    #
    # Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
    #
    # Script to generate queries that can be run on a target cluster for hive metadata migration.
    #
    # Usage :
    #   sudo generate_target_ddl_from_source.sh
    # The generated scripts are available under /tmp/hivemigrate/generatedSQL_target_Hive
    #  - 1_CREATE_DB.hql
    #  - 2_CREATE_TABLE.hql
    #  - 3_ADD_PARTITION.hql
    #
    # These scripts can be run on a target cluster AS IS to create hive metadata that matches the source..
    #
     
     
    #------------------------------------------------------------
    # Set Environment
    detect_basedir()
    {
      DIRNAME=`dirname $0`
      BASENAME=`basename $0`
      BASEDIR=$(cd "$DIRNAME" ; pwd)
    }
    detect_basedir
     
     
    #------------------------------------------------------------
    # Initilize any default config properties that has been overriden in
    #     ${BASEDIR}/hive_migrate.properties
    # DO NOT MODIFY. PLEASE OVERRIDE ANY PARAMETER IN ${BASEDIR}/hive_migrate.properties
    export RUNDIR=/tmp/hivemigrate
    export TARGET_HDFS_PATH=hdfs://Some_cluster_name/tmp
    export TARGET_OBJECTSTORE_PATH=oci://mybucket@mytenancy/tmp/
    #
    #------------------------------------------------------------
    if [ -f ${BASEDIR}/hive_migrate.properties ]; then
        echo -e "*** Sourcing Overide proprties file ${BASEDIR}/hive_migrate.properties"
        source ${BASEDIR}/hive_migrate.properties
    else
        echo -e "*** Warning : Missing Overide proprties file ${BASEDIR}/hive_migrate.properties"
        echo -e "*** Continue with default settings\n"
    fi
    #
    usage()
    {
      echo -e "Usage : ${BASENAME} \n"
      echo -e "**  This script is to be run on your source cluster and can be run as many times as you wish."
      echo -e "**  It cleans up any older generated scripts located in ${RUNDIR} before starting \n"
      echo -e "**  The generated output hive query scripts will be available in RUNDIR: ${RUNDIR} ...\n"
      echo -e "*** Modify RUNDIR if you would like to override\n"
      echo -e "**  Currently TARGET_HDFS_PATH is set to hdfs://Some_cluster_name/"
      echo -e "*** Modify TARGET_HDFS_PATH to match your hdfs path in Hive DDL \n"
    }
     
     
    # Make sure only root can run our script
    if [ "$(id -u)" != "0" ]; then
       echo -e "ERROR: *** This script ${BASENAME} must be run as root" 1>&2
       usage
       exit 1
    fi
     
    if [ "$1" != "" ]; then
       usage
       exit 1
    fi
     
     
    #------------------------------------------------------------
    #
    # Figure out the HDFS Path in source cluster.
    # Depending on HA or non-HA cluster the hdfs path syntax is different
    if ! grep -q "dfs.ha.namenodes.mycluster" /etc/bdcsce/conf/blueprint/*.json
    then
        echo -e "INFO:**  Source: Non-HA cluster..."
        nn_fqdn=$(hostname -f)
        SRC_HDFS_PATH=hdfs://${nn_fqdn}:8020${SRC_WAREHOUSE_DIR}
    else
        echo -e 'INFO:**  Source: HA cluster...'
        SRC_HDFS_PATH=hdfs://mycluster${SRC_WAREHOUSE_DIR}
    fi
    echo -e "INFO:**  Assumed source hdfspath : $SRC_HDFS_PATH"
     
     
    #------------------------------------------------------------
    #
    # Figureout Source Object source Patch
    source /etc/bdcsce/conf/datasources.properties
    export SRC_OBJECTSTORE_PATH=${bdcsce_default_objectstore_url}
     
     
     
     
    #------------------------------------------------------------
    # Step-1 : Setup/Clean source and target directories to hold intermediate and final scripts
     
     
    #Path to store intermediate hive queries
    outputSourcePath=${RUNDIR}/generatedSQL_source_Hive
    rm -rf $outputSourcePath
    mkdir -m 777 -p $outputSourcePath
     
     
    #Path to store final target hive queries to be used at target system
    outputTargetPath=${RUNDIR}/generatedSQL_target_Hive
    rm -rf $outputTargetPath
    mkdir -m 777 -p $outputTargetPath
     
     
    #------------------------------------------------------------
    # Step-2 : Extract Create DB statements from MetaStore to Run in Target Hive Installation.
    #
    mysql -Dhive --skip-column-names -e"
     
     
    -- Query for creating databases
    SELECT
        CONCAT('CREATE DATABASE IF NOT EXISTS ',
                D.NAME,
                '\;') AS CREATE_DB_STATEMENTS
    FROM
        DBS D;" > $outputTargetPath/1_CREATE_DB.hql
     
     
    ret=$?
    if [ $ret -ne 0 ];
    then
        echo -e "Error:** - MySQL Error code is $ret while trying to extract DB creation scripts"
        exit $ret
    else
        echo -e "**  DB Creation extraction script $outputTargetPath/1_CREATE_DB.hql completed successfully"
    fi
     
     
    #------------------------------------------------------------
    # Extract Show Create Table statements from MetaStore to Run in Source Hive Installation.
     
     
    mysql -Dhive --skip-column-names -e"
     
     
    -- Query for Creating Show CT Statements to be run in the Source Hive Installation
    SELECT
        CONCAT('USE ', D.name, '\; ','SHOW CREATE TABLE ',
                T.tbl_name,
                '\;') AS SHOW_CT_STATEMENTS
    FROM
        TBLS T
            INNER JOIN
        DBS D ON D.DB_ID = T.DB_ID
    WHERE
        T.TBL_TYPE != 'INDEX_TABLE';" > $outputSourcePath/1_SHOW_CREATE_TABLE.hql
     
     
     
     
    ret=$?
    if [ $ret -ne 0 ];
    then
        echo -e "Error:** - MySQL Error code is $ret while trying to extract SHOW CT scripts"
        exit $ret
    else
        echo -e "\n\n"
        echo -e "**  SHOW CREATE TABLE extraction script $outputSourcePath/1_SHOW_CREATE_TABLE.hql completed successfully"
    fi
     
     
     
     
    #------------------------------------------------------------
    # Run Show Create Table Command on Source Hive Installation to create target Hive CT scripts
    echo -e "**  Running show create table in source cluster"
    echo -e "**  This may take a while...Depends on hive metadata size\n\n"
     
     
     
     
    sudo -u hive hive -f $outputSourcePath/1_SHOW_CREATE_TABLE.hql > $outputTargetPath/2_CREATE_TABLE_temp.hql
    ret=$?
    if [ $ret -ne 0 ];
    then
        echo -e "Error - Hive Error code is $ret while trying to execute SHOW CT scripts"
        exit $ret
    else
        echo -e "\n\n"
        echo -e "**  SHOW CT execution script $outputTargetPath/2_CREATE_TABLE_temp.hql completed successfully"
    fi
     
     
    # Add semicolon suffix ; after CT statements
    echo -e "USE default;" > $outputTargetPath/2_CREATE_TABLE.hql
    cat $outputTargetPath/2_CREATE_TABLE_temp.hql | tr '\n' '\f' | sed -e 's/)\fCREATE/);\fCREATE/g'  | tr '\f' '\n' >> $outputTargetPath/2_CREATE_TABLE.hql
    echo -e ";">>$outputTargetPath/2_CREATE_TABLE.hql
    rm -rf $outputTargetPath/2_CREATE_TABLE_temp.hql
    echo -e "**  Create Table execution script $outputTargetPath/2_CREATE_TABLE.hql created successfully"
     
    #------------------------------------------------------------
    # Convert Managed Table to External table for HIVE 3
    #
    #echo -e "INFO:** Convering Managed Table to External table for HIVE 3 in CT $outputTargetPath/2_CREATE_TABLE.hql scripts"
    #sed -i "s/^CREATE TABLE/CREATE EXTERNAL TABLE/g" $outputTargetPath/2_CREATE_TABLE.hql
     
    #------------------------------------------------------------
    # Replace HDFS Path
    #
    echo -e "INFO:** Replacing $SRC_HDFS_PATH with $TARGET_HDFS_PATH in CT $outputTargetPath/2_CREATE_TABLE.hql scripts"
    sed -i "s,$SRC_HDFS_PATH,$TARGET_HDFS_PATH,g" $outputTargetPath/2_CREATE_TABLE.hql
     
    #------------------------------------------------------------
    # Replace Target Object Store Path
    #
    echo -e "INFO:** Replacing $SRC_OBJECTSTORE_PATH with $TARGET_OBJECTSTORE_PATH in CT $outputTargetPath/2_CREATE_TABLE.hql scripts"
    sed -i "s,$SRC_OBJECTSTORE_PATH,$TARGET_OBJECTSTORE_PATH,g" $outputTargetPath/2_CREATE_TABLE.hql
     
     
    echo -e "INFO:** Replaced $SRC_OBJECTSTORE_PATH with $TARGET_OBJECTSTORE_PATH in CT $outputTargetPath/2_CREATE_TABLE.hql scripts"
     
     
     
    #------------------------------------------------------------
    # Extract Add Partition statements if any from MetaStore to Run in Target Hive Installation.
     
     
    mysql -Dhive --skip-column-names -e"
    -- Query to create add partition scripts to run in target Hive Installation
     
     
     
     
    SET @oldNameNode = '$SRC_HDFS_PATH'; -- Old NameNode address
    SET @newNameNode = '$TARGET_HDFS_PATH'; -- New NameNode address
     
     
     
     
    SELECT
        REPLACE(add_partition_query,
            @oldNameNode,
            @newNameNode) AS add_partition_query
     
     
     
     
    FROM
            (SELECT
                    CONCAT('USE ', D.name, '\; ', ' ALTER TABLE ', T.TBL_NAME, ' ADD PARTITION (', GROUP_CONCAT(PK.PKEY_NAME, '=', '\'', PKV.PART_KEY_VAL, '\''
                        ORDER BY PK.INTEGER_IDX), ') LOCATION \'', S.location, '\'\; ') AS add_partition_query
        FROM
            TBLS T
        INNER JOIN DBS D ON T.DB_ID = D.DB_ID
        INNER JOIN PARTITION_KEYS PK ON T.TBL_ID = PK.TBL_ID
        INNER JOIN PARTITIONS P ON P.TBL_ID = T.TBL_ID
        INNER JOIN PARTITION_KEY_VALS PKV ON P.PART_ID = PKV.PART_ID
            AND PK.INTEGER_IDX = PKV.INTEGER_IDX
        INNER JOIN SDS S ON P.SD_ID = S.SD_ID
        GROUP BY P.PART_ID
        ORDER BY D.name) alias1;" > $outputTargetPath/3_ADD_PARTITION.hql
    ret=$?
    if [ $ret -ne 0 ];
    then
        echo -e "Error - MySQL Error code is $ret while trying to extract ADD PARTITION scripts"
        exit $ret
    else
        echo -e "\n\n"
        echo -e "**  ADD PARTITION extraction script $outputTargetPath/3_ADD_PARTITION.hql completed successfully"
    fi
     
     
     
     
    echo -e "\n\n"
    echo -e "INFO: ** Here are your Target installation scripts"
    ls -al $outputTargetPath/*
    echo -e "\n\n"
    echo -e "INFO: ** Run these hql scripts on your Target hive shell..."
     
     
    exit 0
  5. rootユーザーとしてgenerate_target_ddl_from_source.shスクリプトを実行します。
    sudo ./generate_target_ddl_from_source.sh
    /tmp/hivemigrate/generatedSQL_target_Hiveの下に次のスクリプトが生成されます。
    • 1_CREATE_DB.hql
    • 2_CREATE_TABLE.hql
    • 3_ADD_PARTITION.hql

    インポート中に、これらのスクリプトを/tmp/hivemigrate/generatedSQL_target_Hiveから、ルートおよびデータベース・アクセスを持つターゲットBDSクラスタのマスター・ノードにコピーします。

ビッグ・データ・サービスへのリソースのインポート

次に、エクスポートされたデータとメタデータをビッグ・データ・サービスにインポートします。

前提条件
リソースをインポートする前に、次を実行します。
  1. ソース・クラスタと同じBDAまたはBDCS Hadoopバージョン(Hadoop 2.7.x)のビッグ・データ・サービスで新しいターゲット環境を設定します。
    ノート

    :
      • ソースBDAまたはBDCSクラスタと同じサイズのOCIでビッグ・データ・サービス・クラスタを定義します。ただし、ターゲット・クラスタのサイズを決定する前に、コンピューティングおよびストレージのニーズを確認する必要があります。
      • Oracle Cloud Infrastructure VMシェイプについては、コンピュート・シェイプを参照してください。BDAまたはBDCSでは、すべてのシェイプがサポートされていません。
      • BDAまたはBDCSスタック以外のソフトウェアがブートストラップ・スクリプトまたはその他の方法を使用してソース・システムにインストールされている場合は、そのソフトウェアもターゲット・システムにインストールおよび保守する必要があります。
  2. PEM秘密キー(oci_api_key.pem)ファイルをビッグ・データ・サービス・クラスタのすべてのノードにコピーし、適切な権限を設定します。
  3. ソースBDAまたはBDCSクラスタからアーティファクトをエクスポートします。
HDFSへのデータのインポート

HDFSにデータをインポートするには、これらのステップに従います:

  1. opcユーザーとしてSSHを介してビッグ・データ・サービス(BDS)クラスタに接続します。
    ssh -i id_rsa <private_node_ip>
  2. データを格納する必要があるHDFSの場所を決定します。
    
    grep -A1 -i fs.defaultFS /etc/hadoop/conf/core-site.xml
  3. HDFSユーザーとして、データをオブジェクト・ストアからターゲットHDFSに移動します。
    1. hadoop fs -cpを使用して、HDFSユーザーとしてオブジェクト・ストアから宛先BDSクラスタにHDFSデータをインポートします。
      sudo su - hdfs
       
      hadoop fs -Dfs.oci.client.auth.fingerprint=<fingerprint> \
      -Dfs.oci.client.auth.pemfilepath=<oci_pem_key> \
      -Dfs.oci.client.auth.passphrase=<passphrase> \
      -Dfs.oci.client.auth.tenantId=<OCID for Tenancy> \
      -Dfs.oci.client.auth.userId=<OCID for User> \
      -Dfs.oci.client.hostname=<HostName. Example: https://objectstorage.us-phoenix-1.oraclecloud.com/> \
      -Dfs.oci.client.proxy.uri=http://<proxyhost>:<proxyport> \
      -cp oci://<bucket>@<tenancy>/<dir>/ <hdfs-dir-to-copy>
    2. hadoop distcpを使用して、オブジェクト・ストアからマルチノードのBDSクラスタにHDFSデータをインポートします。特定のディレクトリに対して検証します。たとえば、次のコマンドで<hdfs-dir-to-copy>/user/oozieを使用し、次にHDFS全体(/)に対して実行します。
      hadoop distcp -libjars ${LIBJARS} \
      -Dfs.client.socket-timeout=3000000
      -Dfs.oci.client.auth.fingerprint=<fingerprint> \
      -Dfs.oci.client.auth.pemfilepath=<oci_pem_key> \
      -Dfs.oci.client.auth.passphrase=<passphrase> \
      -Dfs.oci.client.auth.tenantId=<OCID for Tenancy> \
      -Dfs.oci.client.auth.userId=<OCID for User> \
      -Dfs.oci.client.hostname=<HostName. Example: https://objectstorage.us-phoenix-1.oraclecloud.com/> \
      -Dfs.oci.client.multipart.allowed=true \
      -Dfs.oci.client.proxy.uri=<http://proxy-host>:port \
      -Dmapreduce.map.java.opts="$DISTCP_PROXY_OPTS" \
      -Dmapreduce.reduce.java.opts="$DISTCP_PROXY_OPTS" \
      -Dmapreduce.task.timeout=6000000 \
      -skipcrccheck -m 40 -bandwidth 500 \
      -update -strategy dynamic -i oci://<bucket>@<tenancy>/<exportedHdfsDir>/ <hdfs-dir-to-copy>
  4. tmpディレクトリの内容をリストします。
    hadoop fs -ls /<hdfs-dir-to-copy>
メタデータ・ファイルをインポートし、権限を実行します。
次を実行します:
  1. メタデータ・ファイルをオブジェクト・ストアからHDFSの/metadataにインポートします。
    
    hadoop distcp -libjars ${LIBJARS} \
    -Dfs.client.socket-timeout=3000000
    -Dfs.oci.client.auth.fingerprint=<fingerprint> \
    -Dfs.oci.client.auth.pemfilepath=<oci_pem_key> \
    -Dfs.oci.client.auth.passphrase=<passphrase> \
    -Dfs.oci.client.auth.tenantId=<OCID for Tenancy> \
    -Dfs.oci.client.auth.userId=<OCID for User> \
    -Dfs.oci.client.hostname=<HostName. Example: https://objectstorage.us-phoenix-1.oraclecloud.com/> \
    -Dfs.oci.client.multipart.allowed=true \
    -Dfs.oci.client.proxy.uri=<http://proxy-host>:port \
    -Dmapreduce.map.java.opts="$DISTCP_PROXY_OPTS" \
    -Dmapreduce.reduce.java.opts="$DISTCP_PROXY_OPTS" \
    -Dmapreduce.task.timeout=6000000 \
    -skipcrccheck -m 40 -bandwidth 500 \
    -update -strategy dynamic -i oci://<bucket>@<tenancy>/metadata/ /metadata
  2. ファイルをローカル・ディレクトリに移動します。
    hdfs dfs -get /metadata/Metadata*
  3. バックグラウンドまたは複数の端末でファイルをパラレルに実行します。
    bash Metadataaa &
     
    bash Metadataab &
     
    bash Metadataac &...
メタデータのインポート

メタデータをインポートするには、次のステップを実行します。

  1. opcの使用として要塞ホストを介してBDSクラスタに接続します
  2. ソースBDAクラスタで作成されたHIVE DDL問合せスクリプトをターゲットBDSクラスタにコピーします。
    1. 1_CREATE_DB.hql.
    2. 2_CREATE_TABLE.hql
    3. 3_ADD_PARTITION.hql
  3. 1_CREATE_DB.hqlスクリプトを実行します。
    hive -f 1_CREATE_DB.hql
  4. 2_CREATE_TABLE.hqlスクリプトを実行します。
    hive -f 2_CREATE_TABLE.hql
  5. 3_ADD_PARTITION.hqlスクリプトを実行します。
    hive -f 3_ADD_PARTITION.hql
Hiveメタストア・ウェアハウス・ディレクトリの更新

次を実行します:

  1. hive.metastore.warehouse.dirの値を検索します。これは、hive-site.xmlのBDAまたはBDCSクラスタで/apps/hive/warehouseに構成されたハイブ・プロパティです。
    <name>hive.metastore.warehouse.dir</name>
    <value>/apps/hive/warehouse</value>
  2. BDSクラスタのhive-site.xmlhive.metastore.warehouse.dir<exportedHdfsDir>/apps/hive/warehouseに再構成します。
  3. HDFSデータをhdfs://tmpにコピーした場合は、hive.metastore.warehouse.dirプロパティを/tmp/apps/hive/warehouseとして構成します。

移行の検証

移行を確認するには、次の手順を実行します。
  • ターゲット・クラスタに、ソース・クラスタと同じハイブ表のセットが表示されることを確認します。
    1. hiveシェルに接続します。
      hive
    2. 次のコマンドを実行して、表をリストします:
      show tables;