まえおき
- Redshiftは楽らしい。Redshift spectrumもできて、ファイルに直接クエリをかけられる。
- ただ高いし、同時接続数に限りがある。
- Cloudera寄りな感じするけど、[こんな記事] (https://blog.cloudera.co.jp/apache-impala-incubating-%E3%81%A8amazon-redshift%E3%82%92%E6%AF%94%E8%BC%83%E8%A9%95%E4%BE%A1-aws%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8Bs3%E3%81%A8%E3%81%AE%E7%B5%B1%E5%90%88-%E5%BC%BE%E5%8A%9B%E6%80%A7-%E3%82%A2%E3%82%B8%E3%83%AA%E3%83%86%E3%82%A3-%E3%81%9D%E3%81%97%E3%81%A6%E3%82%B3%E3%82%B9%E3%83%88%E3%83%91%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%B3%E3%82%B9%E3%81%AE%E5%84%AA%E4%BD%8D%E6%80%A7%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6-1c4fa0a0601b)もあって、本当に早いの?という気持ちで、使ってみたかった。
- EMRはImpalaのサポートを、1.2.4の時点で打ち切った(EMRのバージョンは3.9.0)。今のImpala最新バージョンは2.11.0 (2018/4/18)。Redshiftを使ってもらえなくなるから?
- EMRは使えないので、ClouderaDirectorなるサービスでImpalaクラスターを立てる。
シリーズの構成(予定)
- Impalaクラスターを立ててRedshiftをやめる (1) <- これ
- クラスターを立てる
- Impalaクラスターを立ててRedshiftをやめる (2)
- S3にあるファイルにクエリを投げる
- Impalaクラスターを立ててRedshiftをやめる (3)
- 実際にRedshiftと比較
クラスターの全体像
- これ
- 一つのEC2インスタンスにClouderaDirectorなるクラスター管理サービスをインストールする。
- ClouderaManagerなるツールはクラスターに一つ。ClouderaManagerがworkerノードを管理する。
手順
基本は全部ここに載ってる通りに進めていく。
1. AWS環境のセットアップ
参考リンク
- VPCの作成
- SGの作成
- キーペアの作成
- EC2にSSHで入るため
- IAMロールの作成
2. ClouderaDirector用EC2のセットアップ
参考リンク
- 書いてあるとおり、コミュニティAMIタブで、
rhel-7.3 HVM
と検索すると、色々なAMIがでてくる。よくわからないが名前中のタイムスタンプが新しそうなRHEL-7.3_HVM-20170613-x86_64-4-Hourly2-GP2 - ami-5c9a933b
を選択。 - c4.large/c3.largeが推奨とのことなのでc4.largeを選択。
- インスタンスのいろいろ設定
- SGは、
自分のIPからのSSH
と自分のSGからのすべてのトラフィック
をつけると書いてあるが、新規作成時には自分自身(のSG)からのアクセスを選択できない。インスタンス生成後に、SGの編集画面から設定する。
3. ClouderaDirectorのインストール
参考リンク
-
ClouderaDirectorServer
/ClouderaDirectorClient
があるが、今回はServerのみインストールする。 - 2で立てたEC2にSSHで入る。
- (よくわからない) privateIPでは入れず、publicIPで入った。
- java8最新版のインストール(2018/4/18)
$ sudo yum install -y wget
$ sudo wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u171-b11/512cd62ec5174c3487ac17c61aaa89e8/jdk-8u171-linux-x64.rpm
$ sudo yum localinstall -y jdk-8u171-linux-x64.rpm
$ java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
- ClouderaDirectorのインストールは、参考リンクのを辿っていけばおk。
$ sudo service cloudera-director-server start
Started Cloudera Director Server (cloudera-director-server)[ OK ]
- firewallは、入ってないのかな?特にstopする必要なし。
$ sudo systemctl status firewalld
Unit firewalld.service could not be found.
4. SOCKSプロキシの設定
参考リンク
- EMRでも同様のプロキシ設定が必要になるが、この場合ではClouderaDirectorが立ってるEC2にトンネルを掘ることでクラスター内にアクセスする。
- トンネルを掘る。
$ nohup ssh -i "your-key-file.pem" -CND 8157 ec2-user@instance_running_director_server &
- EMRで推奨されているように、ChromeのExtensionでプロキシしても良いが、Chrome自体にプロキシの設定を入れて立ち上げることができるらしいので、やってみる。下記はMac用。
$ "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \
--user-data-dir="$HOME/chrome-with-proxy" \
--proxy-server="socks5://localhost:8157"
- 立ち上げたChromeで
http://instance_running_director_server:7189
にアクセスして、ClouderaDirectorのWelcome画面が表示されればおk。アクセス先のIPはプライベートIP。

5. Cloudera Managerのデプロイ
参考リンク
- ClouderaManager, workerノードを立ち上げる。
- 参考リンク通りに進んでいけばおk。
- IAMロールを付与しているので、AccessKeyの入力は不要。
- インスタンスタイプはm4.xlargeを選択。ClouderaManagerも、workerノードも、このテンプレートを元にして立ち上げる。
-
チュートリアルの画像では、テンプレートのtagで
Name
を設定しているが、これが入ってるとエラーになる (ちゃんと文章では注意されているのだけれど) - ClouderaManagerが立ち上がったら、クラスターのworkerノードを作成する。
- 今回はImpalaクラスターを立てるので、
Core Hadoop with Impala
を選択。 - どんなものかわからないので、インスタンス数は
m-w-g
は1-3-1
で立てる。 - ここまでで立ち上げは終わり。
X1. Impalaが立ち上がらない
- ClouderaManagerを見ていると、Impalaが立ち上がらない!
- impala daemonが立ち上がるはずのサーバに入り、
/var/log/impalad/impalad.INFO
を覗くと、以下のエラーが出力されている。
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGBUS (0x7) at pc=0x00007f7160afa47d, pid=15976, tid=140125096192384
#
# JRE version: (7.0_67-b01) (build )
# Java VM: Java HotSpot(TM) 64-Bit Server VM (24.65-b04 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# j java.lang.Object.<clinit>()V+0
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting
Java again
#
# An error report file with more information is saved as:
# /run/cloudera-scm-agent/process/70-impala-IMPALAD/hs_err_pid15976.log
#
# If you would like to submit a bug report, please visit:
# http://bugreport.sun.com/bugreport/crash.jsp
#
- さっぱりわからないが、http://community.cloudera.com/t5/Interactive-Short-cycle-SQL/Impala-daemon-fail-to-start-CDH-5-11-1-unable-to-start-it-even/td-p/56304 によると
Add the following to /usr/lib/cmf/service/impala/impala.sh, right above "set impala configuration directory":
export JAVA_TOOL_OPTIONS="-Xss2m"
とのことなので、クラスター内のサーバーを回り、/usr/lib64/cmf/service/impala/impala.sh
(回答とはちょっと違う場所にある)を上記のように編集してClouderaManagerからImpalaサービスを再起動。