HueからImpala+Kuduへの接続を全てDockerで行う

Docker

Kudu-ImpalaのDockerイメージを使うと、KuduやImpalaのインストールは不要で、ImpalaからSQLを用いてKuduにクエリを行うことができます。

ImpalaもKuduも、本来は数十〜数百ノードに分散してスケールアウトし、大規模なデータセットにクエリを行うためのものですが、Dockerを利用することにより、インストール不要で簡単に検証できるのは便利ですね。なお、Kudu-Impalaに関しては先日公開した記事にも書いてあるので、興味がある方はご覧ください。

Kudu + Impala に Hue の Docker からアクセスする

さて、このKudu-ImpalaのDockerコンテナに、Hueから接続すると言う記事があります。(先ほど日本語版が公開されました)
https://jp.gethue.com/blog/quickstart-sql-editor-for-apache-impala/
この記事ではローカルにインストール済みのHue を使っていますが、Hueもインストールしたくない、と言う方もいると思うので、Hue の Docker イメージを使って実現しました。以下手順です。

Kudu-Impala Dockerコンテナを実行する

docker run -d --name kudu-impala -p 21000:21000 -p 21050:21050 -p 25000:25000 -p 25010:25010 -p 25020:25020 --memory=4096m apache/kudu:impala-latest impala

ImpalaのIPアドレスを取得する

まずdocker ps で取得したコンテナIDを取得します。

macmini:hue kawasaki$ docker ps
CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS              PORTS                                                                                                                              NAMES
04eb0636631f        apache/kudu:impala-latest   "/impala-entrypoint.…"   2 hours ago         Up 2 hours          0.0.0.0:21000->21000/tcp, 0.0.0.0:21050->21050/tcp, 0.0.0.0:25000->25000/tcp, 0.0.0.0:25010->25010/tcp, 0.0.0.0:25020->25020/tcp   kudu-impala

この環境では04eb0636631fでした。IPアドレスを取得します。

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 04eb0636631f
172.17.0.2

172.17.0.2ですね。このあと取得したIPアドレスをHueに設定します。

HueのDockerコンテナを実行する

sudo docker pull gethue/hue:latest
docker run -it -p 8888:8888 gethue/hue:latest bash

Hueの設定ファイルを変更する必要があるので、vimをインストールします。

root@bc2cfd951dba:/usr/share/hue# apt-get update;apt-get install vim

エディタ(vim)を使って hue.ini の impala セクションに IP アドレスを設定します

#vi desktop/conf/hue.ini

(略)
[impala]
  # Host of the Impala Server (one of the Impalad)
  server_host=172.17.0.2
(略)

Hueを実行

root@bc2cfd951dba:/usr/share/hue# ./build/env/bin/hue runserver 0.0.0.0:8888

Hue の WebUI からアクセスする

HueもKudu-Impalaも起動したので、任意のブラウザで http://localhost:8888 にアクセスします。なお、Hueは最初に入力したユーザー名とパスワードが管理者アカウントになるので忘れないよう注意してください。(とは言ってもコンテナを破棄したら消えるので、今回の環境では気にしなくても良い)

いくつかエラーが表示されますが、今回は検証目的なので全て無視します。

左側のメニューからImpalaを選択します。


クエリエディタでクエリを実行します(が、その前に左側の回転している矢印のアイコンをクリックしてリフレッシュ、もしくはInvalidate metadataでキャッシュを更新しないとエラーになるかもしれません)。

まずはSHOW TABLESでテーブル一覧します。


非常にわかりにくいですが、下の方に「a」と言うテーブルが一覧されていますね。このテーブルは、Hueのブログにある手順で作成したテーブルです。

左側のペインにデータベースは表示されませんが、これはKudu-Dockerで使用しているデータベースがApache Derbyになっているからかもしれませんね。

以下、クエリを実行したスクリーンショットです。

Database is locked と表示されてクエリの結果が返ってこないことがありましたが、リロードすると改善されるようです。

(当たり前ですが)INSERTしてSELECTも普通に動作します。

まとめ

Hueを試すだけなら https://demo.gethue.com を使う方が楽ですが、ImpalaとKuduを検証したい場合、かつシェルからクエリを実行するのではなく Hue を使ってみたい方にはDocker環境を使ってみるのも便利ですよ。

コメント

  1. koji8y より:

    複数の docker コンテナを繋ぐ必要があるなら,docker エンジンだけでなく docker-compose を使ったほうが,IP アドレスを把握するなどの手間が省け,接続設定も docker-compose.yml に記述して残せるので便利だと思います.

    • kernel023 kernel023 より:

      ありがとうございます。確かにそうですね。アップデートします。