0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Hadoopって何?

0
Last updated at Posted at 2026-01-21

皆さん、こんにちは。株式会社BTMの風間と申します。

先日、業務で初めて「Apache Hive」を扱う機会がありました。Hiveを調べている時に「Hadoop」という単語が出てきたのですが、恥ずかしながら「Hadoopって何?」という状態でした。

そこで自分自身の備忘録も兼ねて、Hadoopの基本をまとめてみました。

1. Hadoopとは

Apache Hadoop」は、膨大なデータを「汎用的なコンピュータの集合体」で効率よく保存・処理するためのオープンソースの分散処理フレームワークです。主にJavaで開発されています。

「特殊な超高性能マシン1台で頑張るのではなく、どこでも調達できる汎用的なサーバーを並列に動かして、超巨大なデータをさばこう」という仕組みになっています。

Hadoopは、Googleが公開した以下の2つの論文をベースに開発されました。

分散処理は難しく聞こえますが、「数千ページある分厚い本の中から『エンジニア』という単語が何個あるか数える」という作業を想像してみてください。

  • 1人でやる場合: 1ページ目から順に、一人でコツコツ読み進めます。ページ数が膨大になると、終わるまでに何日もかかってしまいます
  • みんなでやる場合: 本を数百ページごとに小分けして、数十人の仲間に配ります。仲間が同時に自分の持ち分を数え、最後に結果を合算します

後者の方が、圧倒的に早く終わります。このように「巨大なデータを切り分けて、みんなで一斉に処理する」のが分散処理であり、Hadoopの基本的な考え方です。

2. Hadoopのエコシステムについて

Hadoopは、単一のソフトウェアではなく、多数のコンポーネント(HBase, Spark, ZooKeeperなど)からなる巨大な「エコシステム」です。

この記事では、その中でも最も基盤となる 「HDFS(保存)」 と 「MapReduce(計算)」 、そして私が扱った 「Hive(SQLインターフェース)」 について簡単にまとめます。

3. HDFSについて

HDFS(Hadoop Distributed File System)は、巨大なファイルを複数のサーバーに分散して保存する「分散ストレージ」です。

例えば容量が数TBという巨大なファイルを扱う場合、HDFSはそれを128MBなどの「ブロック」単位に分割します。そして分割したデータをDataNodeと呼ばれる複数のサーバーに保存します。

ファイルを分割しているのは、本を章ごとに小分けして配るのと同じで、後から皆で一斉に(並列に)読み取れるようにするためです。

また、各ブロックのコピーを作成し、別のDataNodeにも保存します。これにより1台のサーバーが故障してもバックアップがあるため、全体として作業が止まらない「耐障害性」を確保しています。

ファイルは分割されますが、管理役のサーバー(NameNode)のおかげで、ユーザーはブロックを意識せず1ファイルとして見ることができ、普通のファイル操作と同じ感覚でファイルを利用できます。

4. MapReduceについて

HDFSに保存された膨大なデータを「計算」する仕組みがMapReduceです。

ファイルからデータをMap(抽出)し、Reduce(集計)します。

開発者はこのMapとReduceの処理をJavaなどで実装します。実装にはHadoopが提供する「MapReduce API」を利用します。

このAPIに沿ってロジックを書くことで、分散処理に必要な以下のような複雑な制御は全てHadoopが自動で行ってくれます。

  • どのサーバーにプログラムを配るか
  • どのサーバーにどのデータブロックを読み込ませるか
  • 途中でサーバーが壊れたら、どのサーバーでやり直すか

また、MapReduceは全てのデータを 「キー(Key)」と「バリュー(Value)」のペア で扱います。

「大量のログからエラー件数を数える」という処理を考えると次のような流れとなります。

  1. Mapフェーズ
    開発者がAPIを使って「『Error』という文字を見つけたら、Keyを『Error』、Valueを『1』としたペア(Error: 1)を作れ」というプログラムを書きます。これがデータを持つ各サーバーで並列実行されます
  2. Shuffle(シャッフル)フェーズ
    ここはシステムが自動で行います。バラバラのサーバーで作られたペアの中から、同じKey(Error)を持つものを1箇所に集めます
  3. Reduceフェーズ
    開発者がAPIを使って「集まったバリュー(1, 1, 1...)を全部足せ」というプログラムを書きます。最終的に「Error合計 500件」といった結果が出力されます

5. Hiveについて

「集計したいだけでJavaで実装するのは大変だな…」という課題を解決してくれるのが「Apache Hive」です。HiveはSQL(HiveQL)を解釈し、裏側で自動的にMapReduceを生成・実行依頼してくれる翻訳機のような存在です。

例えば、HDFSに次のようなサーバーのログファイル(カンマ区切り)があるとします。そして、ここからエラーログの件数を集計したいとします。

2026-01-10,200,OK
2026-01-10,500,Internal Server Error
2026-01-11,200,OK

この場合、最初にファイルの構造をテーブルとして定義します。

CREATE TABLE access_logs (
    log_date    STRING,
    status_code INT,
    message     STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION 'HDFS上のログファイルが保存されているディレクトリのパス';

そしてSQLで集計します。

SELECT log_date, COUNT(*) 
FROM access_logs 
WHERE status_code >= 500 
GROUP BY log_date;

-- 結果
2026-01-10      1

HiveはこのようにMapReduceの処理を実装しなくても、RDBMSを扱うような感覚で利用できます。

RDBMSは最初に型を定義し保存時に型のチェックをしますが、Hiveはファイルを保存してSELECTする瞬間に初めて定義を当てはめて解釈します。

MySQLなどのRDBMSと比較すると次のようになります。

比較項目 RDBMS (MySQLなど) Hadoop (+ Hive)
スキーマ適用 Schema on Write (書き込み時) Schema on Read (読み込み時)
主な用途 リアルタイムな検索・更新 巨大なデータのバッチ分析
拡張性 スケールアップ(サーバー1台を強くする) スケールアウト(サーバーの台数を増やす)
更新処理 UPDATEDELETE が得意 基本は「追記」のみ
応答速度 ミリ秒〜秒(爆速) 数秒〜数時間(じっくり)

※上記のコードの実行は以下の環境にて行っています。
 mac OS 15.7.1, Hadoop 3.4.2, Hive 3.1.3

まとめ

Hadoopの「汎用的なサーバーを束ねて力技で解決する」という仕組みは、大量のデータを扱うにはとても合理的で、勉強になりました。Hadoopが、ログ解析・機械学習・データ変換・データレイクなどで利用されている理由が分かりました。

まだ触り始めたばかりなので、使いこなせるように日々精進したいと思います。

株式会社BTMではエンジニアの採用をしております。
ご興味がある方はぜひコチラをご覧ください

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?