ラベル Hadoop の投稿を表示しています。 すべての投稿を表示
ラベル Hadoop の投稿を表示しています。 すべての投稿を表示

2011/08/24

MapReduceのUnitテスト(MRUnit)

MRUnitって便利だよと聞いたので、使ってみたくなりました。

MRUnitは、JUnitフレームワークの上に、MapReduceプログラムをテストするための色んなクラスを提供している子らしい。(参考:Hadoop徹底入門)

手順はざっとこんな感じ。
  1. MRUnitのjarをとってくる
  2. eclipseのビルド・パスに追加
参考にしたのはこのサイト
MRUnit(MapReduce用のテストライブラリ)を試す | shinodogg.com

----------------------------------------------------------------
1. MRUnitのjarをとってくる
Clouderaで配布しているCDH3 Component Tarball からMRUnitのjarと、それに必要っぽいJUnit4.xのjarをゲット。

MRUnitのjarは、contrib/mrunit配下に、
JUnit4.xのjarは、lib配下にあるので、それぞれ

${HADOOP_HOME}の同じ場所に置いた。

2. eclipseのビルド・パスに追加
プロジェクトのプロパティから1で追加したjarをビルド・パスに追加。

おしまい。

既にコミュニティ版のHadoopをインストールしていて手順に少し不安があったけど、Hadoop徹底入門にあったMapperのテストコードを書いて、実行してみたところ、きちんと動きました。

=====
今日の環境
OS:WindowsXP sp3
Hadoop 0.20.2
eclipse 3.7

2011/08/19

EclipseでMapReduceプログラミング

この記事でとりあえず開発環境ができたので、
MapReduceのベーシックなサンプルでもあるWordCountをEclipseで書いてみる。
  1. 新規プロジェクトの作成
  2. WordCountの作成
  3. プログラムの実行
----------------------------------------------------------------
1.新規プロジェクトの作成
Eclipseにhadoopのプラグインを入れているので、
「新規プロジェクト」ダイアログから「Map/Reduce Project」を選択できるようになっている。
なので、「Map/Reduce Project」を使って新規プロジェクトを作成。

はじめて作成するので、「Configure Hadoop install directory ...」
からWindowsにインストールしておいたHadoopのインストールディレクトリを設定。

2. WordCountの作成
Hadoop徹底入門を参考に、WordCountのプログラムを書き書き...
こちらのサイトも参考に...
Hadoop WordCountメモ(Hishidama's Hadoop tutorial WordCount Memo)

3. プログラムの実行
[実行]-[Run on Hadoop]を使いこなせなかったので、
2で参考にしたサイトの「Eclipseからデバッグ実行」をお手本にJavaアプリケーションとして実行してみた。

MapReduceはうまく動いたけど、Run on Hadoopで実行してみたかったな...
Run on Hadoopって分散モードで実行するときに使うのかな?だとしたら、分散モードで使えるように設定を変更しなきゃなのかな?
この件は引き続きがんばる。

=====
今日の環境
OS:WindowsXP sp3
Hadoop 0.20.2

2011/08/17

WindowsXP で Hadoop の開発環境をつくる

手持ちのマシン(XPさん)でHadoopをアレコレするための準備。

前提は、Win の Eclipse でコードを書き、ローカルモードで動作確認。
分散環境での動作確認は別途VMを作成して、そこで行う。

やることはとりあえず、大きく2つ。
  1. Hadoop(0.20系)をWindowsXP上で起動(ローカルモード)できるようにする
  2. EclipseでHadoopの開発ができるようにする
    →Eclipse(3.7)は既にインストール済み

 ----------------------------------------------------------------
1. Hadoop(0.20系)をWindowsXP上で起動できるようにする

参考にしたサイト
Hadoop/Windows上での実行(0.20.2) - Yoshimopedia

大まかな手順
  1. JAVA_HOMEの設定
  2. Cygwinのインストール
  3. Hadoopの導入
  4. bin/hadoopを編集
  5. 設定ファイルを編集

1. JAVA_HOMEの設定
ユーザー環境変数「JAVA_HOME」にJREのインストール先を設定する
2. Cygwinのインストール
インストール先の指定特にないようなので、C:\直下にインストール。
システム環境変数「Path」に C:\cygwin\bin;C:\cygwin\usr\bin を追加。

3. Hadoopの導入
hadoop-0.20.2.tar.gz をダウンロードして、任意(※)の場所に展開。
※:Program Filesは避けたほうがいいみたい。

なので、C:\直下に展開。
4. bin/hadoopを編集
JAVA_PLATFORM=`CLASSPATH=${CLASSPATH} ${JAVA} -Xmx32m org.apache.hadoop.util.PlatformName sed -e "s/ /_/g"`
の${CLASSPATH}、${JAVA}にダブルクォートを追加し、
JAVA_PLATFORM=`CLASSPATH="${CLASSPATH}" "${JAVA}" -Xmx32m org.apache.hadoop.util.PlatformName sed -e "s/ /_/g"`
と修正。

5. 設定ファイルを編集
conf/core-site.xml
<configuration>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>C:\tmp\hadoop</value>
    </property>
</configuration>
※ value の値は作業環境に合わせる。
conf/mapred-site.xml
<configuration>
    <property>
        <name>mapred.job.tracker</name>
        <value>local</value>
    </property>
</configuration>
これで、ローカルモードで MapReduce アプリケーションを動作させることができる。

2. EclipseでHadoopの開発ができるようにする

参考にしたサイト
2009-01-20 - きしだのはてな
Hadoop開発準備のためのEclipseインストール - osacaz4の日記

hadoop にプラグインを追加。

${HADOOP_HOME}/contrib/eclipse-plugin/hadoop-0.20.2-eclipse-plugin.jar

を Eclipse の pluginsフォルダにコピーするだけ。
※:「0.20.2」の部分は先に導入したHadoopのバージョンによって異なる。

=====
今日の環境
OS:WindowsXP sp3
Hadoop 0.20.2

2011/08/15

HDFS の起動が確認できない

Hadoop 環境(擬似分散モード)を作成して、早速起動してみたものの、Webインターフェースで HDFS の状態を確認できない(;△;)
[hadoop@localhost hadoop]$ ./bin/start-all.sh
を実行。起動確認のため、
NameNodeのWebページ http://localhost:50070/
JobTrackerのWebページ http://localhost:50030/
表示してみると...

NameNodeのWebページ→表示できない
JobTrackerのWebページ→何故か「Nodes」がゼロ

???ってことで、設定ファイル周りから見直し。

設定ファイルは特に問題なかったけど、
NameNodeのフォーマットをrootユーザで実行していて、
NameNode用ディレクトリの所有権やら実行権限の関係でちゃんと動いていないっぽい(;△;)。o0(Oh...)
なので、NameNodeを作り直してみた。
[hadoop@localhost hadoop]$ ./bin/stop-all.sh ←Hadoopデーモンを停止
[hadoop@localhost hadoop]$ su
パスワード:
[root@localhost hadoop]# cd /hadoop/
[root@localhost hadoop]# rm -iR dfs/ ←rootで作成したNameNodeをごっそり削除
    :
  (省略)
    :
[root@localhost hadoop]# exit
[hadoop@localhost hadoop]$ cd ${HADOOP_HOME}
[hadoop@localhost hadoop]$ ./bin/hadoop namenode -format
で、改めてHadoopデーモンを起動して、Webページを確認。
今度はうまくいったみたい (^o^)b

=====
今日の環境
VirtualBox 4.0.10
ホストOS:WindowsXP sp3
ゲストOS:CentOS-5.6(64 bit)
Hadoop 0.20.2

2011/08/12

VirtualBox・CentOS に Hadoop をインストール

作成したVMにHadoopを「擬似分散モード」で導入してみる。

インストール手順はこんな感じ(バージョンは0.20.2)
  1. パッケージの入手
  2. Hadoop用ユーザとグループの設定
  3. Hadoopパッケージの展開と配置
  4. Hadoop用設定
  5. Hadoop用ディレクトリ設定
  6. SSH公開鍵の配布
 参考にしたのはこの本


----------------------------------------------------------------
 1. パッケージの入手
http://www.apache.org/dyn/closer.cgi/hadoop/common/
ここからミラーサイトを表示して、目的のバージョンのパッケージを入手。
今回は、hadoop-0.20.2.tar.gz をゲット

2. Hadoop用ユーザとグループの設定
参考文献の例に倣って、hadoopユーザとhadoopグループを作成。
※ユーザ名、グループ名は任意に設定することもできるみたい。

3. Hadoopパッケージの展開と配置
入手したパッケージを展開し、/usr/localに配置。
シンボリックリンクと環境変数「HADOOP_HOME」を作成。

4. Hadoop用設定
HADOOP_HOME配下にある以下の設定ファイルを編集する。
  • conf/core-site.xml
  • conf/hdfs-site.xml
  • conf/mapred-site.xml
  • conf/mapred-site.xml
5. Hadoop用ディレクトリ設定
4の設定で定義したディレクトリを作成。

6. SSH公開鍵の配布
公開鍵を作成して、スレーブサーバに対して配布。

=====
今日の環境
VirtualBox 4.0.10
ホストOS:WindowsXP sp3
ゲストOS:CentOS-5.6(64 bit)
Hadoop 0.20.2

2011/07/13

2011/06/29 Hadoop勉強会メモ(電力編)

Hadoopを中心とした分散環境での開発方法論・モデリング・設計手法等についての座談会(第5回)のメモ。
九州電力におけるHadoopの取り組みについて

■Hadoopを採用するに至った経緯
情報システム部が抱える問題
 各部門が個別最適なシステムを導入
 各部門ごとに異なるベンダー

システムのサイロ化、ベンダーロックイン

■将来に対する課題
 ・ホスト計算機システム再構築への対応
  →ネックはバッチ処理
 ・両現用センター構成への対応
  →事業(サービス)継続のため
 ・スマートグリッドへの対応

■そのなかで...
 ・コスト削減要求
 ・技術革新に対する対応
 ・商用パッケージ、カスタマイズの限界
  →パッケージ代<カスタマイズ代...となることも
 ・脱ベンダーロックイン

→オープンソース適用に向けての取り組み

■H21研究概要
クラウドの要素技術はサーバ仮想化技術(KVM)と分散処理技術(Eucalyptus)である
オープンソースと商用(VMWear)の性能・機能コスト比較
Hadoopの性能検証
 →台数増やすとどうなるかの実証とか
  →サーバも構築した(b10台、仮想100台以上)
  →結果:台数↑、性能↑(リニアに向上していくみたい)
Hadoopの信頼性
 →実行中にノードを抜いたりして、うまく動くか検証したりした
クラウド環境下における管理手法
 ・リソースの状況とアプリケーションの情報の一括管理
  →管理システムが複雑に
  →RabbitMQ を使った検証

障害時の切り離しとか、複雑多岐になる
→データセンター全体の管理も重要になる

■H22研究概要
分散処理に特化した研究
昨年度からの課題
 ・サーバの仮想化・管理に関する課題
 ・分散処理に関する課題
 ・分散処理環境の運用監視に関する課題

目的
Hadoopを使って、九州電力の典型的業務システムを動かす(運用はしてないけどね)

1.サーバ統合基盤
monkey magic

仮想サーバリソースの有効活用
仮想サーバの自動制御
迅速なサーバ機動
複数の仮想化ソフトウェア(KVMでも、VMWearでもなんでも)に対しても、その差異を気にせず利用可能
ネットワーク的に違う拠点でも制御可能

Eucalyptusは使わず、自社開発

libvertを使った。

Eucalyptus
10台以上リクエストタイムアウトが発生したり...

 ・要求台数に満たなくても、起動したものからサービス提供
  →Lindaモデル

monkey magicとの連携→amazon EC2との連携が可能

Volante Cloud
と連携APIで接続
 →ハイブリッドクラウドを実現

50台起動→15分ほど。既存の7分の1くらいで実現可能に

2.運用監視基盤
 →既存の監視に加え、判断、制御を行う
  ※monkey magicのDSLで定義可能

3.分散バッチ処理
hadoopサーバ(仮想10台。実際は物理2台ですんだ)
処理対象の電柱データ104万本

抽出してHDFSに

処理性能が676倍に

コストも物理サーバ2台といい感じ。

プログラム処理の効率化
 →プログラムに前後関係が無いことが前提

障害発生
 ・レプリケーション
 ・復元可能

■H23研究概要

課題
・仮想サーバの動的・固定割当
・分散バッチに関する課題
 →開発標準の策定
 →分散バッチ開発フレームワークの整備
  →Asakusa

将来へ向けて
 ・スマートグリッドの時代に
  →メーターの取替えが必要なので、実際10年はかかるw
  →10年後のシステムに商用ソフトがいいのか...
   →Hadoopみたいなのがいいのでは?
  →24h×2×800万世帯...
   →1日に膨大なデータが増えていく

テネシー州の電力公社の事例

まず、将来目指すべき理想像を掲げる
新しい技術の導入は、段階を踏んで
コミュニケーションは大切

diskIOを分散するのが分散化のポイント
→ストレージを共有するタイプなら、Hadoopは向かない...

仮想化で何がマズイか)ディスクIOが共有するので<共有ストレージとか使う場合 これだと分散の意味がいない・・。IOを分散するような仮想化じゃないとストレージがボトルネックになる
仮想化上のHadoopで気をつけなければいけないのは、ディスクを共有しないこと

Asakusa、monkey magic の連携は必然的にそうなった。
monkey magic
 →8月にオープンソース化
 →Asakusaのコードリーディングの会あり

2011/06/29 Hadoop勉強会メモ(鉄道編)

Hadoopを中心とした分散環境での開発方法論・モデリング・設計手法等についての座談会(第5回)のメモ。

■システムの耐用年数10年(開発4~5年、規模10Mステップ、10K人月)
 進路制御のシステムはガチガチなつくりで、耐用年数も20年を超える
 →システムの寿命が長いので、新しく採用する技術の見極めも重要に

■国鉄三大システム
 ・マルス 1960~
 ・コムトラック 1972~
  →鉄道会社別に派生したシステム有
 ・ヤックス ~1984

■鉄道システムに求められるもの
 ・作業の効率化
 ・連続稼働(社会インフラとしての責務)
  →分散処理
   ①可用性のためのしくみ
   ②バッチ処理の高速化
 ・高度な判断支援(ベテランの引退に伴うノウハウの継承)
  →最適化

■連続稼働のためのシステム構成
・Fault Tolerant:1系のみ
・Active-Standby(FT):1系、2系
・Active-Active:1系、2系 ◎現在、これが主流
 →系切り替えは10秒以内、データのリトライからの投入はない。
  ・専用ハードウェアが高価
  ・作りこみが複雑
  ・系を切り替えるタイミングは無限大(試験不可能:不具合の温床)
 →汎用的なハードを使用したい
 →なるべく作りこみを減らしたい
・1系、2系、3系(3系は予備でStandby)
・1系、2系、3系、全部Active
 →多数決をとらせる(magiシステムやね)

■輸送計画のシステムではバッチ処理がほとんど。
・作業のオーダーは数分~数時間
 →この時間を短縮したら、作業の効率化になるかな?
 →Asakusaつかえるかな?

■鉄道における計画問題
 ・作業が俗人的
 ・効率化したい

 ☆研究が盛んだが、実用化はまだ...
  ただ、ハードウェアの性能向上、低下価格化進んでるので..

■システムに求める要望も変化している
・プロフェッショナル向けの機能から、誰でもそれなりの結果を出せる機能へ

■最適化技術
 ・ある条件のもとで最適解または許容解を見つける技術
  ・線形計画法、整数計画法
  ・ネットワークフロー
  ・?

 ☆とにかく数式化・モデリングしないと始まらない

■制約条件もいろいろ
・走行距離とか、検査とかも含める
 それを踏まえて、車両運用案を決めるのが大変。

■乗務員運用のモデリング
 ・車両運用のモデリングと同じ。
  ただし、1車両に複数の乗務員が便乗できるので、数式が少し変わる。

■車両割当のモデリング
 ・組み合わせも膨大
 ・予備の割当も必要
 ・ネットワークフローを使って作業したことも

■1970年代頃から盛んに研究されてきた
コンピュータの高性能化により、机上研究から実証研究に移りつつある。
ただし、実用化はまだまだ...

大手鉄道会社では、実用化を始めているところも...
ただ、まだまだ

■まとめ
鉄道システム
 ・まだまだシステムの介在する領域アリ(未踏領域が多く残っている)
 ・開発サイクル長く、開発も保守的になりがち
  →35年前のコムトラの仕様と大きくは変わっていなかったりする。
  →新しい手法を導入するには、事前の緻密な調査が必要。結構コストかかる。
 ・業務の用件や、システム利用者の意識は常に変化
  →システムは追従の必要アリ
 ・これからの鉄道システムの開発には、多様な技術力が必要


コアな部分とそうでない部分を分けて考えようという流れもある。
 ・コアな部分:保守的でも仕方ないかな
 ・そうでない部分:分散処理とか使ってみようよ

東京メトロは最適化技術を導入しはじめている
京急まだ、基本人力w
 →システムと人間の使い分けをある意味しっかりしている。

市販の参考文献アリ

質問:分散系は、鉄道の周りのサービスで使ってんじゃない?
Suicaの使用履歴(電子マネーの購買履歴)とか、乗車データとかはある。
→データ売ってもお金になる(駅構内のテナントの販売計画とか)
→東急エージェンシーとか、鉄道系広告会社が研究してそう。
→ストーカーみたいなマーケってテーマのひとつだし...

質問:新技術の採用のネック
・保守体制、コストがキーに
 →耐用年数長いしね
  →採用技術(製品)のライフサイクルは結構気にする
 →スピーカーさん自身、途中で終わっちゃったシステムは今のところない
 →エクセルで帳票作ってほしいっていうニーズも
  →10年後のエクセルってw 互換性はー?
 →企業買収とかで、製品の取扱い元が変わって、保守費用UPってことも