Chefを使ってCDHを設定してみた(HDFS編)


前回はhadoopのインストールを行った。今回から各種設定を行っていく。

まずは、HDFS(Hadoop Distributed File System)の設定から。

前回のインストール時のファイルに追記する形で記載する。

レシピについては次のサイトを参照に記載している。

http://www.cloudera.com/content/cloudera-content/cloudera-docs/CDH4/4.2.0/CDH4-Installation-Guide/cdh4ig_topic_11_2.html?scroll=topic_11_2_1_unique_1

今回はちょっと長くなったのでやってることの概要をまとめてみた。

  1. hadoopの設定いじるために、空の設定ファイルが格納されているフォルダをコピーし、hadoopがそっちを見るように設定(最初の一回のみやりたかったので、フォルダ存在判定して、すでにあったらやらないようにしてる)
  2. 編集済みの設定ファイル(core-site.xmlとhdfs-site.xml)を配置する。
  3. NameNodeとDataNodeが管理するデータを保管する場所を作成する。(とりあえず参照したページの用な感じでフォルダつくってみる)
  4. NameNodeのフォーマット(最初の一回のみ実行する必要がある。最初の一回のみってどうやって書けばいいかわからんかったからとりあえずフォーマットしたらtempファイル作って次回からはそれがあったらやらないようにしてみた)
  5. サービス起動(いちいち起動するの面倒だったので)

上記のことを書いたのが下記。


#Copying the Hadoop Configuration
bash "Copying the Hadoop Configuration" do
 not_if { File.exists?("/etc/hadoop/conf.my_cluster")}
 code <<-EOS
 sudo cp -r /etc/hadoop/conf.empty /etc/hadoop/conf.my_cluster
 sudo update-alternatives --install /etc/hadoop/conf hadoop-conf /etc/hadoop/conf.my_cluster 50
 sudo update-alternatives --set hadoop-conf /etc/hadoop/conf.my_cluster
 chown -R root:hadoop /etc/hadoop/conf.my_cluster
 EOS
end

#設定ファイル(HDFS)
template "core-site.xml" do
 path "/etc/hadoop/conf.my_cluster/core-site.xml"
 source "core-site.xml.erb"
 owner "root"
 group "hadoop"
 mode 00644
end

template "hdfs-site.xml" do
 path "/etc/hadoop/conf.my_cluster/hdfs-site.xml"
 source "hdfs-site.xml.erb"
 owner "root"
 group "hadoop"
 mode 00644
end

#hdfsデータ格納用フォルダ作成
directory "/data" do
 owner "hdfs"
 group "hadoop"
 mode 00744
 action :create
end

directory "/data/1" do
 owner "hdfs"
 group "hadoop"
 mode 00744
 action :create
end

directory "/data/1/dfs" do
 owner "hdfs"
 group "hadoop"
 mode 00744
 action :create
end

directory "/data/1/dfs/nn" do
 owner "hdfs"
 group "hadoop"
 mode 00744
 action :create
end

directory "/data/1/dfs/dn" do
 owner "hdfs"
 group "hadoop"
 mode 00744
 action :create
end
#最初の一回しか実行できません。
#2回目以降は手動でコマンドを実行してください
bash "node format" do
 not_if { File.exists?("/usr/namenodeinstalled")}
 code <<-EOS
 sudo -u hdfs hadoop namenode -format
 touch /usr/namenodeinstalled
 EOS
end

#Service起動
service "hadoop-hdfs-namenode" do
 action :restart
end

service "hadoop-hdfs-datanode" do
 action :restart
end

core-site.xml.erb の内容(hadoop共通の設定)

<?xml version="1.0" encoding="UTF-8"?>
<!--
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at
 http://www.apache.org/licenses/LICENSE-2.0
 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License. See accompanying LICENSE file.
-->
<!-- Site specific YARN configuration properties -->
<configuration>
 <property>
 <name>fs.defaultFS</name>
 <value>hdfs://hadoopvm:9000</value>
 </property>
</configuration>

ちなみにここの設定ミスるとNameNode起動した時に /var/log/hadoop-hdfs/hadoop-hdfs-namenode-hadoopvm.log に次のようなエラーがでた。

STARTUP_MSG: build = git://ubuntu64-12-04-mk3/var/lib/jenkins/workspace/generic-package-ubuntu64-12-04/CDH4.6.0-Packaging-Hadoop-2014-02-26_01-24-53/hadoop-2.0.0+1554-1.cdh4.6.0.p0.16~precise/src/hadoop-common-project/hadoop-common -r 8e266e052e423af592871e2dfe09d54c03f6a0e8; compiled by 'jenkins' on Wed Feb 26 02:00:51 PST 2014
STARTUP_MSG: java = 1.7.0_51
************************************************************/
2014-04-29 14:51:17,039 INFO org.apache.hadoop.hdfs.server.namenode.NameNode: registered UNIX signal handlers for [TERM, HUP, INT]
2014-04-29 14:51:17,359 INFO org.apache.hadoop.metrics2.impl.MetricsConfig: loaded properties from hadoop-metrics2.properties
2014-04-29 14:51:17,456 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Scheduled snapshot period at 10 second(s).
2014-04-29 14:51:17,456 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: NameNode metrics system started
2014-04-29 14:51:17,809 FATAL org.apache.hadoop.hdfs.server.namenode.NameNode: Exception in namenode join
java.lang.IllegalArgumentException: Invalid URI for NameNode address (check fs.defaultFS): file:/// has no authority.
 at org.apache.hadoop.hdfs.server.namenode.NameNode.getAddress(NameNode.java:329)
 at org.apache.hadoop.hdfs.server.namenode.NameNode.getAddress(NameNode.java:317)
 at org.apache.hadoop.hdfs.server.namenode.NameNode.getRpcServerAddress(NameNode.java:370)
 at org.apache.hadoop.hdfs.server.namenode.NameNode.loginAsNameNodeUser(NameNode.java:422)
 at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:442)
 at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:621)
 at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:606)
 at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1177)
 at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1241)
2014-04-29 14:51:17,812 INFO org.apache.hadoop.util.ExitUtil: Exiting with status 1
2014-04-29 14:51:17,824 INFO org.apache.hadoop.hdfs.server.namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at hadoopvm/10.0.2.15
************************************************************/

hdfs-site.xml.erb の内容(HDFSの設定)

ローカルでしか動かさないからレプリケーション数は1にしている。

また、NameNode,DataNodeのデータを格納する場所には、先ほど作ったフォルダを設定。

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
 <property>
 <name>dfs.replication</name>
 <value>1</value>
 </property>
 <property>
 <name>dfs.namenode.name.dir</name>
 <value>/data/1/dfs/nn</value>
 </property>
 <property>
 <name>dfs.datanode.data.dir</name>
 <value>/data/1/dfs/dn</value>
 </property>
</configuration>

これで、実行。

実行成功したらWebUI(http://192.168.12.43:50070/ (hadoop動かしてるサーバのIP)にアクセスしてみて、ちゃんと画面が出たら成功。

スクリーンショット 2014-04-30 0.44.15

コメントはまだありません

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

AWS
Docker
ECS+ALBの動的ポートマッピングでダウンタイムのないデプロイを試してみた

はじめに 少し前に個人で作成しているWebサービスのインフラにDockerを使い始めました。 複数台 …

スクリーンショット 2016-01-09 20.02.08
Ruby on Rails
Capistrano3を利用してBitbucketプライベートリポジトリにあるRailsアプリをデプロイしてみた

Railsアプリを配置する際、毎回手作業で頑張って配置してきたが、そろそろ自動デプロイを・・・ とい …

MarketTreeViewのイメージ
Ruby on Rails
[Eve Online 3rd party app] Market Tree Viewの実装 [EOPES制作記]

Eve Online 3rd party app のEOPES を作り始めてから約3ヶ月が経ちました …