Apache HBase(バージョン0.90以降)を初めて使用する場合、システムで使用されるネットワークポートの構成は少々圧倒される可能性があります。
このブログ投稿では、さまざまなHBaseプロセスで使用されるすべてのTCPポートと、それらが使用される方法と理由を(すべて1か所で)学習し、管理者がファイアウォール設定のトラブルシューティングとセットアップを行い、新しい開発者がデバッグする方法を支援します。
一般的なHBaseクラスターには、1つのアクティブなマスター、1つまたは複数のバックアップマスター、およびリージョンサーバーのリストがあります。バックアップマスターは、次のアクティブマスターになるのを待っているスタンバイマスターです。アクティブになる前は、どのポートでもリッスンしません。 (HBaseのスケーラビリティーの仕組みについて詳しくは、こちらをご覧ください。)
クラスタ内の各サーバーは、クライアントや他のHBaseサーバーからのリクエストをメインポートでリッスンします。各サーバーには、JettyWebUIサーバーも組み込まれています。
次の図は、さまざまなコンポーネント間の通信を示しています。 (青色のコンポーネントはHBaseクラスターに属し、通常はファイアウォールの背後にあります。灰色のコンポーネントは外部クライアントであり、通常はHBaseクラスターのファイアウォールの外側にあります。緑色のコンポーネントはWebブラウザーであり、通常はファイアウォールの外側にあります。)
- クライアントアプリケーションはApacheZooKeeperと通信して、マスターとメタリージョンサーバーの場所を見つけます(ルートリージョンはHBaseバージョン0.96で削除されています)。
- クライアントアプリケーションはリージョンサーバーと通信して、テーブルの読み取り/書き込み/スキャンを行います。
- クライアントアプリケーションはマスターと通信して、既存のテーブルに関する情報を取得し、テーブルを動的に作成/削除し、列ファミリーを追加/削除します。
- マスターはリージョンサーバーと通信して、リージョンを開く/閉じる/移動/分割/フラッシュ/コンパクトにします。
- マスターはZooKeeperにデータを配置して、アクティブなマスターとメタリージョンサーバーの場所を保存し、ログ分割タスクを作成し、リージョンサーバーのステータスを追跡します。
- リージョンサーバーはZooKeeperでデータを読み取り、ログ分割を実行し、マスターの場所とクラスターのステータスを追跡します。
- リージョンサーバーはマスターと通信して、リージョンサーバーの起動と負荷を報告します。
- 場合によっては、リージョンサーバーがメタリージョンと通信してリージョンのステータスを確認し、リージョン分割で新しいドーターリージョンを作成します。
- RESTクライアントはRESTサーバーと通信してHBaseにアクセスします。
- Thriftクライアントは、HBaseにアクセスするためにThriftサーバーと通信します。
- ユーザーはブラウザからマスターウェブUIにアクセスします。
- ユーザーはブラウザからリージョンサーバーのウェブUIにアクセスします。
- ユーザーはブラウザからRESTサーバーのウェブUIにアクセスします。
- ユーザーはブラウザからThriftサーバーのウェブUIにアクセスします。
一部のHBaseクラスターには、RESTサーバーまたはThriftサーバーのリストが含まれている場合があります。 RESTサーバーとThriftサーバーはどちらもオプションです。これらは、HBaseクラスターへのREST/Thriftアクセスを提供する場合にのみ必要です。 HBaseにとって、これらは単なる他のクライアントアプリケーションです。他のHBaseサーバーと同様に、クライアントリクエストのメインポートとWebUIポートもリッスンします。
次の表は、クライアントアプリケーションがHBaseクラスターと通信するために使用するポート、ユーザーがクラスター情報を確認するために使用するポート、およびさまざまなHBaseコンポーネントが相互に通信するために使用するポートを示しています。
コンポーネント | 構成パラメーター | デフォルト値 | 使用場所 |
ZooKeeper | | 2181 | 1,5,6 |
| | 60000 | 3,7 |
| | 60010 | 11 |
| | 60020 | 2,4,8 |
| | 60030 | 12 |
RESTサーバー | | 8080 | 9 |
RESTサーバー | | 8085 | 13 |
| | 9090 | 10 |
| | 9095 | 14 |
*HBaseバージョン0.94.5で導入されました。これらは、コマンドラインオプション--infoport
で指定することもできます。 対応するサーバーを起動するとき。
**コマンドラインオプション-p
で指定することもできます。 対応するサーバーを起動するとき。
1つのポート(HDFSネームノードポート)は、テーブルにリストされていません。これは、このポートの個別のパラメーターではないためです。これは、「hbase.root」(たとえば、「hdfs://namenode.foobar.com:35802 / hbase」)の一部として構成され、HDFSNameNodeポートは35802に構成されています。 hbase.root」、デフォルトは8020です。
メインポートに加えて、クラスター内の各サーバー(ZooKeeperを除く)もWebUIポートをリッスンします。 Web UIは、対応するサーバーに組み込まれたJettyサーバーです。 Web UIは、スレッドダンプやローカルログなど、対応するサーバーに関する人間が読める形式の情報を提供します。マスターWebUIには、すべてのリージョンサーバーWeb UIへのリンクがあり、HBaseクラスターの現在のステータスを確認するための完璧なエントリポイントになります。
REST / Thriftサーバーは、HBaseのオプションのプロキシです。他のHBaseクライアントアプリケーションと同じようにHBaseと通信します。ただし、これらは通常、他のHBaseサーバーと一緒にHBaseクラスター内にデプロイされます。
クライアントアプリケーションは通常、HBaseクラスターの外にデプロイされます。 REST/Thriftクライアントもクラスターの外部にデプロイされます。 HBaseクラスターがファイアウォールの背後にある場合、これらの対応するポートはデフォルトで開いている必要があります:
クライアントアプリケーションへのアクセスを許可するには:
- 2181(hbase.zookeeper.property.clientPort)
- 60000(hbase.master.port)
- 60020(hbase.regionserver.port)
REST / Thriftクライアントアクセスを許可するには:
- 8080(hbase.rest.port)
- 9090(hbase.regionserver.thrift.port)
ファイアウォールの外側からのWebUIアクセスが許可されている場合は、対応するWebUIポートも開いている必要があります。
- 60010(hbase.master.info.port)
- 60030(hbase.regionserver.info.port)
- 8085(hbase.rest.info.port)
- 9095(hbase.thrift.info.port)
結論
この投稿では、HBase内部コンポーネント、クライアントアプリケーション、およびユーザー/管理者が使用するポートの概要をユースケース別に整理しました。
ただし、HBaseはHDFS上で実行されるため、HDFSポートを知ることも重要です。 HBaseでMapReduceを実行するには、MapReduceポートについても知っておく必要があります。これらのHadoop関連のポートについては、Hadoopデフォルトポートのクイックリファレンスを参照してください。 。
Jimmy Xiangは、プラットフォームチームのソフトウェアエンジニアです。
>質問がありますか?それらをHBaseのコミュニティフォーラムに投稿してください。