Hadoopとは何か【OpenSourceConferenceのセッションメモ】
2015/07/01
Hadoopとは何か
ご存知のように最近の情報処理分野では、”IoT”や”ビッグデータ”のようなキーワードが取り上げられています。そんな”IoT”の技術で生じる課題の1つに、「生じた大量のデータを扱うには膨大なコンピュータリソースを割く必要があること」があげられます。
Hadoopはそんな膨大なデータを効率良く処理するための分散処理基盤となっているため、これから益々注目される技術になると思います。
今回の記事では、筆者がOpenSourceConferenceでHadoopのセッションで書き留めたメモ等をもとに、「Hadoopとは何か」に焦点を当てて解説したいと思います。
Hadoopの概要
Hadoop(Apache Hadoop)はApcheSoftWareFoundationによって開発・公開されているオープソンソースの大規模処理フレームワークとなっています。内部のコードはJavaで実装されており、従来のITアーキテクチャでは難しかった膨大なデータの処理を低コストで行うことができます。
Hadoopの登場により、並列分散処理基盤を導入する障壁が顕著に下がりました。
Hadoopの構成
まず、上の画像左側にあるHadoopクライアントは、処理を実行するパソコンと考えていただいて構いません。Hadoopクライアントから伸びている矢印は処理の依頼と考えてください。
Hadoopマスタサーバは、Hadoopの並列分散処理を進める上での監督という立ち位置です。データとジョブを管理する主体となりますが、Hadoopのバージョンによって役割は変化してきています。
最後のスレーブサーバは、複数のサーバからなるサーバ群となります。スレーブサーバ群を構成するそれぞれのスレーブサーバは、実際の処理を行う場所であり、実際のデータを保持する場所でもあります。
この先は、Hadoopの重要な2つのキーファクターを説明していきます。
- HDFS
- MapReduce
HDFSについて
Hadoopにおける分散ファイルシステム(HDFS)については次のことがいえます。
- 複数のサーバをまとめて1つの巨大なファイルシステムがあるかのように操作できる
- 裏に何台のサーバがあるか意識する必要がない
- hdfs dfs -ls のようなコマンドでlsコマンドと同じようにファイルの一覧を出すことができる
HDFSの基本的なコンセプトは大量のデータを効率的に読み込む仕組みにあります。大量のデータも同時に読み出すことができれば高速化できます。
もうひとつは、データをブロック単位で扱いデータの安全性を担保する仕組みです(レプリケーションと言います)。この仕組みを用いブロックを複製し複数のサーバに保持させることにより、1台のスレーブサーバが故障したときも他のスレーブサーバにバックアップが保持されている状態になります。
つまり、分散ファイルシステムの裏側では、容量のみを考慮したブロックサイズで区切られ、ブロックをスレーブサーバに置く際、レプリケーションの仕組みでブロックの複製も同時に行うことになります。さらに、取り扱うデータ量の増大にあわせて、サーバを増設できるようにもなっています。
MapReduceについて
MapReduceとはMapタスクとJobタスクのみを指定すれば、あとはフレームワークが並列分散処理を実現させてくれる仕組みです。
他の特徴としては、ジョブ実行中にサーバが故障したとしてもタスクが再実行される仕組みがあります(成功で完了します)。サーバ数を増やすことでスケール可能であり、処理性能が向上します。
MapReduceのアルゴリズムは大まかに次のようになっています。
- 大量の票を山分けして投票者ごとにわける「Map処理」
- わけた票を集める「Map処理」
- グルーピングした票を集計する「Reduce処理」
- HDFSに書き込み
ここにある”集計処理”は、M人でやればM倍のスピードで相互に影響を受けず作業できるため、スケール
可能であるというイメージになります。
また、MapReduceという命名はMap処理とReduce処理を行うところから来ています。
まとめ
以上、「Hadoopとは何か」というタイトルの元、Hadoopの概観を説明してきました。
Hadoop処理は数十GB〜数PBのバッチ処理などに適用すべき処理とされています。ビッグデータなど従来のサーバで処理しきれなかった領域だけでなく、従来サーバで処理していた領域の高速化にもお使いいただけれると思います。これを機会にHadoopに興味をもっていただければ幸いです。