E-MapReduce (EMR) クラスターで複数の HiveServer2 サービスを実行する場合、ZooKeeper と Server Load Balancer (SLB) を使用して、複数のノードに負荷を分散させることができます。このトピックでは、標準クラスターと Kerberos が有効なクラスターの両方で HiveServer2 の負荷分散を設定および使用する方法について説明します。
制限事項
このトピックは、[High Service Availability] が有効になっているクラスターにのみ適用されます。
まず、高可用性クラスターを作成する必要があります。詳細については、「クラスターの作成」をご参照ください。高可用性 機能を有効にする必要があります。この機能が有効になると、EMR はマスターノードを異なる基盤ハードウェアに分散させ、障害のリスクを低減します。
標準 E-MapReduce クラスター
以下の方法は、[Kerberos ID 認証] が無効になっているクラスターに適用されます。
ZooKeeper による負荷分散
高可用性クラスターには、デフォルトで ZooKeeper がインストールされています。次の方法を使用すると、ZooKeeper が接続用の HiveServer2 インスタンスを選択し、負荷分散を実現します。
-
SSH 経由でクラスターに接続します。詳細については、「クラスターへのログオン」をご参照ください。
-
次のコマンドを実行します。ZooKeeper は、接続に利用可能な HiveServer2 インスタンスを選択します。
beeline -u 'jdbc:hive2://master-1-1:2181,master-1-2:2181,master-1-3:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2'説明コマンド内の
master-1-1:2181,master-1-2:2181,master-1-3:2181は、ZooKeeper の接続文字列です。Hue が負荷分散された HiveServer2 インスタンスに接続できるようにするには、Hue 設定の [hue] タブで、次の 3 つのカスタムパラメーターを追加します。
パラメーター
説明
zookeeper.clusters.default.hostports
ZooKeeper の接続文字列です。実際の値に置き換えてください。例:master-1-1:2181,master-1-2:2181,master-1-3:2181。
beeswax.hive_discovery_hs2
値を
trueに設定します。beeswax.hive_discovery_hiveserver2_znode
値を
/hiveserver2に設定します。
SLB による負荷分散
-
SLB インスタンスを作成します。詳細については、「CLB インスタンスの作成と管理」をご参照ください。
-
HiveServer2 サービスを実行する ECS インスタンスを [default server group] に追加します。必要に応じて、各 ECS インスタンスの重みを設定します。
詳細については、「デフォルトサーバーグループの管理」をご参照ください。
-
TCP リスナーを設定します。フロントエンドリスナーポートはカスタマイズできます。[Backend Protocol/Port] を TCP:10000 に設定します。
要件に基づいてスケジューリングアルゴリズムを選択します。詳細については、「TCP リスナーの追加」をご参照ください。
-
HiveServer2 に接続します。
-
SSH 経由でクラスターに接続します。詳細については、「クラスターへのログオン」をご参照ください。
-
次のコマンドを実行して、ロードバランサー経由で HiveServer2 サービスに接続します。
beeline -u 'jdbc:hive2://<slb_ip_or_host>:<slb_port>'次のパラメーターを実際の値に置き換えます:
-
<slb_ip_or_host>:SLB インスタンスの IP アドレスまたはバインドされたホスト名。 -
<slb_port>:SLB インスタンスのフロントエンドリスナーポート。
-
このロードバランサーを介して Hue が HiveServer2 と通信できるようにするには、Hue 設定の [hue] タブで次のパラメーターを変更します。
パラメーター
説明
hive_server2_host
SLB インスタンスの IP アドレスまたはバインドされたホスト名。
hive_server2_port
SLB インスタンスのフロントエンドリスナーポート。
-
Kerberos が有効な EMR クラスター
以下の方法は、[Kerberos ID 認証] が有効になっているクラスターに適用されます。
ZooKeeper による負荷分散
-
kinitコマンドを実行して Kerberos で認証し、チケット認可チケットを取得します。詳細については、「Kerberos 認証の使用」をご参照ください。 -
HiveServer2 に接続します。
-
SSH 経由でクラスターに接続します。詳細については、「クラスターへのログオン」をご参照ください。
-
次のコマンドを実行します。ZooKeeper は、接続に利用可能な HiveServer2 インスタンスを選択します。
beeline -u 'jdbc:hive2://master-1-1:2181,master-1-2:2181,master-1-3:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2'説明コマンド内の
master-1-1:2181,master-1-2:2181,master-1-3:2181は、ZooKeeper の接続文字列です。Kerberos が有効な EMR クラスターでは、Hue は ZooKeeper 経由で負荷分散された HiveServer2 への接続をサポートしていません。そのため、Hue から接続する場合は SLB 方式を使用してください。
-
SLB による負荷分散
「標準 E-MapReduce クラスター」のセクションで説明しているように、SLB インスタンスを作成および設定できます。Kerberos が有効なクラスターでは、HiveServer2 が正常に接続するために、Kerberos プリンシパルも設定する必要があります。
この例では、SLB の IP アドレスが 121.40.**.** で、フロントエンドリスナーポートが 10000 であると仮定します。これらを実際の値に置き換えてください。
-
kinitコマンドを実行して Kerberos で認証し、チケット認可チケットを取得します。詳細については、「Kerberos 認証の使用」をご参照ください。 -
121.40.**.** アドレス用の Hive プリンシパルを作成し、キータブをエクスポートします。
-
クラスターの master-1-1 ノードにログオンします。詳細については、「クラスターへのログオン」をご参照ください。
-
次のコマンドを実行して、Kerberos 管理ツールを起動します:
kadmin.local -
次のコマンドを実行してプリンシパルを作成し、
/tmp/slb.keytabにエクスポートします:addprinc -randkey hive/121.40.**.** xst -k /tmp/slb.keytab hive/121.40.**.** exitお使いの EMR Kerberos クラスターが外部の MIT Kerberos インスタンスと統合されている場合は、
kadmin.localまたはkadminを使用して KDC に接続し、addprincおよびxstコマンドを実行します。重要Kerberos キータブを複数回エクスポートすると、以前のキータブファイルが無効になる場合があります。
slb.keytabには、最新のプリンシパルのみが含まれていることを確認してください。プリンシパルを再度エクスポートする必要がある場合は、まず以前に生成されたキータブファイルを削除する必要があります。
-
-
slb.keytabファイルを、HiveServer2 サービスが実行されているすべてのノードに転送します。次に、各ノードで ktutil ツールを使い、次のコマンドを実行してslb.keytabの内容を /etc/taihao-apps/hive-conf/keytab/hive.keytab ファイルにマージします:ktutil rkt /tmp/slb.keytab wkt /etc/taihao-apps/hive-conf/keytab/hive.keytab quit -
次のコマンドを実行して、hive.keytab ファイルの内容を表示します:
klist -kt /etc/taihao-apps/hive-conf/keytab/hive.keytab[root@master-1-1(172.16.xxx) ~]# klist -kt /etc/taihao-apps/hive-conf/keytab/hive.keytab Keytab name: FILE:/etc/taihao-apps/hive-conf/keytab/hive.keytab KVNO Timestamp Principal ---- ------------------- ------------------------------------------------------ 2 10/30/2024 14:12:05 hive/master-1-1.c-7d27ce0e7xxx.cn-hangzhou.emr.aliyuncs.com@EMR.C-7D27CE0E7xxx.COM 2 10/30/2024 14:12:05 hive/master-1-1.c-7d27ce0e7xxx.cn-hangzhou.emr.aliyuncs.com@EMR.C-7D27CE0E7xxx.COM 2 10/30/2024 14:12:06 hive/master-1-1.c-7d27ce0e7xxx.cn-hangzhou.emr.aliyuncs.com@EMR.C-7D27CE0E7xxx.COM 2 10/30/2024 14:12:06 hive/master-1-1.c-7d27ce0e7xxx.cn-hangzhou.emr.aliyuncs.com@EMR.C-7D27CE0E7xxx.COM 2 10/30/2024 14:12:06 hive/master-1-1.c-7d27ce0e7xxx.cn-hangzhou.emr.aliyuncs.com@EMR.C-7D27CE0E7xxx.COM 2 10/30/2024 14:12:06 hive/master-1-1.c-7d27ce0e7xxx.cn-hangzhou.emr.aliyuncs.com@EMR.C-7D27CE0E7xxx.COM 2 10/30/2024 14:26:56 hive/121.40.xxx @EMR.C-7D27CE0E7xxx.COM 2 10/30/2024 14:26:56 hive/121.40.xxx @EMR.C-7D27CE0E7xxx.COM 2 10/30/2024 14:26:56 hive/121.40.xxx @EMR.C-7D27CE0E7xxx.COM 2 10/30/2024 14:26:56 hive/121.40.xxx @EMR.C-7D27CE0E7xxx.COM 2 10/30/2024 14:26:56 hive/121.40.xxx @EMR.C-7D27CE0E7xxx.COM 2 10/30/2024 14:26:56 hive/121.40.xxx @EMR.C-7D27CE0E7xxx.COM 2 10/30/2024 14:26:56 hive/121.40.xxx @EMR.C-7D27CE0E7xxx.COM -
クラスターの Hive 設定を変更します。
EMR コンソールで、Hive サービスの Configure タブに移動します。[hive.server2.authentication.kerberos.principal] パラメーターを検索し、その値を前の手順で作成したプリンシパル hive/121.40.**.**@EMR.**.COM に変更します。その後、設定を保存して適用します。
-
HiveServer2 サービスを再起動します。
-
EMR コンソールで、Hive サービスの Status タブに移動します。HiveServer2 の行で、[Actions] 列の 再起動 をクリックします。
-
実行理由を入力し、OK をクリックします。
-
Confirm ダイアログボックスで、OK をクリックします。
-
-
master-1-1 ノードで、次のコマンドを実行して HiveServer2 に接続します:
beeline -u 'jdbc:hive2://121.40.**.**:10000/default;principal=hive/121.40.**.**@EMR.**.COM'