月別アーカイブ: 2011年11月

Hadoop World 2011の資料 #hw2011jp

Hadoop World 2011の資料公開されてないかなーと思って探していたら、普通に公開されていました。

■ Hadoop World 2011 のプレゼンテーション資料一覧はこちら↓
Apache Hadoop for the Enterprise | Cloudera

上記サイトから各セッションのプレゼンテーション資料を閲覧することができます。
 
ちなみに下記のサイトからもプレゼンテーション資料を閲覧可能です。
Agenda | Hadoop World Conference

あと、下記サイトに日本語でいくつかのセッションのまとめが書かれていて良い感じです。
(1) Hadoop World 2011 NYC 情報交換
 
まだ全然キャッチアップできていないので、少しずつ読んでいこうと思います。
 

data-as-a-service(DaaS)という概念について

ググッても、日本語の良い記事がなかったので、英語の記事から解釈しました。

Domoracki asks, “What is data-as-a-service”?

Halstead says that from the moment you start using a website, information is being collected about you. Web companies are disrupting traditional data providers because it is now easier to collect millions of records for smaller players in the space. This is a new service offered to businesses.

Sodera says that the vast amount of data available opens up potentials to use data effectively for small to medium sized businesses, not just enterprises who could afford the high prices for valuable data.

ウェブサイトを使い始めた瞬間から、情報があなたについて収集されます。ウェブ企業はそのウェブページで小さいプレイヤーのために何百万のレコードを収集することが容易であるため、既存のデータプロバイダを破壊している。これは企業に提供する新しいサービスである。

利用可能な膨大なデータは、貴重なデータを高いお金で買うことができる大企業だけでなく、中小企業にとっても効果的にデータを使うポテンシャルを開くと。

With data-as-a-service, any business process can access data wherever it resides.

data-as-a-serviceで、どこにデータが置かれていようとも、どんなビジネスプロセスもデータにアクセスすることができる

つまり、大量のデータ収集して、そのデータがどこに保管されているかをユーザーに意識させることなく、そのデータをユーザーに提供してサービスにしましょう、ということですね。

参考サイト

data as a service | Infochimps Blog

Data-as-a-service, explained and defined
 

24 Interview Questions & Answers for Hadoop developersの和訳

24 Interview Questions & Answers for Hadoop developers : FromDevの和訳です。

Hadoopのアーキテクチャを良く理解していることは、Hadoopを理解するのに必要であり、Hadoopの力を活かすのに必要となる。ここでは、Hadoopデベロッパーインタビュー内で質問することができる、いくつかの重要な質問がある。これは主にHadoopアーキテクチャ、MapReduce、Hadoop API、HDFSに関連する質問をリストしている。

1. Hadoop内でのJobTrackerとは何?Hadoopクラスタ上ではいくつのJobTrackerインスタンスを起動できる?

JobTrackerはHadoop内で、MapReduceジョブを発行したりトラッキングするためのデーモンサービスである。Hadoopクラスタ内では、たった一つのJobTrackerが起動される。JobTrackerはJVMプロセス上で起動する。一般的な商用クラスタでは別のマシン上で実行する。各SlaveノードはJobTrackerのノード位置により構成される。JobTrackerはHadoop MapReduceサービスの単一障害点である。もしJobTrackerがダウンすると、すべての動いているジョブが停止する。

Hadoop上のJobTrackerは次のアクションを行う。(Hadoop Wikiから抜粋)
・クライアントアプリケーションがJobTrackerにジョブを発行
・JobTrackerはNameNodeと通信し、データの場所を決める
・JobTrackerは利用できるスロットを持つTaskTrackerノードやデータに近いTaskTrackerノードを示す
・JobTrackerは選ばれたTaskTrackerノードに仕事を割り振る
・TaskTrackerノードは監視される。もしハートビートが途切れた場合、失敗したと判断され、別のTaskTracker上で仕事がスケジューリングされる。
・タスクが失敗するとき、TaskTrackerはJobTrackerに知らせるでしょう。JobTrackerはその時どうするかを決める。ジョブをどこかに再発行するかもしれない、特定のレコードを避けるべきとしてマークするかもしれない、そして信頼できないものとしてTaskTrackerをブラックリストにさえするかもしれない。
・仕事が完了したとき、そのJobTrackerはステータスをアップデートする
・クライアントアプリケーションはJobTrakcerの除法を獲得することができる

2. どのようにJobTrackerはタスクをスケジュールする?

TaskTrackerはJobTrackerにハートビートメッセージを送っていた、通常数分ごと、JobTrackerにTaskTrackerがまだ生きていることを安心させるために。これらのメッセージはJobTrackerに利用できるスロットの数を伝えたりもし、そしてJobTrackerはクラスタの仕事を委任することができる場所を最新の状態に保つことができる。

JobTrackerがMapReduceオペレーションの間にタスクをスケジュールするためにどこかに見つけようとすると、データを保持しているDataNodeのホストと同じサーバーのカラのスロットを最初に探す、そして、もしダメであれば、同じラック内のマシンのカラのスロットを探す。

3. Hadoop内のTaskTrackerは何?Hadoopクラスタ上でいくつのTaskTrackerインスタンスが起動する?

TaskTrackerはJobTrackerからのMap、Reduce、シャッフルオペレーションタスクを受け入れる、クラスタ上のスレーブノードデーモンである。どんなHadoopスレーブノード上でも、たった一つのTaskTrackerプロセスが動作します。TaskTrackerはJVMプロセス上で実行します。

全てのTaskTrackerはスロットの集合で構成され、これらは受け入れることができるタスクの数を示します。TaskTrackerはTaskインスタンスと呼ばれる実際の仕事をするためのJVMプロセスに分離することで開始され、これはプロセスの失敗がTaskTrackerのダウンしないことを保証します。

TaskTrackerはTaskインスタンスを監視し、出力やexit codeをキャプチャします。Taskインスタンスが終了すると、成功もしくは失敗し、TaskTrackerはJobTrackerに通知します。

TaskTrackerもまた、JobTrackerにハートビートメッセージを送り、通常数分ごと、JobTrackerにTaskTrackerがまだ生きていることを安心させるために。これらのメッセージはJobTrackerに利用できるスロットの数を伝えたりもし、そしてJobTrackerはクラスタの仕事を委任することができる場所を最新の状態に保つことができる。

4. Hadoop内でのTaskインスタンスは何?それはどこで実行するの?

Taskインスタンスはそれぞれのスレーブノード上で実際のMapReduceジョブが実行される。TaskTrackerはTaskインスタンスと呼ばれる実際の仕事をするためのJVMプロセスに分離することで開始され、これはプロセスの失敗がTaskTrackerのダウンしないことを保証します。

それぞれのTaskインスタンスはJVMプロセス上で実行する。一つのスレーブノード上でタスクインスタンスのマルチ処理となるかもしれない。これはTaskTracer上で構成されるスロットの数に基づく。デフォルトでは、一つの新しいタスクインスタンスのJVMプロセスは一つのタスクによって生成される。

5. Hadoopシステム上ではどれくらいのデーモンプロセスが起動する?

Hadoopは5つの分離したデーモンで構成される。これらのそれぞれのデーモンは自分のJVM内で実行する。

マスターノード上で次の3つのデーモンが起動する

NameNode - このデーモンはHDFSのためのメタデータを保持する
Secondary NameNode - NameNodeのためのメンテナンス機能を行う
JobTracker - MapReduceジョブを管理し、独立したタスクをTaskTrackerを実行しているマシンに分配する

スレーブーノード上で次の2つのデーモンが起動する

DataNode - 実際のHDFSのデータブロックを保持する
TaskTracker - 独立したMapタスクとReduceタスクをインスタンス化し、モニタリングする責任を持つ

6. Hadoopクラスタ上で一般的なスレーブノードの構成は何?スレーブノード上でいくつのJVMを起動させる?

・TaskTrackerのシングルインスタンスは各スレーブノード上で実行する。TaskTrackerは独立したJVMプロセスとして実行する
・DataNodeデーモンのシングルインスタンスは各スレーブノードで実行する。DataNodeデーモンは独立したJVMプロセスとして実行する
・タスクインスタンスの一つもしくは複数のインスタンスは、各スレーブノードで実行する。各タスクインスタンスは独立したJVMプロセスとして実行する。タスクインスタンスの数はコンフィギュレーションによって制御できる。一般的にハイエンドマシンでは、多くのタスクインスタンスを実行するよう構成される。

7. HDFSとNASの違いは何?

HDFSはコモディティハードウェア上で動くようにデザインされたファイスシステムである。既存の分散ファイルシステムと似ている・が多くある。しかしながら、他の分散システムとの違いは重要である。

HDFSとNASの間に次の違いがある
・HDFSデータブロックはクラスタ内で、全てのマシンのローカルドライブにまたがって分散される。一方、NASデータは専用のハードウェア上で保存される
・HDFSは、計算処理がデータに移動されるため、MapReduceシステムで動作するようにデザインされている。NASは、データが計算とは別に保存されているので、MapReduceには適していない。
・HDFSはマシンの集合によって実行され、レプリケーションプロトコルを使用して冗長性を提供する。一方、NASは単一のマシンによって提供され、データ冗長性は提供しない。

8. どのようにNameNodeはDataNodeの障害を扱う?

NameNodeは定期的に各DataNodeからハートビートとクラスタ内のブロックレポートを受け取る。ハートビートを受け取ることは、DataNodeが正常に機能していることを暗に意味する。ブロックレポートはDataNode上の全てのブロックのリストを含む。

NameNodeがDataNodeから一定の時間ハートビートを受信していないことを検知すると、そのDataNodeは死んだものとしてマークされる。死んだDataNode上に保管されていたブロックは、複製されるでしょう。

NameNodeは一つのDataNodeから別のデータノードへデータブロックのレプリケーションを編成する。そのレプリケーションデータはDataNode間で直接転送され、そのデータは決してNameNodeを通過しない。

9. MapReduceプログラミングモデルはreducerがお互いにやりとりし合う方法を提供する?MapReduceジョブ内で、reducerは別のreducerと通信する?

いいえ、MapReduceプログラミングモデルはreducerがお互い通信し合うことを許可しない。redducerは独立して実行する。

10. reducerの数を0にセットできる?

はい、reducerの数を0にセットすることはHadoopでは妥当なコンフィギュレーションです。reducerを0にセットした時、reducerは一つも実行されないでしょう。そして、各mapperの出力がHDFS上の分割されたファイルとして保存されるでしょう。
[reducerを0以上にセットした時は条件が違い、mapperの出力(中間データ)は各mapperスレーブノードのローカルファイルシステム(not HDFS)に書かれる]

11. どこにmapper出力(中間key-valueデータ)は保存される?

mapper出力(中間データ)は各個別のmapperノードのローカルファイルシステム(not HDFS)に保存される。これは一般的にテンポラリディレクトリの場所であり、Hadoopアドミニストレータによるコンフィグ上でセットアップすることができる。中間データはHadoopジョブが完了後に綺麗にされる。

12. combinerって何?いつ私のMapReduceジョブないでcombinerを使うべき?

combinerはMapReduceプログラムの効率を上げるために使われる。combinerは中間map出力を集約するために使われる。combinerはreducerに転送するために必要なデータ量を減らすのを助けることができる。

あなたはreducerのコードをcombinerとして使うことができる。もし実行されるオペレーションが交換可能で、関連しているのであれば。

combinerの実行は保証されない、Hadoopはcombinerを実行するかもしれないし、しないかもしれない。また、一回しか実行しないかもしれない。したがって、MapReduceジョブはcombinerの実行に依存すべきではない。

13. WritableとWritableComparableインターフェースって何?

・org.apache.hadoop.io.WritableはJavaインターフェースである。Hadoop MapReduceフレームワーク内のどんなkeyもしくはvalueタイプも、このインターフェースを実装する。実装は、一般的に、新しいインスタンスを構築するstatic read(DataInput)メソッドの実装で、readFields(DataInput)を呼び出し、インスタンスを返す。

・org.apache.hadoop.io.WritableComparableはJavaインターフェースである。Hadoop MapReduce内のkeyとして使われるどんなタイプもこのインターフェースを実装する。WritableComparableオブジェクトはComparatorを使いお互いを比較することができる。

14. Hadoop MapReduce APIはkeyとvalueクラスにとって何か規約がある?

・keyはorg.apache.hadoop.io.WritableComparableインターフェースを実装しなければならない
・valueは org.apache.hadoop.io.Writableインターフェースを実装しなければならない

15. MapReduce内でIdentity MapperとIdentity Reducerは何?

・org.apache.hadoop.mapred.lib.IdentityMapperは固有の機能を実装し、mappingインプットを直接アウトプットする。もしMapReduceプログラマがJobConf.setMapperClassを使うMapperクラスをセットしないなら、IdentityMapperクラウはデフォルトvalueとして使用される。
・org.apache.hadoop.mapred.lib.IdentityReducerはreduceを実行せず、すべてのインプットvalueを直接アウトプットする。もしMapReduceプログラマがJobConf.setReducerClassを使用するreducerクラスをセットしない場合、 IdentityReducerクラスがデフォルトとして使用される。

16. Hadoop内での投機的実行の意味は?なざ重要なの?

投機的実行は個々のマシンパフォーマンスへの対処方法である。数百、数千台のマシンの巨大なクラスタは他のマシンと同等のパフォーマンスを持たないマシンも含まれているかもしれない。
これはたった一つのマシンがパフォーマンスがよくないというために、全てのジョブ内で遅延を引き起こすかもしれない。これを避けるために、投機的実行は同じmapもしくはreduceタスクの複数のコピーを別のスレーブノード上で実行することができる。最初に完了したノードの結果が使用される。

17. MapReduceジョブ内でいつreducerが始まるの?

MapReduceジョブ内でreducerは全てのMapジョブが完了するまでreduceメソッドが開始されない。reducerは中間key-valueペアをmapperから利用できるようになるとすぐにコピーを開始する。プログラマは全てのmapperが終了した後でreduceメソッドが呼ばれるように定義する。

18. もしreducerがすべてのmapperが完了しないと開始されないのなら、なぜMapReduceジョブの進行状況がMap(50%)、Reduce(10%)のように表示されるの?なぜreducer進捗パーセンテージはmapperがまだ終了していない時に表示されるの??

reducerは中間key-valueペアが利用できるようになるとすぐにmapperからコピーを開始します。進捗状況の計算もまたreducerプロセスによってデータ転送処理の計算が含まれ、そしてreduceの進捗状況ははmapperにとってのどの中間key-valueペアがreducerに転送できるようになるとすぐに表示を開始します。

reducerの進捗状況が更新されているが、プログラマが定義したreduceメソッドはすべてのmapperが終了した後にのみ呼ばれる。

19. HDFSは何?従来のFileSystemとはどう違うの?

HDFS、 Hadoop Distributed File System、はクラスタ上で巨大なデータを保存する責任を持ちます。これはコモディティハードウェア上で分散ファイルシステムを実行するためにデザインされている。既存の分散ファイルシステムと多くの類似点がある。しかしながら、他の分散ファイルシステムとの違いも大きい。

・HDFSは高度なフォールトトレラントであり、ローコストハードウェア上でデプロイするためにデザインされている
・HDFSはアプリケーションデータに対して大きなスループットを提供し、巨大なデータセットを持つアプリケーションに適している
・HDFSはとても大きなファイルをサポートするようにデザインされている。HDFSと互換性のあるアプリケーションでは、大規模なデータセットを扱う。これらのアプリケーションはたった一度だけ書き込みをするが、一回もしくは複数回読み込みをする。そして、ストリーミング速度を満足させる読み込みを必要とする。HDFSはファイル上の write-once-read-many動作をサポートする。

20. HDFSのブロックサイズは?既存のファイルシステムのブロックサイズとどう違う?

HDFS上では、データはブロックに分割され、クラスタ内の複数ノードに分散される。各ブロックは一般的に64MB もしくは128MBのサイズである。
各ブロックは複数回複製される。デフォルトは各ブロックは3回複製される。レプリカは違うノードに保存される。HDFSは各HDFSはブロックを一つの分割したファイルとして保存し、ローカルファイルシステムを利用する。HDFSはブロックサイズは既存のファイルシステムのブロックサイズと比較できない。

21. NameNodeは何?Hadoopクラスタ上でいくつのNameNodeインスタンスが起動するの?

NameNodeはHDFSファイルシステムの中心的存在である。ファイルシステム上の全てのファイルのディレクトリツリーを保持し、クラスタ全体でファイルデータが保持されている場所を追跡する。ファイル自体のデータは保持しない。

たった一つのNameNodeプロセスがどのHadoopクラスタ上でも実行される。NameNodeはJVMプロセス上で実行する。一般的に商用クラスタ内では、別のマシン上で実行される。

NameNodeはHDFSクラスタにとって単一障害点である。NameNodeがダウンすると、ファイルシステムはオフラインになる。

クライアントアプリケーションは、ファイルを探したいとき、もしくはファイルをadd/copymove/deleteしたいときは、いつもNameNodeに問い合わせる。NameNodeはデータが存在する、関連するDataNodeサーバーのリストを返すことにより、正常なリクエストの反応をする。

22. DataNodeは何?Hadoopクラスタ上でいくつのDataNodeインスタンスが起動するの?

DataNodeはHDFS内でデータを保持する。どのHadoopスレーブノード上でもたった一つのDataNodeプロセスがいる。DataNodeはJVMプロセス上で起動する。起動時に、DataNodeはNameNodeに接続する。DataNodeインスタンスはお互い話すことができ、これは主にデータの複製である。

23. どのようにクライアントはHDFSとコミュニケーションする?

HDFSとのクライアントコミュニケーションはHadoop HDFS APIを使うことにより起こる。クライアントアプリケーションはファイルを探したいとき、もしくはHDFS上のファイルをadd/copy/move/deleteしたいときいつでもNameNodeと通信する。NameNodeはデータが存在する関連するDataNodeサーバーのリストを返すことにより、成功したリクエストを返す。クライアントアプリケーションはDataNodeと直接通信することができ、いったんNameNodeはデータの配置を提供する。

24. どのようにHDFSブロックは複製される?

HDFSは大規模なクラスタ内でマシン間で非常に大きなファイルを確実に格納するためにデザインされている。ブロックの配列として、各ファイルを格納する;最後のブロックを除く、ファイル内のすべてのブロックは同じサイズである。

ファイルのブロックはフォールトトレラントのために複製される。ブロックサイズとレプリケーション要素は各ファイルごとに構成できる。アプリケーションはファイルのレプリカの数を特定できる。レプリケーション要素はファイル生成時間を特定することができ、後で変更されることもできる。HDFSは上のファイルはwrite-onceであり、、いつでも厳密に一つのwriterを持っている。

NameNodeはブロックの複製に関する全ての決定を行う。HDFSはユーザーは rack-aware レプリカ配置ポリシーを使う。デフォルト構成では、HDFS上には全部で3つのデータブロックのコピーがあり、2番目コピーは同じラック上のDataNodeに格納され、3番目のコピーは違うラックに格納される。
※和訳は上記の通りだが、象本では、2番目のコピーは別のラック上のDataNodeと書いてあるので、上記の記述は誤りである。