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?

More than 3 years have passed since last update.

100日後にエンジニアになるキミ - 87日目 - データベース - Hadoopについて2

Posted at

昨日までのはこちら

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

unnamed.png

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の特徴

HiveHadoop上のMapReduceの処理をSQL互換言語で操作を実行できることです。
しかし実際のHive処理の中身はMapReduceの処理が動いています。

Select文を実行すると、裏でMapReduceの処理が走り
分散処理でデータ集計が行われて結果を得ることができます。

そのためMapとReduce処理を計画実行して行うため問い合わせ時間がかなりかかります。
1回の問い合わせで簡単なクエリであっても数分かかることはザラです。

大規模なデータであっても集計結果を得ることができますが
小規模の結果を何度も出すような用途にはあまり向いていません。

1日に数回だけ行われるような大規模バッチ処理の際にはよく用いられています。

Presto

download.png

こちらもFacebookが開発している分散型SQLクエリエンジンです。
Hiveは何度もクエリを発行するのには向いていません。
そのため、よりインタラクティブにクエリを発行できる仕組みが考え出されました。

Prestoの特徴

なんと言ってもPrestoHiveに比べて結果が帰ってくるのが圧倒的に早いです。
遅くても数分、早ければ数秒という時もあります。

Prestoはクエリ実行の際、ジョブをタスク分割し、タスクを並行して処理します。
中間データをメモリに持つことで高速になり、素早いレスポンスを得ることが可能となっていますが
メモリにデータが乗り切らない場合は失敗します。

そのためHiveとの使い分けが重要になってきます。。

Presto
長くても2~3分で終わる集計の場合
コンパクトな処理をすばやく実行したい場合
結果セットが少なく収まる場合

Hive
数分以上〜数時間掛かる巨大なクエリの場合
メモリに乗り切らないオーダーの処理の場合
JOIN数が多い、JOINの条件が文字列の場合
結果セットが数百万行、文字列型カラム多数の場合

このようになっており、うまく使い分けることで
ビッグデータ集計の高速化を図ることができます

データベースサービスの1つであるTresureDataは裏側ではHadoopが用いられており
データ投入後HivePrestoを使い分けてデータ集計が行えます。

Hbase

download-1.png

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

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?