Hadoopのドキュメントを読む

  • 17
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

要約

  • コミュニティ版 Hadoopのドキュメントを読むためのノウハウを紹介する

なぜコミュニティか?

最近、Hadoop-MLで流れた話題

  • 「ドキュメントの通りに設定したけど全然動作しないんだけど」
  • 「Hadoop2系のドキュメントって オワコン じゃね?」

注: 原文はもっとひどい言葉遣いである

なぜオワコン扱いされるのか

あげていけばいろいろあるけど、おおまかに以下の3点

  • Hadoop2系でJobTracker, TaskTrackerは廃止されて、YARNに切り替わったが、ドキュメントにはJobTracker, TaskTrackerの表記が残ったまま
  • コマンド表記やプロパティ名も1系のものが残ったまま
  • MapReduceのドキュメントは、1系から2系に移行されていない

オワコン扱いされないために

だめなものは、直すしかない

Reviewer WANTED!!!

  • (追記) MLで募ったらレビュー & コミットしてもらえました。

本題に戻って

  • この記事を見てる方々が、本家Hadoopのドキュメントを読んで(おかしいな、と思ったらJIRAにチケットを作成して)くれると嬉しい
  • いきなり読むだけだと大変なので、読むためのノウハウ的なものを書いていく

今回のお題

Single Cluster Setup

  • 何もわからない人がまず初めに読むドキュメント、のはず
  • しかし、これを読むだけではきっとHadoopは動作しない

    • 突然の"mvn"コマンド
    • You will need protoc 2.5.0 installed. (protocって何)
    • The following instructions assume you have hdfs running. (HDFSの動作方法が書かれていない)
    • Good luck. (なにこれ)
  • 大幅な書き直しが必要!

マニュアルをざっくり書き直す (30分くらいで!)

動作環境

(まず、本家ドキュメントにはこの内容がきれいさっぱり抜けてる)

  • RHEL、もしくはCentOSの6.4+を推奨

    • 最新版、と言いたいけど最近6.5が出ちゃった & 6.5を試してないので6.4+と書いてる
  • Windows対応とは書いてあるものの、気軽に動かせるような代物ではない、はず

    • 少なくとも、ここからの説明はあまり役に立たない
  • iptables, ip6tables, SELinuxはオフにする。

    • 石川さんごめんなさい。
  • 適切なJavaをインストールする

Hadoopのダウンロード

(詳細なビルド手順はここでは書かない)

Hadoopの設定

  • ダウンロード、もしくはビルドしたファイルを解凍して、解凍したフォルダごと適切なファイルパス上に置く
  • 私の場合は、こんなコマンドを実行して /usr/local/hadoop でアクセスできるようにしている
tar xf hadoop-2.2.0.tar.gz
mv hadoop-2.2.0/ /usr/local/
cd /usr/local
ln -s /usr/local/hadoop-2.2.0 hadoop
  • こうしておくと、他のバージョンや、独自パッチを当てたバージョンなどいろいろ試すときにシンボリックリンクを差し替えるだけでよいので便利だったりする (マニア向け)

設定ファイルを書く

  • 設定ファイルは、hadoop-2.2.0/etc/hadoop 配下に配置されている
  • Hadoopを動かすために本当に 最低限 必要な追記箇所は以下の通り
core-site.xml
<property>
    <name>fs.defaultFS</name>
    <value>localhost:9000</value>
    <comment>ここでlocalhostと指定することで、擬似分散モードで動作する</comment>
</property>
hdfs-site.xml
<property>
    <name>dfs.replication</name>
    <value>1</value>
    <comment>擬似分散モードのため、レプリカ数を1にする</comment>
</property>
yarn-site.xml
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
    <comment>これ書かないとYARN上でMapReduceが動作しません!</comment>
</property>
  • Hadoopのデーモン起動時に--configオプションで設定ファイルが配置されたディレクトリを指定する必要があるため、以下のようなコマンドを実行してシンボリックリンクを作成しておくと便利。自分の場合だとこうなる
ln -s /usr/local/hadoop/etc/hadoop /etc/hadoop/conf

Hadoopを動かす

  • hadoop, hdfs, mapred, yarnコマンドを実行できるように、hadoop-2.2.0/binにパスを通す
export PATH=$PATH:/usr/local/hadoop/bin
  • javaも通す
export PATH=$PATH:/usr/java/latest/bin
  • NameNode起動前に、NameNodeをフォーマットする (初回だけ!)
hdfs namenode -format
  • daemon実行用のスクリプトは、hadoop-2.2.0/sbin 配下に配置されている
cd hadoop-2.2.0/sbin

## NameNodeの起動
./hadoop-daemon.sh --config /etc/hadoop/conf --script hdfs start namenode
## DataNodeの起動
./hadoop-daemon.sh --config /etc/hadoop/conf --script hdfs start datanode
## ResourceManagerの起動
./yarn-daemon.sh --config /etc/hadoop/conf start resourcemanager
## NodeManagerの起動
./yarn-daemon.sh --config /etc/hadoop/conf start nodemanager
## JobHistoryServerの起動
./mr-jobhistory-daemon.sh --config /etc/hadoop/conf start historyserver
  • jpsコマンドを叩いて、各種デーモンが起動しているようならOK。
$ jps 
1956 JobHistoryServer
3001 Jps
1712 NodeManager
1466 ResourceManager
1346 DataNode
1256 NameNode
  • ダメならログを読んで原因を探る
    • ログは、hadoop-2.2.0/logs 配下に出力されている。
    • エラーメッセージで検索かけるのがよい
    • 大抵はディレクトリのパーミッションの設定ミス、もしくは各種ノードのホスト名、ポート設定ミス
    • iptableはオフにしている?
    • DNSはオフにして、/etc/hostsで名前解決したほうがいいよ

Jobの動作確認

  • MapReduceのサンプルジョブは、hadoop-2.2.0/share/hadoop/mapreduce 配下に配置されています
  • 以下のようなコマンドで、サンプルジョブ(pi計算)が実行できる
hadoop jar hadoop-mapreduce-example-2.2.0.jar pi 10 1000

最後に

  • すごい勢いで書いたのでいろいろ間違いとかあると思います。
  • とりあえず動かすこと最優先なので、ユーザ、パーミッション設定とか(重要な事が)抜けてます
  • この設定をうのみにして本番環境で使わないでください

    • 他にも設定すべき項目は沢山あります
  • タイポなどなんでもいいので見つけたらコメントやtwitterでお知らせください。

  • 次は、今回書ききれなかったMapReduce Tutorial (YARN版) の話でも書こうと思います。

  • Hadoop Advent Calendar、明日はiwasakimsさんの番です。sqoop2に関する混みいった話か、htraceのcoolな話をしてくれると思います。

  • Reviewer WANTED!!! (もちろんパッチ書く人も)

宣伝

12/20、Hadoop ソースコードリーディング 第15回でHDFSのキャッシュ機能についてしゃべります。こんなことにつっこんでしゃべってほしい、とかあればお知らせいただけると可能な限り対応します。

詳細 & 参加登録はこちら : http://www.eventbrite.com/e/hadoop-15-tickets-9644265257

この投稿は Hadoop Advent Calendar 20139日目の記事です。