トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

Hadoop

[Hadoop]

Hadoop

ETL, 機械学習の両面に使えそうなので興味を持った。

  概要

ETLとは?

  • Extract - 単⼀、あるいは複数のデータソースからのデータの抽出
  • Transform - ビジネスニーズに応じてデータを変換
  • Load - 最終ターゲットにデータをロード
    • データの前処理理
    • クレンジング
    • 正規化
    • 特にHadoopで「バッチ処理」と 呼ばれている処理の大多数
    • 日次集計バッチなど これらは全てETLです

ETL+Hadoopでアーキテクチャーはどう変わる?

  • EDH(エンタープライズデータハブ)を使う
    • Hadoopにおける具体的な実装はMapRというものらしい
  • DWH/ETL で対応できない部分を EDH が対応する
    • DWH(データウェアハウス)の本来の用途は高度な数値分析、そしてETL (抽出、加工、書き出し) 処理
    • EDHは複数のソースからあらゆるデータを収集し、それを瞬時に処理して企業全体で利用できるようにするセントラルプラットフォーム

Hadoopのアーキテクチャー

データ取り込み
Apache Sqoop, Apache Flume, Apache Kafka
  • ただし、それらのライブラリを使わなくてもHadoopから直接S3のデータを取り込めるようだ
  • 特に、Apache Kafkaなどはいわゆるキューイングシステムなので、他システム連携のためのソフトウェアだろう
ファイルシステム
HadoopはファイルをHDFSという形で持つ
HDFS由来のデータストア
HDFSが優秀だったためか、そこをベースにしたソフトウェアがいくつかある
  • HBase
    • HDFSを技術的土台にした、大量データに対応した分散ストレージシステム
    • MongoDBなどと同じようなNoSQL
  • Phoenix
    • Salesforceが開発したHBaseをSQLで操作できるライブラリ
データ変換(バッチ処理ミドルウェア)
MapReduce/ Spark
  • MapReduce
    • MapReduce/MapRとも呼ばれる、そもそもMapReduceはプログラミング言語におけるmap/reduce処理が元ネタ
    • GoogleがMapRに関するソフトウェアと論文を発表、それに対応してHadoopがJavaで実装された
    • Hadoop自体はファイルシステム(HDFS)やその他の概念を含む総合的なソフトウェア、MapRはその中のバッチ処理部分のアーキテクチャーを指すと思われる
  • Spark
    • MapReduceの置き換えのために作られたソフトウェア、インメモリで処理を行うため早い
データ変換(バッチ処理の効率化のための言語)
Hive / Pig / Crunch

つまり、ETL的な処理はこのHive / Pig / Crunch でやることがおわかりだろう、次はこれを比較していきたい。以降ではこれらの言語をHadoop用DSL(ドメイン固有言語)と呼ぶ。

その他周辺ソフト
  • Ganglia
    • クラスタ監視ソフトウェア
  • Hue
    • Hadoop用のGUIツール, GUIからHive, Pig, Impala, HDFS, MapReduce, Oozieなどの機能を使用することができる
  • ZooKeeper
    • クラスタ管理ソフトウェア
  • Mahout
    • Hadoop用の機械学習ツール、機械学習なのでリコメンド、パターン一致、未来予測的なことに使えそう
  • Tez
    • これまたMapReduceを置き換えるべくして作られたフレームワーク、hortonworksによればMRに比べて100倍早くなるとのこと
  • Hadoop 2.0リリースにおける、Tezの位置づけ

Hadoop用DSL(based on MapReduce)の比較

 Pig と Hive の起源
 
 Hadoop の最初期のバージョンは、データを扱うための方法としてはただひとつ、MapReduce のみをサポートしていました。
 このプラットフォームは大量のデータを格納、処理、および、分析する目的で、Yahoo! と Facebook で幅広く用いられました。
 両社とも同プラットフォームがたいへん価値のあるものであることを理解しましたが、しかし、両社ともシステムから有用な成果を得るために、
 MapReduce の下で動作する Java コードを書くのに多大な時間を要しました。
 
 両社は、より高速に動作することと、プログラマ以外がデータを直接扱えるようにすることを望みました。Yahoo! はその目的のために、
 Apache Pig という名称の独自の言語を作り出しました。Facebook は、おそらく人々に新たなスキルをトレーニングするよりも、
 既存のスキルを活用することを考え、Hive という名称の SQL システムを構築しました。

開発順に並べている

  • Apache Pig
    • Yahoo!開発
    • Hadoop Pig の使いどころ 2012年の記事
    • いくつかポイントはあるようだが、パイプライン処理のかきやすさを見る限りPigはよさそうに見える
  • Hadoop Crunch
    • Map reduce ほにゃらら、とあるようにいわゆる関数型プログラミング的なものを目指しているのであろう
    • コレクションの概念はちょっと高度なので80%のプログラマーが使えるかどうか微妙

Hadoop用DSL(not based on MapReduce)

  実践

Hadoopのユースケース

AWS EMR

クラスタを作るときの選択肢

  • Core Hadoop
    • Hadoop with Ganglia, Hive, Hue, Mahout, Pig, Tez
    • Core HadoopはHadoopのエンジン部分をTezに置き換えて処理をHadoop用DSLで行う構成のようだ
    • 管理はHueで行う
    • 生データをS3から取り込んで、出力先はRDBとかそういう構成
  • HBase
    • HBase with Ganglia, Hadoop, Hive, Hue, Phoenix, ZooKeeper
    • HBaseはデータを一度HBaseに取り込んで、処理をHadoop用DSL+Phoenixで行う構成のようだ
    • 管理はHue+ZooKeeprで行うっぽい
    • 生データをS3 or DynamoDBから取り込んで、出力先もNoSQLとかそういう構成かな?
  • Presto
    • Presto with Hadoop, Hive, Metastore
    • 検索クエリエンジンとしてPrestoを使う構成、管理ツールがない…?
    • デフォルトでPrestoに対応した管理ツールがないので、re:dashなどを使うしかない
  • Spark
    • Hadoop YARN with Ganglia, ZooKeeper
    • YARNはHadoopの世界でMapReduce以外の分散処理フレームワークも実行させるという意味
    • Sparkはやっぱり速かった、この構成の場合Zeppelinを入れるべきだと思われる(Hiveの場合のHueとほぼ同じ役割)
hadoopstack.png
お名前: コメント: