Azure HDInsight で Apache HBase Master (HMaster) を開始できない

この記事では、Azure HDInsight クラスターと対話するときの問題のトラブルシューティング手順と可能な解決策について説明します。

シナリオ: Master startup cannot progress, in holding-pattern until region comes online

問題

次の警告のため、HMaster を開始できませんでした:

hbase:namespace,,<timestamp_region_create>.<encoded_region_name>.is NOT online; state={<encoded_region_name> state=OPEN, ts=<some_timestamp>, server=<server_name>}; ServerCrashProcedures=true. Master startup cannot progress, in holding-pattern until region onlined. 

たとえば、実際のメッセージでは、パラメーター値が異なる場合があります。

hbase:namespace,,1546588612000.0000010bc582e331e3080d5913a97000. is NOT online; state={0000010bc582e331e3080d5913a97000 state=OPEN, ts=1633935993000, server=<wn fqdn>,16000,1622012792000}; ServerCrashProcedures=false. Master startup cannot progress, in holding-pattern until region onlined.

原因

HMaster は、リージョン サーバーで WAL ディレクトリをチェックしてから、オンラインでオープン リージョンを戻します。 この場合、そのディレクトリが存在しない場合、それは開始されていないことになります

解決策

  1. 次のコマンドを使用して、このダミー ディレクトリを作成します。sudo -u hbase hdfs dfs -mkdir /hbase-wals/WALs/<wn fqdn>,16000,1622012792000

  2. Ambari UI から HMaster サービスを再起動します。

hbase-2.x を使用している場合は、hbck2 を使用して名前空間とメタ テーブルを割り当てる方法の詳細情報を参照してください

シナリオ: アトミックな名前変更の失敗

問題

スタートアップ プロセス中に予期しないファイルが識別されました。

原因

HMaster は、起動プロセス中、データをスクラッチ (.tmp) フォルダーからデータ フォルダーに移動するなど、多くの初期化手順を実行します。 HMaster では、先書きログ (WAL) フォルダーを調べて、応答していないリージョン サーバーが存在するかどうかも確認されます。

HMaster では、WAL フォルダーに対して基本的な list コマンドが実行されます。 いずれかのフォルダーに予期しないファイルが見つかると、例外がスローされ、HMaster は起動しません。

解決方法

呼び出し履歴を確認し、問題の原因となっているフォルダーを特定します (たとえば、WAL フォルダーや .tmp フォルダーが原因の場合があります)。 次に、Azure Storage Explorer または HDFS コマンドを使用して問題のファイルを特定します。 通常、このファイルは *-renamePending.json と呼ばれます。 (*-renamePending.json ファイルは、WASB ドライバーのアトミックな名前変更操作を実装するために使用されるジャーナル ファイルです。この実装のバグのため、プロセスがクラッシュした後もこれらのファイルが残る場合があります。)Cloud Explorer または HDFS コマンドを使用して、このファイルを強制的に削除します。

この場所に $$$.$$$ のような名前の一時ファイルが存在する場合もあります。 このファイルを表示するには、HDFS ls コマンドを使用する必要があります。Azure Storage Explorer でファイルを表示することはできません。 このファイルを削除するには、HDFS コマンド hdfs dfs -rm /\<path>\/\$\$\$.\$\$\$ を使用します。

これらのコマンドを実行したら、HMaster はすぐに起動します。


シナリオ: サーバーのアドレスがリストされていません

問題

hbase: meta テーブルがオンラインになっていないことを示すメッセージが表示される場合があります。 hbck を実行すると、hbase: meta table replicaId 0 is not found on any region. であることが報告される場合があります。HMaster ログに、次のメッセージが表示されることがありますNo server address listed in hbase: meta for region hbase: backup <region name>

原因

HBase を再起動した後、HMaster を初期化できませんでした。

解決方法

  1. HBase シェルで次のコマンドを入力します (適宜、実際の値に置き換えてください)。

    scan 'hbase:meta'
    delete 'hbase:meta','hbase:backup <region name>','<column name>'
    
  2. hbase: namespace エントリを削除します。 このエントリがあると、hbase: namespace テーブルをスキャンしたときに同じエラーが報告されます。

  3. Ambari UI からアクティブ HMaster を再起動し、HBase を実行状態にします。

  4. HBase シェルで次のコマンドを実行して、すべてのオフライン テーブルを起動します。

    hbase hbck -ignorePreCheckPermission -fixAssignments
    

シナリオ: java.io.IOException: Timedout

問題

HMaster は、java.io.IOException: Timedout 300000ms waiting for namespace table to be assigned のような致命的例外によってタイムアウトになりました。

原因

この問題は、HMaster サービスを再起動したときに、フラッシュされていない多数のテーブルとリージョンが存在する場合に発生します。 タイムアウトは、HMaster の既知の欠陥です。 一般的なクラスター スタートアップ タスクは時間がかかることがあります。 namespace テーブルがまだ割り当てられていない場合、HMaster はシャットダウンします。 時間のかかるスタートアップ タスクが発生するのは、フラッシュされていないデータが大量に存在し、5 分のタイムアウトでは間に合わない場合です。

解決方法

  1. Apache Ambari UI 内で、 [HBase]>[Configs](構成) に移動します。 カスタム hbase-site.xml ファイルに、次の設定を追加します。

    Key: hbase.master.namespace.init.timeout Value: 2400000  
    
  2. 必要なサービス (HMaster と、場合によっては他の HBase サービス) を再起動します。


シナリオ: リージョン サーバーの頻繁な再起動

問題

ノードが定期的に再起動します。 リージョン サーバー ログに、次のようなエントリが表示される場合があります。

2017-05-09 17:45:07,683 WARN  [JvmPauseMonitor] util.JvmPauseMonitor: Detected pause in JVM or host machine (eg GC): pause of approximately 31000ms
2017-05-09 17:45:07,683 WARN  [JvmPauseMonitor] util.JvmPauseMonitor: Detected pause in JVM or host machine (eg GC): pause of approximately 31000ms
2017-05-09 17:45:07,683 WARN  [JvmPauseMonitor] util.JvmPauseMonitor: Detected pause in JVM or host machine (eg GC): pause of approximately 31000ms

原因: zookeeper のセッション タイムアウト

regionserver JVM GC の長時間の一時停止が発生しています。 この一時停止により、regionserver が応答しなくなり、zookeeper セッション タイムアウトの 40 秒以内に HMaster にハートビートを送信できなくなります。 HMaster は regionserver が機能していないと認識し、regionserver を中止して再起動します。

軽減するには、Zookeeper のセッション タイムアウトを変更します。hbase-site 設定 zookeeper.session.timeout だけでなく、Zookeeper の zoo.cfg 設定 maxSessionTimeout も変更する必要があります。

  1. Ambari UI にアクセスし、[HBase] -> [Configs](構成) -> [Settings](設定) に移動し、[Timeouts](タイムアウト) セクションで Zookeeper セッション タイムアウトの値を変更します。

  2. Ambari UI にアクセスし、[Zookeeper] -> [Configs](構成) -> [Custom](カスタム)zoo.cfg に移動し、次の設定を追加/変更します。 値が HBase の zookeeper.session.timeout と同じであることを確認します。

    Key: maxSessionTimeout Value: 120000  
    
  3. 必要なサービスを再起動します。

原因: オーバーロードされた RegionServer

RS あたりの領域の数 (上限)」に従って上限を計算します。 例: 8000 (Region server Heap -- Xmx in MB) * 0.4 (hbase.regionserver.global.memstore.size) /64 (hbase.regionserver.hlog.blocksize/2) = 50

軽減するには、HBase クラスターをスケールアップします。


シナリオ: ログの分割エラー

問題

HMasters が HBase クラスターで起動できませんでした。

原因

セカンダリ ストレージ アカウントに対して HDFS と HBase の設定が正しく構成されていません。

解決方法

set hbase.rootdir: wasb://@.blob.core.windows.net/hbase および Ambari でサービスを再起動します。


次の手順

問題がわからなかった場合、または問題を解決できない場合は、次のいずれかのチャネルでサポートを受けてください。

  • Azure コミュニティのサポートを通じて Azure エキスパートから回答を得る。

  • カスタマー エクスペリエンスを向上させるための Microsoft Azure の公式アカウントの @AzureSupport に連絡する。 Azure コミュニティで適切なリソース (回答、サポート、エキスパートなど) につながる。

  • さらにヘルプが必要な場合は、Azure portal からサポート リクエストを送信できます。 メニュー バーから [サポート] を選択するか、 [ヘルプとサポート] ハブを開いてください。 詳細については、「Azure サポート要求を作成する方法」を参照してください。 サブスクリプション管理と課金サポートへのアクセスは、Microsoft Azure サブスクリプションに含まれていますが、テクニカル サポートはいずれかの Azure のサポート プランを通して提供されます。