AWSにCloudera ManagerでCDH(Hadoop)クラスタを構築してみた
AWSにEC2インスタンスを複数立てて、Cloudera ManagerをインストールしてCDHクラスタを構築してみた。
Hadoopのクラスタ構成を自前で組むと結構面倒らしいが、Cloudera Managerを入れるとかなり簡単に組むことができた。
環境情報は以下。
- Redhat Enterprise Linux 6.5
- Cloudera Manager 5.9.0
AWSインスタンス構築
Cloudera Managerの機能でEC2インスタンスを作ってクラスタ構成を構築してくれる機能もあるらしいが、
今回はそれは使わずにEC2インスタンスはあらかじめ作っておき、OSがインストールされたノードが4ノードある状態でCDHを導入する。
今回作ったAWSインスタンスは4ノードとし、一つを管理系、残りをデータノードとして使う。
OSはRHEL 6.5とし、t2.large(vCPU:2, Memory:8GB)を選択。
ディスクはルートデバイスを100GBに増やし、さらにデータ用に300GBのデバイスを一つ追加した構成にした。
あとはネットワーク(セキュリティグループ)の設定だが、ノード間通信は基本的に全て許可するようにしておいた。
事前準備
インストールをスムーズに進めるためにいくつか事前準備をしておく。
- ホスト名解決
各ノードにホスト名を設定し、解決できるようにしておく。
今回は4ノードのホスト名をそれぞれ、cdh01
・cdh02
・cdh03
・cdh04
とする。以下を設定。
- /etc/hosts
- /etc/hostname
- /etc/sysconfig/network
- /etc/cloud/cloud.cfg
SELinux無効
$ setenforce 0
- /etc/selinux/config
公開鍵交換
- 各ノードのrootユーザでパスワードなしsshログインができるように、
ssh-keygen
をして秘密鍵を~/.ssh/authorized_keysに登録。
NTP同期
- ntpdが起動していなかったり時刻同期がされていないとあとでチェックに引っかかるので確認しておく。
yum最新化
$ yum update
その他
その他にもおそらく必要な条件はあるが、インストール時に各種チェックをしてくれるので、後はそこで拾うことにする。
CDHインストール
chd01にログインし、rootユーザでCloudera Managerをインストールする。
[root@cdh01 ~]# wget http://archive.cloudera.com/cm5/installer/latest/cloudera-manager-installer.bin [root@cdh01 ~]# chmod +x cloudera-manager-installer.bin [root@cdh01 ~]# ./cloudera-manager-installer.bin
対話式のインストーラが開始される。
Next
Next
Yes
Next
Yes
Cloudera Manager管理コンソールにログインするためのURLとユーザ名/パスワードが表示されているのでメモしておく。
OK
OK
これでCloudera Managerのインストールが完了。
あとはCloudera Managerにログインし、画面からCDHクラスタを構成する。
CDHクラスタ構成
インストール画面の最後にCloudera Managerのログイン情報をもとにログインする。
http://cdh01:7180/
admin / admin でログインできる。
ライセンス条項を確認し問題なければチェックを入れ、続行
エディション選択画面になる。今回はトライアルエディションとする。
続行
続行
ホスト名(例: cdh0[1-4]) で検索し、インストール対象のノードを検出する。
続行
追加したいParcelコンポーネントがあれば追加し、続行
チェックを入れ、続行
シングルユーザモードにはチェックを入れず、続行
cdh01ノードのrootユーザの秘密鍵(.ssh/id_pub)を指定し、続行
ここで各ノードにクラスタソフトウェアがインストールされる。
問題なく完了したら、続行
Parcelのインストールが開始されるので、追加したものがある場合はそれもインストールされる。
完了後、続行
ホストが正常かどうかの検査が開始される。
ここで引っかかった検証項目ごとに対処法もかなり具体的に記載されているので、その指示に従って解消する。
解消後、再実行ボタンを押して全ての検証が通ったら、完了
クラスタ・サービスを選択する。
今回はSparkも使いたいので「Sparkがあるコア」にし、続行
ロール割り当てをカスタマイズする
今回はSecondaryNameNodeをcdh02に変えた以外は、デフォルトのままとした。
「ホスト別に表示」すると内容を確認できるので、問題なければ続行
データベースセットアップでは、データベースホスト名などの各種情報は自動で入力されている。
テスト接続し、問題なければ続行
各種パラメータ値を設定する。
今回はデフォルト値のまま、続行
なお、今回EC2に300GBのデバイスを追加し、/u01としてマウントしているのだが、
ちゃんとその領域をDataNodeのデータディレクトリとして使ってくれていることが分かる。
各種サービスのセットアップが実行されるので、
問題なく完了したら、続行
以上で完了
Cloudera Managerのホーム画面で以下のように各種コンポーネントがグリーンになっていれば正常に起動している。
以上でCDHクラスタ構築作業は完了。
動作確認
CDHクラスタが構築できたので、いくつかのコンポーネントを動作させてみる。
hiveを動かしてみる
まずは試しにhiveを動かしてみる。
まずテストファイル作成。
$ cat test.csv id,value 1,aaa 2,bbb 3,ccc
hiveでテーブル作成し、テストファイルを取り込んで見る。
$ hive 2016-11-29 02:37:56,953 WARN [main] mapreduce.TableMapReduceUtil: The hbase-prefix-tree module jar containing PrefixTreeCodec is not present. Continuing without it. Logging initialized using configuration in jar:file:/opt/cloudera/parcels/CDH-5.9.0-1.cdh5.9.0.p0.23/jars/hive-common-1.1.0-cdh5.9.0.jar!/hive-log4j.properties WARNING: Hive CLI is deprecated and migration to Beeline is recommended. hive> create database db1; OK Time taken: 0.259 seconds hive> use db1; OK Time taken: 0.017 seconds hive> create table table1 (id int, value string) row format delimited fields terminated by ',' lines terminated by '\n' > ; OK Time taken: 0.181 seconds hive> load data local inpath 'test.csv' overwrite into table table1; Loading data to table db1.table1 Table db1.table1 stats: [numFiles=1, numRows=0, totalSize=27, rawDataSize=0] OK Time taken: 0.971 seconds hive> select * from table1; OK NULL value 1 aaa 2 bbb 3 ccc Time taken: 0.315 seconds, Fetched: 4 row(s)
問題なく動作しているよう。
HDFSでも確認する。
$ hadoop fs -ls /user/hive/warehouse/db1.db Found 1 items drwxrwxrwt - ec2-user hive 0 2016-11-29 02:44 /user/hive/warehouse/db1.db/table1
正しく認識しているよう。
Sparkを動かしてみる
hdfsユーザがインストール時に作成されているのでスイッチし、spark-shellコマンドを実行する。
※他のユーザだとHDFSの権限エラーになった
$ su - hdfs $ spark-shell Setting default log level to "WARN". To adjust logging level use sc.setLogLevel(newLevel). Welcome to ____ __ / __/__ ___ _____/ /__ _\ \/ _ \/ _ `/ __/ '_/ /___/ .__/\_,_/_/ /_/\_\ version 1.6.0 /_/ Using Scala version 2.10.5 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_67) Type in expressions to have them evaluated. Type :help for more information. Spark context available as sc (master = yarn-client, app id = application_1480399559471_0003). SQL context available as sqlContext. scala> var lines = sc.textFile("/user/hive/warehouse/db1.db/table1") lines: org.apache.spark.rdd.RDD[String] = /user/hive/warehouse/db1.db/table1 MapPartitionsRDD[1] at textFile at <console>:27 scala> lines.count res1: Long = 4
先ほど取り込んだHDFS上のファイルの行数を集計するスクリプトが実行できた!
まとめ
以上でAWS上に構築したEC2インスタンスにCloudera Managerをインストールし、CDHクラスタを構築できた。
また、実際にhiveとSparkが動作することも確認できた。
インストール作業はCloudera Managerが全ノードに対して一元的に実施してくれるため、ノードの数が多くてもあまり手間は変わらなく、とても簡単に実施できる。
一方で、ノード数が増えるとインストールの事前作業であるホスト名やカーネルパラメータ設定などが手間になるため、
実際に運用する場合はChefやAnsibleのようなプロビジョニングツールが必須だと感じた
以上!
Hadoop関連書籍
- 作者: Tom White,Sky株式会社玉川竜司,兼田聖士
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/07/26
- メディア: 大型本
- この商品を含むブログ (4件) を見る
Hadoop徹底入門 第2版 オープンソース分散処理環境の構築
- 作者: 太田一樹,岩崎正剛,猿田浩輔,下垣徹,藤井達朗,山下真一,濱野賢一朗
- 出版社/メーカー: 翔泳社
- 発売日: 2013/07/09
- メディア: 大型本
- この商品を含むブログ (5件) を見る