1.仮想ネットワーク(Azure Private Network)の構築
1.1.仮想ネットワークの新規作成
Sparkのノードをインターネットからアクセス可能な場所に設置するわけにもいきませんので、最初に仮想ネットワーク(Azure Private Network)を構築します。
新規→仮想ネットワーク→カスタム作成を選択して、適当に名前を設定します。
“ポイントからサイト間VPNの構築”にチェックして次へ。
ここは変更なし。
“ゲートウェイサブネットを追加”をクリックしてデフォルト設定のゲートウェイサブネットを追加して確定。
1.2.証明書の作成と登録
続いてルート証明書を作成します。Windowsには標準では証明書を作成する機能がないため、オープンソースのツールを使ったり、開発用のツールを使ったりして証明書を作成することになります。ここではVisual Studio 2013に付属する開発ツールを使用してルート証明書を作成します。まずは”C:¥Program Files¥Microsoft Visual Studio 12.0¥Common7¥Tools¥Shortcuts”にある”開発者コマンド プロンプト for VS2013″を開いてコマンドプロンプトを表示します。そして次のコマンドを実行して下さい。”SparkVirtualPrivateNetwork”の所は適当な名称に置換えて下さい。
makecert -sky exchange -r -n "CN=SparkVirtualPrivateNetwork" -pe -a sha256 -len 2048 -ss My "SparkVirtualPrivateNetwork.cer"
“SparkVirtualPrivateNetwork.cer”と言うファイルが出来上がります。これを証明書にアップロードします。
次にクライアント証明書を作成します。次のコマンドを実行します。
“ClientCertificateName”は適当な名称に置換えて下さい。
makecert -n "CN=ClientCertificateName" -pe -sky exchange -m 96 -ss My -in "SparkVirtualPrivateNetwork" -is my -a sha256
登録されている証明書を確認します。コマンドプロンプトから”certmgr.msc”を実行します。最初に”信頼されたルート証明機関”の”証明書”に先ほど作成したSparkVirtualPrivateNetworkが登録されているか、”個人”の”証明書”に”ClientCertificateName”が登録されているか確認します。
もしmakecertを実行した以外の環境から仮想ネットワークに接続する場合は、先ほど作成したSparkVirtualPrivateNetworkとClientCertificateNameを登録する必要があります。makecertを実行した環境で、それぞれの証明書の秘密鍵をエクスポートして、新たな環境にてインポートします。
1.3.VPNクライアントのインストール
仮想ネットワークのダッシュボードからクライアントVPNパッケージをダウンロードしてきてインストールします。インストールするとコントロールの”ネットワークと共有センター”に仮想ネットワークへの接続が追加されるので、接続を実行します。このとき使用する証明書を聞いてくるので、先ほど作成したClientCertificateNameを選択して下さい。
2.Apatch Hadoopのインストール
Apatch Sparkを動作させるには、その前にApatch Hadoopを動作させておく必要があります。
と言うわけでUbuntu 14.10の仮想マシンが起動している所から作業をスタートします。
2.1.スタンドアローンで動作する所まで…
hadoopの動作にはJavaが必要になります。OpenJDKでも問題なく動作するそうなので、標準のOpenJDKをインストールしていきます。
sudo apt update sudo apt upgrade sudo apt-get install -y default-jdk
最新版のhadoopをダウンロードしてきて展開します。
wget http://ftp.tsukuba.wide.ad.jp/software/apache/hadoop/common/hadoop-2.6.0/hadoop-2.6.0.tar.gz tar xvfx hadoop-2.6.0.tar.gz
“/etc/profile”を編集して展開したhadoopへのパスを設定します。
... export PATH=/<展開したディレクトリ>/hadoop-2.6.0/bin:$PATH ...
“hadoop-2.6.0/etc/hadoop/hadoop-env.sh”を編集してJAVA_HOMEのパスを設定します。
... # set to the root of your Java installation export JAVA_HOME=/usr/lib/jvm/default-java ...
この時点でスタンドアロンモードでhadoopが動作します。試しに”hadoop”とコマンドを打ってみて下さい。hadoopコマンドが起動するなら、先の設定へと進んでいきましょう。
2.2.疑似分散(Pseudo-Distributed)モードで動作する所まで…
今度は”ssh localhost”とコマンドを打って下さい。hadoopはノード間の接続にsshを使用します。もし”ssh localhost”で接続できないなら、sshがパスワードなどを入力しなくても繋がるように証明書を作成します。
ssh localhost ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
hadoop-2.6.0/etc/hadoop/core-site.xmlを編集します。
“hadoop.tmp.dir”で指定している”/var/opt/hadoop-2.6.0/cash”はhadoopが生成するファイルの保存先となるディレクトリです。デフォルトでは”/tmp”以下に保存されるために、OSを再起動すると全ての設定やHDFSに格納したデータが失われます。
... hadoop.tmp.dir /var/opt/hadoop-2.6.0/cash fs.defaultFS hdfs://localhost:9000
hadoop-2.6.0/etc/hadoop/hdfs-site.xmlを編集します。
... dfs.replication 1
次のコマンドを実行して、HDFS(Hadoop Distributed File System)のnamenodeを初期設定します。
hdfs namenode -format
次のコマンドを実行して、hadoopのデーモンを起動します。
hadoop-2.6.0/sbin/start-dfs.sh
MapReduceで使用するユーザーディレクトリを作成します。
hadoop fs -mkdir /user hadoop fs -mkdir /user/
最後にサンプルプログラムを実行して、hadoopが疑似分散(Pseudo-Distributed)モードで動作する事を確認します。
cd hadoop-2.6.0 hadoop fs -put etc/hadoop input hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar grep input output 'dfs[a-z.]+' hadoop fs -cat output/*
2.3.YARN(Pseudo-Distributed)モードで動作する所まで…
“etc/hadoop/”フォルダにある”mapred-site.xml.template”を”mapred-site.xml”にコピーして編集します。
cd etc/hadoop/ cp mapred-site.xml.template mapred-site.xml
mapreduce.framework.nameにはhadoop
mapreduce.framework.name yarn
再び同じようにサンプルプログラムを実行するとyarn上で動作します。
cd hadoop-2.6.0 hadoop fs -put etc/hadoop input hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar grep input output 'dfs[a-z.]+' hadoop fs -cat output/*
3.雑記
本当はSprkを動作するところまで行きたかったのだけど、思った以上に面倒で挫折。Sparkの機能であるSparkSQLを動作させるにはHiveのインストールが必要で、Hiveをちゃんと動作させるにはMySQLが必要で・・・。CDHやMapR、HDPの有用性を改めて思い知ったのでした。
というわけで、次はCDHをベースにして再スタートしようと思う。でもきっとこの経験は無駄にはならないと思うんだ。CDHを構成する過程で、Hadoopの知識は再び要求されるはずだしね。