Apache HBase クラスターを新しいバージョンに移行するMigrate an Apache HBase cluster to a new version

この記事では、Azure HDInsight で Apache HBase クラスターを新しいバージョンに更新するために必要な手順について説明します。This article discusses the steps required to update your Apache HBase cluster on Azure HDInsight to a newer version.

注意

アップグレード中のダウンタイムは、分単位で最小限に抑える必要があります。The downtime while upgrading should be minimal, on the order of minutes. このダウンタイムは、すべてのメモリ内データをフラッシュした後、新しいクラスターでサービスを構成して再起動するための手順が原因で発生します。This downtime is caused by the steps to flush all in-memory data, then the time to configure and restart the services on the new cluster. 結果は、ノード数、データ量、およびその他の可変要素によって異なります。Your results will vary, depending on the number of nodes, amount of data, and other variables.

Apache HBase の互換性の確認Review Apache HBase compatibility

Apache HBase をアップグレードする前に、移行元クラスターと移行先クラスターの HBase バージョンの互換性を確保します。Before upgrading Apache HBase, ensure the HBase versions on the source and destination clusters are compatible. 詳しくは、Apache HDInsight で使用できる Hadoop コンポーネントとバージョンに関するページをご覧ください。For more information, see Apache Hadoop components and versions available with HDInsight.

注意

HBase ブックのバージョン互換性マトリックスを確認することを強くお勧めします。We highly recommend that you review the version compatibility matrix in the HBase book.

バージョン互換性マトリックスの例を次に示します。Here is an example version compatibility matrix. Y は互換性を示し、N は潜在的な非互換性を示します。Y indicates compatibility and N indicates a potential incompatibility:

互換性の種類Compatibility type メジャー バージョンMajor version マイナー バージョンMinor version 修正プログラムPatch
クライアント/サーバー間の接続の互換性Client-Server wire compatibility NN YY YY
サーバー/サーバー間の互換性Server-Server compatibility NN YY YY
ファイル形式の互換性File format compatibility NN YY YY
クライアント API の互換性Client API compatibility NN YY YY
クライアント バイナリの互換性Client binary compatibility NN NN YY
サーバー側の制限付きの API 互換性Server-side limited API compatibility
安定版Stable NN YY YY
進化Evolving NN NN YY
不安定Unstable NN NN NN
依存関係の互換性Dependency compatibility NN YY YY
運用の互換性Operational compatibility NN NN YY

注意

重大な非互換性は、HBase のバージョン リリース ノートに記載されています。Any breaking incompatibilities should be described in the HBase version release notes.

同じ Apache HBase メジャー バージョンでのアップグレードUpgrade with same Apache HBase major version

Azure HDInsight で Apache HBase クラスターをアップグレードするには、次の手順を実行します。To upgrade your Apache HBase cluster on Azure HDInsight, complete the following steps:

  1. HBase 互換性マトリックスおよびリリース ノートで、アプリケーションが新しいバージョンと互換性があることを確認します。Make sure that your application is compatible with the new version, as shown in the HBase compatibility matrix and release notes. HDInsight および HBase のターゲット バージョンを実行しているクラスターでアプリケーションをテストします。Test your application in a cluster running the target version of HDInsight and HBase.

  2. 同じストレージ アカウントで別のコンテナー名を使用して、新しい移行先 HDInsight クラスターを設定します。Set up a new destination HDInsight cluster using the same storage account, but with a different container name:

    同じストレージ アカウントを使用して別のコンテナーを作成する

  3. アップグレードするクラスターである、ソース HBase クラスターをフラッシュします。Flush your source HBase cluster, which is the cluster you are upgrading. HBase では、memstore と呼ばれるメモリ内ストアに受信データが書き込まれます。HBase writes incoming data to an in-memory store, called a memstore. memstore が一定のサイズに達すると、HBase はクラスターのストレージ アカウントに長期保存するためにディスクにフラッシュします。After the memstore reaches a certain size, HBase flushes it to disk for long-term storage in the cluster's storage account. 古いクラスターを削除すると、memstore がリサイクルされ、データが失われる可能性があります。When deleting the old cluster, the memstores are recycled, potentially losing data. 各テーブルの memstore をディスクに手動でフラッシュするには、次のスクリプトを実行します。To manually flush the memstore for each table to disk, run the following script. このスクリプトの最新バージョンは、Azure の GitHub にあります。The latest version of this script is on Azure's GitHub.

    #!/bin/bash
    
    #-------------------------------------------------------------------------------#
    # SCRIPT TO FLUSH ALL HBASE TABLES.
    #-------------------------------------------------------------------------------#
    
    LIST_OF_TABLES=/tmp/tables.txt
    HBASE_SCRIPT=/tmp/hbase_script.txt
    TARGET_HOST=$1
    
    usage ()
    {
        if [[ "$1" == "-h" ]] || [[ "$1" == "--help" ]]
        then
            cat << ...
    
    Usage: 
    
    $0 [hostname]
    
    Providing hostname is optional and not required when the script is executed within HDInsight cluster with access to 'hbase shell'.
    
    However hostname should be provided when executing the script as a script-action from HDInsight portal.
    
    For Example:
    
        1.  Executing script inside HDInsight cluster (where 'hbase shell' is 
            accessible):
    
            $0 
    
            [No need to provide hostname]
    
        2.  Executing script from HDinsight Azure portal:
    
            Provide Script URL.
    
            Provide hostname as a parameter (i.e. hn0, hn1 or wn2 etc.).
    ...
            exit
        fi
    }
    
    validate_machine ()
    {
        THIS_HOST=`hostname`
    
        if [[ ! -z "$TARGET_HOST" ]] && [[ $THIS_HOST  != $TARGET_HOST* ]]
        then
            echo "[INFO] This machine '$THIS_HOST' is not the right machine ($TARGET_HOST) to execute the script."
            exit 0
        fi
    }
    
    get_tables_list ()
    {
    hbase shell << ... > $LIST_OF_TABLES 2> /dev/null
        list
        exit
    ...
    }
    
    add_table_for_flush ()
    {
        TABLE_NAME=$1
        echo "[INFO] Adding table '$TABLE_NAME' to flush list..."
        cat << ... >> $HBASE_SCRIPT
            flush '$TABLE_NAME'
    ...
    }
    
    clean_up ()
    {
        rm -f $LIST_OF_TABLES
        rm -f $HBASE_SCRIPT
    }
    
    ########
    # MAIN #
    ########
    
    usage $1
    
    validate_machine
    
    clean_up
    
    get_tables_list
    
    START=false
    
    while read LINE 
    do 
        if [[ $LINE == TABLE ]] 
        then
            START=true
            continue
        elif [[ $LINE == *row*in*seconds ]]
        then
            break
        elif [[ $START == true ]]
        then
            add_table_for_flush $LINE
        fi
    
    done < $LIST_OF_TABLES
    
    cat $HBASE_SCRIPT
    
    hbase shell $HBASE_SCRIPT << ... 2> /dev/null
    exit
    ...
    
    
  4. 古い HBase クラスターへのインジェストを停止します。Stop ingestion to the old HBase cluster.

  5. memstore 内の最近のデータが確実にすべてフラッシュされるようにするために、前のスクリプトをもう一度実行します。To ensure that any recent data in the memstore is flushed, run the previous script again.

  6. 古いクラスター上の Apache Ambari (https://OLDCLUSTERNAME.azurehdidnsight.net) にサインインして、HBase サービスを停止します。Sign in to Apache Ambari on the old cluster (https://OLDCLUSTERNAME.azurehdidnsight.net) and stop the HBase services. サービスを停止することを確認するプロンプトが表示されたら、HBase のメンテナンス モードをオンにするためのチェックボックスをオンにします。When you prompted to confirm that you'd like to stop the services, check the box to turn on maintenance mode for HBase. Ambari への接続とその使用方法の詳細については、「Ambari Web UI を使用した HDInsight クラスターの管理」を参照してください。For more information on connecting to and using Ambari, see Manage HDInsight clusters by using the Ambari Web UI.

    Ambari で、[Service Actions](サービス アクション) の下の [Services](サービス) > [HBase] > [Stop](停止) をクリックします

    [Turn On Maintenance Mode for HBase](HBase のメンテナンス モードをオンにする) チェックボックスをオンにし、操作を確定します

  7. 新しい HDInsight クラスターの Ambari にサインインします。Sign in to Ambari on the new HDInsight cluster. fs.defaultFS HDFS 設定を、元のクラスターで使用されているコンテナー名を指すように変更します。Change the fs.defaultFS HDFS setting to point to the container name used by the original cluster. この設定は、 [HDFS] > [Configs](構成) > [Advanced](詳細) > [Advanced core-site](高度なコアサイト) にあります。This setting is under HDFS > Configs > Advanced > Advanced core-site.

    Ambari で、[Services](サービス) > [HDFS] > [Configs](構成) > [Advanced](詳細) をクリックします

    Ambari で、コンテナー名を変更する

  8. 拡張書き込み機能を備えた HBase クラスターを使用していない場合は、この手順をスキップしてください。この手順は、拡張書き込み機能を備えた HBase クラスターにのみ必要です。If you aren't using HBase clusters with the Enhanced Writes feature, skip this step. It's needed only for HBase clusters with Enhanced Writes feature.

    hbase.rootdir パスを、元のクラスターのコンテナーを指すように変更します。Change the hbase.rootdir path to point to the container of the original cluster.

    Ambari で、HBase rootdir のコンテナー名を変更する

  9. HDInsight 3.6 を 4.0 にアップグレードする場合は、次の手順に従います。それ以外の場合は手順 10 までスキップしてください。If you're upgrading HDInsight 3.6 to 4.0, follow the steps below, otherwise skip to step 10:

    1. Ambari で必要なすべてのサービスを再起動するために、 [Services](サービス\ ) > [Restart All Required](必須をすべて再起動) を選択します。Restart all required services in Ambari by selecting Services > Restart All Required.
    2. HBase サービスを停止します。Stop the HBase service.
    3. Zookeeper ノードに SSH 接続し、zkCli コマンド rmr /hbase-unsecure を実行して Zookeeper から HBase ルートの znode を削除します。SSH to the Zookeeper node, and execute the zkCli command rmr /hbase-unsecure to remove the HBase root znode from Zookeeper.
    4. HBase を再起動します。Restart HBase.
  10. 4.0 以外の HDInsight バージョンにアップグレードする場合は、次の手順に従います。If you're upgrading to any other HDInsight version besides 4.0, follow these steps:

    1. 変更を保存します。Save your changes.
    2. Ambari の指示に従って、必要なすべてのサービスを再起動します。Restart all required services as indicated by Ambari.
  11. アプリケーションが新しいクラスターを指すように設定します。Point your application to the new cluster.

    注意

    アップグレードするとアプリケーションの静的 DNS が変更されます。The static DNS for your application changes when upgrading. この DNS をハードコーディングする代わりに、ドメイン名の DNS 設定でクラスターの名前を指す CNAME を構成できます。Rather than hard-coding this DNS, you can configure a CNAME in your domain name's DNS settings that points to the cluster's name. もう 1 つの選択肢は、再デプロイせずに更新できる、アプリケーション用の構成ファイルを使用することです。Another option is to use a configuration file for your application that you can update without redeploying.

  12. インジェストを開始して、すべてが期待どおりに機能しているかどうかを確認します。Start the ingestion to see if everything is functioning as expected.

  13. 新しいクラスターに問題がない場合は、元のクラスターを削除します。If the new cluster is satisfactory, delete the original cluster.

次の手順Next steps

Apache HBase の詳細と HDInsight クラスターのアップグレードについては、次の記事を参照してください。To learn more about Apache HBase and upgrading HDInsight clusters, see the following articles: