昨日までのはこちら
100日後にエンジニアになるキミ - 76日目 - プログラミング - 機械学習について
100日後にエンジニアになるキミ - 70日目 - プログラミング - スクレイピングについて
100日後にエンジニアになるキミ - 66日目 - プログラミング - 自然言語処理について
100日後にエンジニアになるキミ - 63日目 - プログラミング - 確率について1
100日後にエンジニアになるキミ - 59日目 - プログラミング - アルゴリズムについて
100日後にエンジニアになるキミ - 53日目 - Git - Gitについて
100日後にエンジニアになるキミ - 42日目 - クラウド - クラウドサービスについて
100日後にエンジニアになるキミ - 36日目 - データベース - データベースについて
100日後にエンジニアになるキミ - 24日目 - Python - Python言語の基礎1
100日後にエンジニアになるキミ - 18日目 - Javascript - JavaScriptの基礎1
100日後にエンジニアになるキミ - 14日目 - CSS - CSSの基礎1
100日後にエンジニアになるキミ - 6日目 - HTML - HTMLの基礎1
今回はHadoopの話の続きです。
Hadoopのおさらい
Hadoop
はテキスト,画像,ログなどのデータを
高速に処理するオープンソースの分散処理プラットフォーム
です。
Hadoop
は複数のマシンで行う分散処理が特徴で
はデータも複数台のマシンに分散させる事で
容易にスケールアウト出来るようになっています。
大規模なデータを複数台のマシンで一斉に処理することで
高速化も実現しています。
雑にいうと、複数台で1つの大きなデータを格納するための
箱を用意した、というようなイメージです。
データを貯めたあとは、そこからうまく取り出さないと
活用することはできません。
Hadoop上で動くソフトウェア
Hadoop
は大規模データの分散処理を支えるソフトウェアフレームワークですが
データの取り出しには専用のプログラムを書かないと行けません。
そのためHadoop
上で動作するデータの取り出しを簡素にするためのソフトウェアが存在します。
下記のようなものがあります。
Hive
Presto
Hbase
これらを用いるとデータの取り出しが容易になります。
Hive
Hive
はMapReduce処理を可能にする分散型SQLクエリエンジンです。
2012年頃はHadoop
といえばhive
でした。
Hive
はSQLのような構文のHiveQL
を用いてデータの取得が行える
ビッグデータ処理をより簡単に利用する為のHadoop上で動作するソフトウェアです。
Hadoopそのものはフレームワークにすぎないので
実際にデータを操作する場合はHadoop上のデータ操作を行う
プログラム(アプリケーション)を開発しなければなりませんでした。
データベースマネージメントシステム(DBMS)のようにデータを
取り扱うことができないかという発想の元Facebookによって開発されました。
現在ではApacheプロジェクトの一部として活動が行われています。
HiveQLは一部を除いてほぼSQLのような構文です。
SELECT
count(*)
FROM (
SELECT
DISTINCT user_id
FROM
data
) d
Hiveの特徴
Hive
はHadoop
上のMapReduceの処理をSQL互換言語で操作を実行できることです。
しかし実際のHive処理の中身はMapReduce
の処理が動いています。
Select文
を実行すると、裏でMapReduce
の処理が走り
分散処理でデータ集計が行われて結果を得ることができます。
そのためMapとReduce処理を計画実行して行うため問い合わせ時間がかなりかかります。
1回の問い合わせで簡単なクエリであっても数分かかることはザラです。
大規模なデータであっても集計結果を得ることができますが
小規模の結果を何度も出すような用途にはあまり向いていません。
1日に数回だけ行われるような大規模バッチ処理の際にはよく用いられています。
Presto
こちらもFacebookが開発している分散型SQLクエリエンジンです。
Hive
は何度もクエリを発行するのには向いていません。
そのため、よりインタラクティブにクエリを発行できる仕組みが考え出されました。
Prestoの特徴
なんと言ってもPresto
はHive
に比べて結果が帰ってくるのが圧倒的に早いです。
遅くても数分、早ければ数秒という時もあります。
Presto
はクエリ実行の際、ジョブをタスク分割し、タスクを並行して処理します。
中間データをメモリに持つことで高速になり、素早いレスポンスを得ることが可能となっていますが
メモリにデータが乗り切らない場合は失敗します。
そのためHive
との使い分けが重要になってきます。。
Presto
長くても2~3分で終わる集計の場合
コンパクトな処理をすばやく実行したい場合
結果セットが少なく収まる場合
Hive
数分以上〜数時間掛かる巨大なクエリの場合
メモリに乗り切らないオーダーの処理の場合
JOIN数が多い、JOINの条件が文字列の場合
結果セットが数百万行、文字列型カラム多数の場合
このようになっており、うまく使い分けることで
ビッグデータ集計の高速化を図ることができます
データベースサービスの1つであるTresureData
は裏側ではHadoopが用いられており
データ投入後Hive
とPresto
を使い分けてデータ集計が行えます。
Hbase
HbaseはHadoop上で動く列指向の分散型データベースです。
かなり昔ですがFacebookが導入しているという記事がありました。
FacebookがHBaseを大規模リアルタイム処理に利用している理由
行指向データベースは行単位でデータを保持、取り出しを行います。
列指向データベースは列単位でデータを取得,取り出しを行います。
Hbaseの特徴
Hbase
はいわゆるNoSQL
というものの一つになります。
SQLを用いるRDBMSは高頻度のクエリ発行の用途にはあまり向いていませんが
Hbase
は高頻度に発生する大量のデータをリアルタイムに格納/参照することが
可能になっています。
自分が利用していた際は秒間数千件のR/Wを実現していました。
例えばユーザーがログインする際にSQL文を発行して3分待ち・・・ようやくログイン
そんなサービスはいやですよね。
高頻度、大量のデータをいかにさばくかという観点になると一般的なRDBでは
難しいところがあります。
必要とされる用途によってデータベースを選定することが必要になってきます。
まとめ
Hadoop上で稼働するソフトウェアはまだまだたくさんあります。
近年では現役で活躍しているソフトもまだ残っているので
ビッグデータを取り扱うことを検討している場合は
Hadoopと合わせて知識を蓄えておくと良いかもしれません。
君がエンジニアになるまであと13日
作者の情報
乙pyのHP:
http://www.otupy.net/
Youtube:
https://www.youtube.com/channel/UCaT7xpeq8n1G_HcJKKSOXMw
Twitter:
https://twitter.com/otupython