HadoopのHDFS確認とサンプルプログラムの実行

前回作成したHadoop環境でHDFSの確認を行います。
その後、HDFSを使うサンプルプログラムを実行します。
参考サイト:http://archive.cloudera.com/docs/cdh3-pseudo-distributed.html

準備

inputディレクトリを作成する

$ hadoop-0.20 fs -mkdir input

作成されたか確認する

$ hadoop-0.20 fs -ls
Found 1 items
drwxr-xr-x   - root supergroup          0 2010-06-01 22:49 /user/root/input


試しに設定用のXMLファイルをHDFSへコピー

$ hadoop-0.20 fs -put /etc/hadoop-0.20/conf/*.xml input

コピーされたか確認

$ hadoop-0.20 fs -ls input
Found 6 items
-rw-r--r--   1 root supergroup       3936 2010-06-01 22:53 /user/root/input/capacity-scheduler.xml
-rw-r--r--   1 root supergroup        338 2010-06-01 22:53 /user/root/input/core-site.xml
-rw-r--r--   1 root supergroup       3032 2010-06-01 22:53 /user/root/input/fair-scheduler.xml
-rw-r--r--   1 root supergroup       4190 2010-06-01 22:53 /user/root/input/hadoop-policy.xml
-rw-r--r--   1 root supergroup        496 2010-06-01 22:53 /user/root/input/hdfs-site.xml
-rw-r--r--   1 root supergroup        213 2010-06-01 22:53 /user/root/input/mapred-site.xml

サンプルプログラムの実行

サンプルプログラムに入っている「grep」サンプルを実行

$ hadoop-0.20 jar /usr/lib/hadoop-0.20/hadoop-*-examples.jar grep input output 'dfs[a-z.]+'

実行中は以下のように出力される
ログをよく見ると、jobが二回走っている事が分かる
これはgrepが二段のMapReduceでできているから
一段目:grep-search
二段目:grep-sort

10/06/01 22:56:49 INFO mapred.FileInputFormat: Total input paths to process : 6
10/06/01 22:56:50 INFO mapred.JobClient: Running job: job_201006012248_0001
10/06/01 22:56:51 INFO mapred.JobClient:  map 0% reduce 0%
10/06/01 22:57:18 INFO mapred.JobClient:  map 33% reduce 0%
10/06/01 22:57:27 INFO mapred.JobClient:  map 66% reduce 0%
10/06/01 22:57:33 INFO mapred.JobClient:  map 100% reduce 11%
10/06/01 22:57:39 INFO mapred.JobClient:  map 100% reduce 100%
10/06/01 22:57:41 INFO mapred.JobClient: Job complete: job_201006012248_0001
10/06/01 22:57:41 INFO mapred.JobClient: Counters: 18
10/06/01 22:57:41 INFO mapred.JobClient:   Job Counters 
10/06/01 22:57:41 INFO mapred.JobClient:     Launched reduce tasks=1
10/06/01 22:57:41 INFO mapred.JobClient:     Launched map tasks=6
10/06/01 22:57:41 INFO mapred.JobClient:     Data-local map tasks=6
(途中略)
10/06/01 22:58:06 INFO mapred.JobClient:     Map output bytes=86
10/06/01 22:58:06 INFO mapred.JobClient:     Map input bytes=118
10/06/01 22:58:06 INFO mapred.JobClient:     Combine input records=0
10/06/01 22:58:06 INFO mapred.JobClient:     Map output records=4
10/06/01 22:58:06 INFO mapred.JobClient:     Reduce input records=4

実行はWeb画面でも確認できる
http://localhost:50030/

結果の確認

grepを実行すると、outputディレクトリが作成される

$ hadoop-0.20 fs -ls
Found 2 items
drwxr-xr-x   - root supergroup          0 2010-06-01 22:53 /user/root/input
drwxr-xr-x   - root supergroup          0 2010-06-01 22:58 /user/root/output

outputディレクトリの下にpart-****ファイルが作成される

$ hadoop-0.20 fs -ls output
Found 2 items
drwxr-xr-x   - root supergroup          0 2010-06-01 22:57 /user/root/output/_logs
-rw-r--r--   1 root supergroup         62 2010-06-01 22:57 /user/root/output/part-00000

出力された結果を見てみる

$ hadoop-0.20 fs -cat output/part-00000 | head
1	dfs.name.dir
1	dfs.permissions
1	dfs.replication
1	dfsadmin

4つ見つかった、と言う結果

これをWeb画面で確認する事もできる
http://localhost:50070/


※ このサンプル、連続で実行すると「FileAlreadyExistsException」でアベンドする
これはoutputディレクトリが既に作られてる事が原因
ディレクトリを削除して実行するとうまくいく

$ hadoop-0.20 fs -rmr output

Ubuntu10.04でHadoop環境構築(疑似分散編)

何度も構築しているとたまに忘れてしまうので、備忘録として記載します。
今行っている研究室での導入用教材にも転用。
OSのインストールからHadoopのインストールまで駆け足で解説します。


以下の環境が前提です。(ホストOSや仮想環境は他でも可)

  • ホストOS:Mac OSX(10.6.3)
  • 仮想環境:VMware Fusion3

インストールの流れ

  • Ubuntu10.4LTSインストール
  • VMware Toolsインストール
  • JDK6インストール
  • Hadoop 0.20.2インストール

大まかに上記のような流れ。

Ubuntuのインストール

ほとんど悩む事はないでしょう。
VMware仮想マシンを作成し、isoからインストール
Ubuntu Desktop 日本語 Remixのダウンロード | Ubuntu Japanese Team
「簡易インストールは選択しない」ことだけ注意

VMware Toolsインストール

VMwareとホストOSとのコピペや解像度の設定など便利ツール
インストール方法は、以下の手順

  • VMwareのメニューから、「仮想マシン」→「VMware Tools のインストール」を選択
  • GuestOSのデスクトップにVMwareToolsのディスクがマウントされる
  • 圧縮されたファイルを適当な場所に解凍
  # tar xzvf VMwareTools-xxxx.tar.gz
  • VMware Toolsインストール

  解凍したディレクトリに移動して、以下のコマンドを実行

  # sudo ./vmware-install.pl

  何度かの質問に答えるとインストール終了

JDKのインストール

  • sources.listの編集

  場所は、/etc/apt/sources.list
  インストール候補にするため、以下を有効にする

  deb http://archive.canonical.com/ubuntu lucid partner
  • JDKインストール
  # apt-get update
  # apt-get install sun-java6-jdk

Hadoopのインストール

導入の容易さを考えて、Cloudera’s Distribution for Hadoopを利用する
参考サイト:http://archive.cloudera.com/docs/_apt.html

  /etc/apt/sources.list.d/cloudera.list 作成

  deb http://archive.cloudera.com/debian lenny-cdh3 contrib
  deb-src http://archive.cloudera.com/debian lenny-cdh3 contrib

  上記2行を追記する

  curl -s http://archive.cloudera.com/debian/archive.key | sudo apt-key add -

  (curl 入ってない場合はインストール)

  # apt-get update
  # apt-cache search hadoop
  # apt-get install hadoop
  • 疑似分散モードの設定をインストール

  http://archive.cloudera.com/docs/cdh3-pseudo-distributed.html

  # apt-get -y install hadoop-0.20-conf-pseudo

Hadoop起動の確認

  • Hadoopの全てのサービスを起動する
  for service in /etc/init.d/hadoop-0.20-*
  do
  sudo $service start
  done
  • 起動を確認する

  NameNodeの確認:http://localhost:50070/
  JobTrackerの確認:http://localhost:50030/
    

以上で一通り環境構築完了。


次回以降、HDFSの設定、Pigの設定やEclipseの設定を投稿予定。

Ubuntu10.04日本語入力の環境

以下の環境下でのIMEキーセッティング

  • MacBook
  • ホストOS:Mac OSX(10.6.2)
  • VMware Fusion3
  • ゲストOS:Ubuntu10.04


IM切り替えのキーマッピングに癖があるので、
好みの設定に変更する。

キーボードの設定

「システム」→「設定」→「キーボード」を選択


「レイアウト」タブを選択
「日本」を追加(始めから日本があっても再登録が良い)
「キーボードの型式」で該当のキーボードを選択
ここでは、MacBook/MacBook Pro(Intl)を選択

IBusの設定

「キーボードマーク」→「設定」を選択


「一般」タブの「切り替え」ショートカットで
「Hiragana_Katakana」を設定


これで「かな」キーによるIMの切り替えが出来るようになる。

「Hadoopについて」大学でセミナー開催

3/24 にHadoopセミナーの為に大学まで行ってきたので、その紹介をします。
きっかけは、とあるコミュニティで知り合った大学の関係者の方。
私を含め3人で話をする中で、学生が研究している内容と
私が業務としている内容がマッチできるのではないかという話が発端です。

セミナーの内容

先方からの依頼で、セミナーの内容は以下に決めました。
クラウドの一般的な内容
クラウドの中の技術しての分散処理
・分散処理として注目を集めているHadoop


クラウドの一般的な内容」は、過去のエントリを要約して行いました。
2010-02-11 - osacaz4の日記


次にクラウドで重要なキーワードになる「分散処理」。
分散処理の一般的な考え方や想定される利用範囲について説明しました。


最後に当日のメインである「Hadoop」。
MapReduceとはどういったモデルか。
Hadoopのシステム構成例。
Hadoopサブプロジェクトの紹介。
特に Pig、ZooKeeperには注目している話。
HBase、Hiveなど代替RDBの話。
派生して、分散データベースのCassandraの紹介。
Hadoopを利用した具体的なシステム例。
今後実現しようとしているHadoopアプリケーション構想。

質疑応答

セミナー終了後の質疑応答では、活発な質問が寄せられました。
Hadoopで使える言語は?
MapReduceのコーディング例
・ZooKeeperとは?
SQLは使えるのか?
・どういった分野に使えるか?
・分散処理のさせ方 (分散処理の内部的な動作)


質疑では教授、準教授、助教から多くの意見を出して頂けたのが収穫でした。
興味深い分野である事が実感として伝わってきた感じです。
また、学生からもシャープな質問が挙がってきました。
あまりに突っ込んだ質問で、私の準備が追いついていない場面もあったほど。

研究室での研究内容紹介

同時に研究室での研究内容も伺いました。
充足可能性問題(SAT)の研究や自動推論システムについて。
Hadoopを使える可能性を探る、というか
Hadoopを使うことで研究になんらかの寄与があるかどうか、
について考える事が今回の趣旨になると思っています。
Hadoopは得手・不得手が出やすい技術ですが
同研究室の研究とは相性が良いと言うのが印象です。
もちろんそのままでは使えないのですが、一部加工・応用する事で
Hadoopの良い点を発揮できる分野だと思います。

感想

研究内容ともマッチしそうですし、個人的には今後が楽しみに感じています。
より実践的な例などが質問でも多く挙がっていました。
つまりは、Hadoopを利用できそうな印象を受けているために
より具体的な適用方法を求められているのだと思います。
特にデータ収集、分析などはHadoopの得意とする場面なので
うまく利用すれば効果が現れやすいでしょう。
今回は導入なので表面的な内容になってしまいましたが、
Hadoopの動作環境などを持って行くとよりイメージをしやすかったかもしれません。(これ反省です)


私自身Hadoopのソースも深いところまでは追えていないので、ソースコードをみんなで読み解いていったり、
それぞれの得意とするサブプロジェクト情報を持ち寄ったりしたいです。
そうする事で全体のレベルアップになるよう活動していくのが私の目標になりました。

Java Cloud Meeting Fukuoka 2010に参加した感想


Java Cloud Meeting Fukuoka 2010 – February 20, 2010. 10am-6pmに参加してきました。
主催のヌーラボ さんには「Javaセンスアッププログラミング」の著者がいらっしゃいました。
私はこの本でJavaのセンスアップを図った”クチ”なのでちょっとミーハーしてました。
といきなり本筋とは関係ないですね。

本題。


きしださんの

クラウドで変わるJava開発」

とても印象深い話題。
ムーアの法則で時代が進むと一台でもクラウド、の時代がくると。
実際にクラウドでサイト運用してみろと。
そしたらエンジニアがクラウドを肌で感じられると。


きしださんは午後にももう一つ

GWTを使ってクライアント側ブラウザアプリケーションをJavaで」

html5の話題をからめつつ、クラウド自体にも飛び火した話題。


きしださんの話は面白い。わくわくします。
聞いてて引き込まれる楽しさがありました。


しかじろうさんの

「Let’s Start Android

androidの話題。
すごく楽しそうな事やってるな、というのが伝わってきました。
オープンスペーステクノロジーというのを初めて知りました。
鹿の絵がかわいいです。


縣さんの

Cubby in Action」

Cubbyの紹介。読みは「カビー」
簡単で覚えやすいF/W。
シンプルなF/Wなので、ベースクラスを作って活用するのが良い。
cubbyはgaeでも使える サンプルありとのこと。
これは使ってみたい!と思えました。


yone098さんの

「T2 on GAE〜T2キャラクタは福岡生まれ〜」

T2は全く使った事がないけど話は聞いてたというものだったので、
とても興味深く聞いてました。
GAEでFlex
サーバとクライアント間を容易に通信できる仕組みAMF。
AMFをキャプチャするfirefoxプラグインはすごかったです。
プロジェクト生成プラグイン viliも便利そうだったな。


しんいちおがわさん

Google App Engineプラットフォームの勘所」

GAEやってる人は聞くべき内容。
たぶん一度は悩んだ話題が目白押し。
もっと早く聞きたかった…と思える内容でした。
EntityGroup重要だす。
楽観的排他というのは場合によっては気をつけないと。


ひがさん

「AppEngineで知っておくべき10のポイント」

時間の関係?で3つになりました。
しかし、深い3つ。
クラウドのポイントはスケールではなく安さ。
・安く仕上げるためには対価が必要。
・今後IT業界は拡大しない。
3つ目の話題は、もう少し突っ込んで聞きたい話題でした。
後半はSlim3を使ってサンプル作成を実践。
TDD。こんな機会は滅多にないだろうな。ありがたすぎです。


最後は、ライトニングトーク
LTながら濃い人達が集まっていました。
・作成Androidの紹介
・ブログポリスの紹介 <ー びっくり
・T2のデザイナーさん
・飯塚とAndroidとのコラボ話題
あと一つくらいあったはずだけど…


私も以下の話題で少しだけお時間頂きました。
クラウド初歩とHadoop
この話題でも懇親会で意外と反響があったのは嬉しかったです。


関係者のみなさん、Speakerのみなさん
ありがとうございました。

社内のコミュニケーションについての考察


先の報道にもあったように、ソフトバンクの全社員Twitter使用命令や
日立の社内外でのSNS活用などを目の当たりにするようになりました。
これらを踏まえ、我々ような小規模な企業こそ
密にコミュニケーションをとるべきと考えています。
しかし、実態として「現場が違う」「現場毎に忙しさが違う」
などを理由におざなりになっているのが現状です。


これを変革したい。というのが私の思いです。
仮にも我々は技術者であり、技術に長けている集団です。
社内のコミュニケーションツールを作ることなど造作もありません。
今ではBizSparkやクラウドのおかけでインフラにも不自由しません。
あとは運用ポリシーを考え、実際に活用する土壌を作るだけです。


ここまでお膳立てが揃っている時代に何も動かないのは
怠慢であるという気さえしてきました。
社員から自然発生的に出てくるのを待つのも手ですが、
トップダウンで環境を整えて実践を促すのが良い時もあります。


社員の時間を使ってもその分を給料に反映できないのも事実でしょう。
だから私がソフトウェアを作成し、環境を整えます。
あとは使えば良いだけというところまで持って行きましょう。


だって、残業規制が出て堂々と定時で帰る事ができる時期なんて
そんなにないでしょう?

今さらながらクラウド・コンピューティングの基礎について

View more presentations from osaca z4.


2009年10月〜12月に研修で使ったスライド。
ちょっと内容的に古いところもあるけど、参考までに。
対象者はクラウドを知らないか、言葉は聞いたことある程度の人向け。
技術者だけでなく、営業職など技術以外の方も対象範囲に。
(PPTを変換すると文字が若干崩れた)

クラウドが何か、を説明する前にクラウドに注目が集まる理由

今までのように技術的な議論だけで終わらず、
経営者が積極的に導入を検討している事でも注目されています。

クラウドの概念

これはよく見かける図だと思います。
クラウドを概念的にあらわした図です。

クラウドは既存技術

ASPSaaS、グリッドや仮想化などの技術を利用したサービス群と考えると
既存技術の総称と言い換える事ができ、理解しやすくなるのではないでしょうか。
クラウドの勉強会を行うと
「今までのSaaSクラウドは違うものか?」
「仮想化とクラウドは違うものか?」
といった質問を受ける事があります。
私は、「今はまだ厳密に分ける必要はない」と答えるようにしています。
技術的な背景を理解する事は言うまでもなく重要なのですが、
自分に都合よく言葉を定義する事も大切です。
(仮想化ストレージを”クラウド”と広告している企業もありますよね)

クラウドの階層

クラウドはよく3層構造で説明されます。
が、最近はもう3層ではなくかなり複数が定義されています。

クラウドの提供範囲

それぞれ提供される範囲が異なります。
図中の線より上は自ら準備する必要があり、
図中の線より下はクラウドで提供されます。

パブリックとプライベート

インターネット上に公開されているクラウドが「パブリック」、
自社など閉じたネットワーク内にクラウド自体を構築するのが「プライベート」。
プライベート・クラウドの場合、社内の資産をクラウド化します。
しかしクラウド化すること自体が目的ではなく、その先にサービスを構築する事でメリットが生まれてきます。

メリット・デメリット

メリットがあるから「使わなければいけない」ではなく、
またデメリットがあるから「使えない」でもなく、
「使える用途で使う」というスタンスが大切です。

既存の環境との比較

(サービスによるが)ハードウェア的資産の大部分を自社に持たなくて良くなります。

コスト比較

Google App Engineの無償範囲でシステム構築した場合を想定しています。

パブリック・クラウドの例

有名どころのGoogle Appsを紹介しています。

プライベート・クラウドの例

OSSで構築する例を挙げています。

クラウドの今後

クラウドの提供パターン毎にそれぞれどのような用途・分野に適しているかを分類しています。

クラウドの将来像

自らの考察を含めクラウドとの距離の取り方を考えています。
個人としてはクラウドに取り組まない理由はないでしょう。
リスクが少なく(金銭的負担がほぼない)、得るもの(主に技術的蓄積)は大きい分野だと思います。
企業としてはメリットだけではありません。
方針を定め、人的・コスト的投資をする覚悟で取り組む必要があります。
特に中小のシステム開発会社では人的リソースの問題などで慎重にならざるを得ない可能性もあります。



資料は下記のシリーズ展開で作成。
クラウド導入編 (今回の資料)
クラウド活用編 (Google App Engineの紹介)
クラウド実践編 (試作アプリケーションの作成)
クラウドコア編 (分散処理の概要)
クラウド応用編 (Hadoopを使った分散処理環境の構築)
クラウド特別編 (Hadoopを利用した業務アプリの作成)


次回はクラウド活用編を予定。