Post on 07-Jul-2015
description
初めての Hadoopパッチ投稿
How to Contribute to Hadoop
Cloudera World Tokyo 2014 LT 大山真実
自己紹介
大山真実 おおやま まさのり
某SIerでHadoopと戯れています
入社3年目
Hadoopソースコードリーディングの
お手伝いとかやってます
その0 はじめにやること
まずはこのドキュメントを読みましょう↓
「How to Contribute to Hadoop Common」
http://wiki.apache.org/hadoop/
• 環境構築からビルド、パッチの投稿まで全部
説明されてます
• これからパッチ投稿までの大まかな流れを紹
介します、が、細かい点は前述のドキュメント
を確認して下さい。
• 初心者向けのTipsを中心に紹介します。
まずは公式ドキュメントに目を通しましょう!
Tipsその1
※ Mac + IntelliJを対象
その1 Hadoop開発環境の準備
Git を Get!
• gitをインストールしましょう
• インストール方法は省略
• 日本語の情報も豊富なのでググってお好み
の方法でインストールして下さい
Hadoopプロジェクトをgit clone
• かなり時間かかります!
• 古い情報に注意!
❌ git://github.com/apache/hadoop-common.git
→ブログなどの情報は参考程度に
$ git clone git://git.apache.org/hadoop.git
※ git://github.com /apache/hadoop.git のほうが早いとの噂
まずは公式ドキュメントに目を通しましょう!
Tipsその1 大事なことなので二度言います!
ビルド環境構築
• git clone してきたHadoopプロジェクト内の
BUILDING.txtを読みましょう!
#Windows向けのビルド方法も書いてあります。
ビルドに必要なもの
• MacではHomebrewでインストールできます
http://brew.sh/index_ja.html
Requirements: * Unix System * JDK 1.6+ * Maven 3.0 or later * Findbugs 1.3.9 (if running findbugs) * ProtocolBuffer 2.5.0 * CMake 2.6 or newer (if compiling native code), must be 3.0 or newer on Mac * Zlib devel (if compiling native code) * openssl devel ( if compiling native hadoop-pipes ) * Internet connection for first build (to fetch all Maven and Hadoop dependencies)
• 必要なProtocolBufferのバーションは2.5.0 「Homebrewでバージョンを指定してインストールする」
http://qiita.com/tamasally/items/a7bc7eca85bbc70dda49
→brew install protobufだと2.6がインストールされビルドできません。
• zlibのインストール方法に注意(Macのみ) dupesリポジトリを作成してからインストールする必要があります。
$ brew tap homebrew/dupes
$ brew install zlib
https://github.com/Homebrew/homebrew-dupes
ProtocolBufferのバージョンに注意!
Tipsその2
Hadoopをビルドしてみよう!
$ mvn package -Pdist -DskipTests -Dtar
オプションの説明などはBUILDING.txtに書いてあります!
ビルド失敗しても慌てない! 落ち着いてエラーメッセージを読みましょう!
Tipsその3
• 必要なソフトウェアは全部インストールされていますか?
• 環境変数の設定忘れてませんか?
• MavenのOOMエラーで失敗してませんか?
export MAVEN_OPTS="-Xms256m -Xmx512m"
IntelliJにインポート
• 省略します。
• 初めての人にはこちらが参考になります。 「How-to: Create an IntelliJ IDEA Project for Apache Hadoop」
http://blog.cloudera.com/blog/2014/06/how-to-create-an-intellij-idea-
project-for-apache-hadoop/
git clone元が古い情報になっているので注意
IntelliJのCode Styleの設定を変更しましょう
Tipsその4
• インデントの設定は2 アプリケーションメニュー>IntelliJ IDEA>preference>Code Style>Java>Tabs and Indents
Tab size → 2
Indent 2 → 2
• importで同じパッケージをまとめない アプリケーションメニュー>IntelliJ IDEA>preference>Code Style>Java>Imports
Class count to use import with '*' → 99
その2 初心者向けチケットの探し方
JIRA登録
• HadoopはASF ( apache software foundation )
のJIRAで管理しています https://issues.apache.org/jira/browse/HADOOP/
• まずはJIRAのアカウントを作成しちゃいましょ
う!
初心者向けチケットを探す
• 初心者向けチケットはnewbieというラベルで
分類されています。
• newbieの中でもドキュメント関連は比較的取
り組みやすいです。
newbieチケットに取り組んでみましょう!
Tipsその5
• 「More」に「label」と入力するとlabelで検索できるように
なります。 projects : Hadoop common, Hadoop HDFS,
Hadoop Map/Reduce, Hadoop YARN
statuses : OPEN
Users/Groups : Unassigned
Label : newbie
ブランチ作成 • 取り組むチケットが決まったらブランチを作成しま
しょう!
• trunkに移動
$ git checkout trunk
• trunkからチケット番号名のブランチ作成
$ git branch チケット番号(例えばHDFS-99999)
• ブランチに移動
$ git checkout チケット番号
Gitについて
• Gitに詳しくない人は一番ハマるところな気がしま
すが、今回は省略させて下さい。
• 基本的には
「Git and Hadoop」
http://wiki.apache.org/hadoop/GitAndHadoop
を見ていただければ大丈夫だと思います。
コードをいじる • 「How to Contribute to Hadoop Common」
をよく読んでコーディング
• ドキュメントの場合
– APTフォーマットで書く
http://maven.apache.org/doxia/references/apt-
format.html
– 1行80文字まで制限に注意!
http://www.oracle.com/technetwork/java/javase/doc
umentation/codeconventions-136091.html#313
パッチ作成
• コードの追加修正が終わったらパッチ作成
$ git diff --no-prefix trunk > HDFS-99999-1.patch
• 無事パッチ作成できました!やったね!
その3 パッチの投稿方法
パッチをアップロード
コメントを書く
最初は I attached patch. とかで大丈夫!(たぶん)
Submit Patchをクリック
Submit Patchをクリック
よくわからなければ何も書かないで大丈夫! # 気づいた人が直してくれます!(たぶん)
コミュニティメンバのコメント
• コミッタはじめ色々な人が“優しく”コメントして
くれます。
• 間違いを指摘されたら直しましょう!
• コミットされるまでのルールは下記参照
http://hadoop.apache.org/bylaws.html
OSSコミュニティ特有?の略語に注意!
Tipsその6
• +1:賛成!(コミットするに一票!)
• −1:反対!
• LGTM:Looks good to me:いいね!
• +1(non-binding):
(コミッタじゃないけど…)賛成!
• 参考 http://qiita.com/uasi/items/86c3a09d17792ab62dfe
まとめ
ぜひ!Hadoopコミュニティに参加して
Hadoopに関するあなたの
・ちょっとここ不便だなぁ
・このドキュメントはわかりにくいよね
・バグだーーー!
といった、いろいろな”気付き”をコミュニティに
還元してください!
ありがとうございました!
皆様も本日は1日大変お疲れ様でした!