つかびーの技術日記

(情報)工学修士, 元SIer SE, 現Web系 SEの技術blogです。Scala, Java, JS, TS, Python, Ruby, AWS, GCPあたりが好きです。

5分で分かるHadoopまとめ(初めての人用)

   

はじめてのHadoopという本を読んでみました。他にもネットなどでも色々情報収集してある程度分かってきたのでまとめてみます。

[tmkm-amazon]4774153893[/tmkm-amazon]

Hadoopとは

並列処理のためのアーキテクチャ(およびそれを構築するソフトウェア)です。フレームワークの側面も持っていますし、分散ファイルシステムやDBという側面も持っています。様々な関連製品があります(Hive, Pig, HBase, Cassandra, Mahout, etc…)。

グリッドコンピューティングと近いです。

グリッドコンピューティングはインターネット越しというイメージがあると思いますが、Hadoopは絶対ではないですがLANで完結しているイメージです。Hadoopの結果を見たり利用するためにインターネット越しにアクセスすることは十分あると思いますが、並列処理する部分はLANが多いと思います。

Hadoopで何ができるのか

ビッグデータを分析できます。

従来、1時間以上かかっていた処理が数分で実行できるようになります。その分、ハードウェアも沢山必要になりますが。

Hadoopでより具体的に何ができるのか

数億行のファイル、数百万ファイル、数億レコードという膨大なデータを複数のコンピュータによって分散処理することで分析等が行えます。

  • アクセスログ解析によるページランキング作成
  • ユーザの行動、趣向に基づくユーザのクラスタリング
  • ユーザの購入履歴や視聴履歴、類似ユーザに基づく商品のレコメンド
  • カーナビデータに基づく渋滞情報の作成

結果はマーケティングとか経営判断の資料とかに使えると思いますし、アプリケーションの1コンテンツ(レコメンド、ランキング)としても使えます。そういう事例は多いですね。

Hadoopの仕組み

本質は以下の2点です。

  • HDFS(分散ファイルシステム)
  • MapReduce(分散処理およびその結果の統合処理)

HDFSという仕組みでファイルを複数のコンピュータの何台かに分散させます(レプリケーション)。これによってどれかが死んでも生きている場所からデータを取り出せます。

MapReduceでは実際に処理を行います。例えばHDFS上の100万行のファイルを20台で分散処理して、ファイルに登場する単語の数を結果として生成する、というようなことを行います。このMapReduceが分析処理の要です。どのような分析をするかはMapReduce次第です。通常MapReduceはプログラミングによって作成する必要があります。

Hadoopシステムの構築と運用

Hadoopは複数のコンピュータ(Linuxサーバ)を用意して構築します。

  1. 複数のコンピュータを接続する為のネットワークを用意
  2. Linuxサーバを複数台用意
  3. Hadoopをインストール
  4. それぞれのサーバの役割を決めて、各Hadoopプロセスを必要なものだけ稼働させる
    (プロセスにはいくつか種類があります。MasterとSlaveみたいな。)
  5. 分析用のMapReduceを作成
  6. HDFS上にビッグデータを投入
  7. MapReduceジョブを実行し、分析
  8. 結果を目的のために利用する(マーケティングやWebコンテンツなど)

 

実態は分かりませんが、Hadoopは1社で1システムあれば十分かも知れません。MapReduceを切り替えさえすればHadoop環境は1つで良いため、1社に1つあれば良いでしょう。

HDFSにはネームスペースの概念がありますので、製品や用途ごとにネームスペースを分けていればHDFS上のファイルがごちゃごちゃになることは無いかと思います。

また、Hadoopはスケールアウトの思想ですので、製品や目的が増えてきた場合はその分コンピュータを増やせば良いかと思います。(気軽に増やしたり停止して節約できるAWSなんかは相性が良いでしょう)

ですが、MapReduceの処理次第で必要なCPU数、速度、メモリ量は変わりますので、製品ごとにHadoop環境を分ける方が安全かもしれません。

実はプログラミングしなくても使える

Hadoopで分析を行うときは、その分析処理の本体であるMapReduceを独自にプログラミングする必要があります。ですが、必ず必要という訳ではありません。

HadoopはデフォルトでいくつかのMapReduce実装を持っていますので、これが用途にマッチすればそのまま使えます。

他にもHiveやPigを利用する手段があります。これらはデータをSQLに近い形で操作し、分析するHadoop関連製品です。例えば分析したい10億行のCSVファイルをHiveを使ってテーブルのような形式へ落とし込み、そこに対してHiveでSQLで操作するということができます。

Hiveを使ってSQLのクエリを発行すると、それが自動でMapReduceに変換され、並列実行されるという仕組みです。

「DBで分析してるけど、GROUP BYが遅すぎてやばい。使えない・・・」というようなシーンであればHiveで事足りるかもしれません。プログラミングは必要ありません。

ただし、MapReduceを独自に実装した方が柔軟性は高いのですが。

Hadoop利用例・資料

まとめ

  • Hadoopはアーキテクチャ
  • 複数台のコンピュータで並列処理する
  • HDFSとMapReduceが本質
  • 関連製品多し
  • 実はプログラミングしなくても分析はできる
  • ただし、MapReduceを独自に作った方が柔軟性は高い

以上です。

色々端折ってますが、お役に立てば幸いです。ご指摘ありましたらお願いします。

 - アーキテクチャ ,