Edited at

Chefで構築するHadoop環境

More than 5 years have passed since last update.


環境


  • Mac OSX Mavericks

  • Vagrant 1.6.3 (box: chef/centos-6.5)

  • Chef-solo 11.14.0.alpha.4

  • jdk: jdk-8u5-linux-x64

  • hadoop: 0.18.3-14.cloudera.CH0_3(stable?)


Hadoop導入の流れ


  1. JDKをインストールする

  2. Hadoopをインストールする

  3. 試験する

今回は、chefを使用して1.と2.を実現します。3.は、Hadoopインストール時にサンプルとして導入されるプログラムをHadoop上で動かしてみます。


レシピ


レシピの中身


recipes/default.rb

#

# making environment for hadoop
#

# 1. JDKをインストールする
jdk_file_name="jdk-8u5-linux-x64"

execute "download_jdk" do
user "vagrant"
group "vagrant"
cwd "/home/vagrant"
command "wget --no-check-certificate --no-cookies --header 'Cookie: oraclelicense=accept-securebackup-cookie' http://download.oracle.com/otn-pub/java/jdk/8u5-b13/#{jdk_file_name}.rpm -O #{jdk_file_name}.rpm"
not_if { ::File.exists?("/home/vagrant/#{jdk_file_name}.rpm") }
end

package "install_jdk" do
source "/home/vagrant/#{jdk_file_name}.rpm"
provider Chef::Provider::Package::Rpm
action :install
end

# 2. Hadoopをインストールする
execute "add_repo_for_cloudera" do
user "root"
group "root"
command "wget http://archive-primary.cloudera.com/redhat/cdh/cloudera-stable.repo -O /etc/yum.repos.d/cloudera-stable.repo"
not_if { ::File.exists?("/etc/yum.repos.d/cloudera-stable.repo") }
end

%w(
hadoop
hadoop-conf-pseudo
)
.each do |package_name|
package package_name do
action :install
end
end

%w(
hadoop-datanode
hadoop-jobtracker
hadoop-namenode
hadoop-secondarynamenode
hadoop-tasktracker
)
.each do |service_name|
service service_name do
action [ :enable, :start ]
supports :start => true, :stop => true, :restart => true
end
end



 ポイント


  • JDKをダウンロードする際には、ライセンス条項への同意が必要となるので、wgetの引数に--header 'Cookie: oraclelicense=accept-securebackup-cookie'を与える必要がある

  • JDKのダウンロードと、Clouderaのレポジトリファイルを追加する際にはnot_ifを使用してべき等性を確保する


インストール後の動作確認

インストールが上手くいっているかの確認をするために、サンプルプログラムをHadoop上で動作させてみます。


terminal

[vagrant@localhost ~]$ hadoop jar /usr/lib/hadoop/hadoop-0.18.3-14.cloudera.CH0_3-test.jar mrbench

MRBenchmark.0.0.2
14/07/05 12:50:07 INFO mapred.MRBench: creating control file: 1 numLines, ASCENDING sortOrder
14/07/05 12:50:07 INFO mapred.MRBench: created control file: /benchmarks/MRBench/mr_input/input_475033013.txt
14/07/05 12:50:07 INFO mapred.MRBench: Running job 0: input=hdfs://localhost/benchmarks/MRBench/mr_input output=hdfs://localhost/benchmarks/MRBench/mr_output/output_-320582194
14/07/05 12:50:07 WARN mapred.JobClient: Use GenericOptionsParser for parsing the arguments. Applications should implement Tool for the same.
14/07/05 12:50:07 INFO mapred.FileInputFormat: Total input paths to process : 1
14/07/05 12:50:07 INFO mapred.FileInputFormat: Total input paths to process : 1
14/07/05 12:50:08 INFO mapred.JobClient: Running job: job_201407051248_0001
14/07/05 12:50:09 INFO mapred.JobClient: map 0% reduce 0%
14/07/05 12:50:18 INFO mapred.JobClient: map 100% reduce 0%
14/07/05 12:50:23 INFO mapred.JobClient: Job complete: job_201407051248_0001
14/07/05 12:50:23 INFO mapred.JobClient: Counters: 16
14/07/05 12:50:23 INFO mapred.JobClient: Map-Reduce Framework
14/07/05 12:50:23 INFO mapred.JobClient: Combine output records=0
14/07/05 12:50:23 INFO mapred.JobClient: Reduce input records=1
14/07/05 12:50:23 INFO mapred.JobClient: Reduce output records=1
14/07/05 12:50:23 INFO mapred.JobClient: Map input records=1
14/07/05 12:50:23 INFO mapred.JobClient: Map output records=1
14/07/05 12:50:23 INFO mapred.JobClient: Map output bytes=5
14/07/05 12:50:23 INFO mapred.JobClient: Combine input records=0
14/07/05 12:50:23 INFO mapred.JobClient: Map input bytes=2
14/07/05 12:50:23 INFO mapred.JobClient: Reduce input groups=1
14/07/05 12:50:23 INFO mapred.JobClient: File Systems
14/07/05 12:50:23 INFO mapred.JobClient: HDFS bytes written=3
14/07/05 12:50:23 INFO mapred.JobClient: Local bytes written=128
14/07/05 12:50:23 INFO mapred.JobClient: HDFS bytes read=4
14/07/05 12:50:23 INFO mapred.JobClient: Local bytes read=21
14/07/05 12:50:23 INFO mapred.JobClient: Job Counters
14/07/05 12:50:23 INFO mapred.JobClient: Launched map tasks=2
14/07/05 12:50:23 INFO mapred.JobClient: Launched reduce tasks=1
14/07/05 12:50:23 INFO mapred.JobClient: Data-local map tasks=2
DataLines Maps Reduces AvgTime (milliseconds)
1 2 1 16407

うまく動作してるっぽいです。


今後に向けて


  • Jenkins等を使ってインフラ試験も自動化したい

  • Vagrantで複数ノード立ちあげて、本当の同時並列処理を試してみたい