Hueは、Hadoopの次世代SQLエンジンであるImpala用のインタフェースを提供しています。さらなるパフォーマンスを提供するために、HueはImpalaのワーカーの全てに渡ってクエリのロードを分散することができます。
チュートリアル
このチュートリアルでは、複数のImpalad(Impalaデーモン)にクエリを行うためにHueをセットアップする方法を説明します:
- 複数のImpaladで動作するように、4ノードのRed Hat 6クラスタのうちの一つのノードにHue 3.6を設定します。
- HAProxy 1.4を使用してimpaladへの接続をロードバランスを行いますが、接続の持続が行える、どのようなロードバランサーでも動作するでしょう。
これは、Hueが複数のImpaladとどのように通信するのかを紹介した簡単なビデオです。
Hueを設定する
複数のImpaladと通信するためにHueを設定する、2つの方法があります。
Cloudera Managerによる設定
(Cloudera Managerを日本語でセットアップしている場合には、適宜読み替えて下さい)
- Cloudera Managerから、メニューの“Clusters”をクリックして、Hueサービスを探します。
[<img class="alignnone wp-image-1228" src="https://cdn.gethue.com/uploads/2014/05/impala-1.png" alt="impala-1" width="657" height="556" data-wp-pid="1228" />][4]
- Hueサービスから、 “Configuration -> View and Edit”を選択します。
[<img class="alignnone wp-image-1227" src="https://cdn.gethue.com/uploads/2014/05/impala-2.png" alt="impala-2" width="292" height="165" data-wp-pid="1227" />][5]
- 適切なロードバランサーとソケットのタイムアウトを使用するために、Cloudera Managerで安全バルブ(safety valve)の設定を行う必要があります。“Service-Wide -> Advanced” に移動し、“Hue Service Advanced Configuration Snippet (Safety Valve)”の値をクリックします。値には、以下をテンプレートとして利用することができます:
[impala] server_host=<hostname running HAProxy> server_port=<port HAProxy is bound to> server_conn_timeout=<timeout in seconds>
Cloudera ManagerでHueを設定するためのより多くの情報は、Managing Clustersをご覧下さい(英語)。
手動での設定
- お好みのエディタで/etc/hue/hue.iniを開きます。
- “impala”セクションの下にある“server_conn_timeout”設定を大きな値(例:1時間)に変更します。この値は秒単位で設定しなければなりません(1時間 = 3600秒)。設定オプションは「Cloudera Managerによる設定」も参照して下さい。
[<img class="alignnone wp-image-1229" src="https://cdn.gethue.com/uploads/2014/05/impala-3.png" alt="impala-3" width="492" height="405" data-wp-pid="1229" />][7]
- 次に、hue.iniの”impala”セクションで、新しいホストとポートをセットしなければなりません。ホスト名は “server_host”に、ポートは “server_port” に定義されています。設定オプションは「Cloudera Managerによる設定」も参照して下さい。
HA Proxy のインストールと設定
- HA Proxy 1.4のバイナリ形式のファイルをダウンロードして展開します。
- 以下のHA Proxy configurationを/etc/impala/haproxy-impala.confに設定します:
global
daemon
nbproc 1
maxconn 100000
log /dev/log local6
defaults
log global
mode tcp
option tcplog
option tcpka
timeout connect 3600000ms
timeout client 3600000ms
timeout server 3600000ms
listen impala
bind 0.0.0.0:10001
balance leastconn
server impala1 server1.cloudera.com:21050 check
server impala2 server2.cloudera.com:21050 check
server impala3 server3.cloudera.com:21050 check
- HA Proxyを開始します:
haproxy -f /etc/impala/haproxy-impala.conf
鍵となる設定オプションは、listen セクションのbalance と server です。defaultsセクションの timeout 設定オプションもです。balanceパラメータをleastconnにセットすると、Hueは最小コネクション数でimpaladが新しい接続を作成することを保証します。serverパラメータには、以下の形式で、ロードバランシング時にどのサーバーが使用されるかを定義します:
server <name> <address>[:port] [settings ...]
上記の設定では、”impala1″サーバーは“impala1.cloudera.com:21050”、”impala2″サーバーは“impala2.cloudera.com:21050”、”impala3″サーバーは“impala3.cloudera.com:21050”でそれぞれ利用可能です。timeout設定パラメータは、TCP接続が(両側で)どのぐらい生きていなければならないのかを定義します。この例では、クライアントのタイムアウト、サーバーのタイムアウト、接続タイムアウトは全て1時間に設定されています。
HA Proxy“0.0.0.0:10001”にバインドするように設定されています。従って、Hueは少なくとも利用するImpaladの一つを透過的に選ぶ HA Proxyを示すことができるようになっています。
まとめ
Impalaのクエリのロードバランシングは、負荷を全てのImpalad(例えば、最終結果の集約を行う)に分散します。現在のImpaladの設計では「不揮発」のネットワーク接続が必要とされるので、Hueは接続を永続的できます。私たちは、これが多くのHadoopクラスタに役立つことを願っています!