「[[.NET 開発基盤部会 Wiki>http://dotnetdevelopmentinfrastructure.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。
-[[戻る>ビッグデータ]]
*目次 [#oc1d257e]
#contents
*概要 [#u1bd4882]
**コンピューティング(計算) [#vef87ecc]
分散処理とは、
-複雑な計算などをネットワークを介して複数のコンピュータを利用して行うことで、
-スループットを上げようとする取り組み、またはそれを実現する為の仕組み。
**ソリューション(解決) [#b132e7ee]
また、分散処理は、
-RDBでは大き過ぎるか、複雑すぎるデータを処理するように設計されている。
-以下ケースに分散処理の分散処理(アーキテクチャ)が適合する。
--大量のデータを格納して処理する
--非構造化データを変換する
--ストリーミング データを処理する
*詳細 [#w06ca93f]
-基本的には1990年代までの並列データベースの技術に基づいた並列データ処理系
-ハードウェアの高性能化や新たな需要を踏まえ,その中核をなす技術は少しずつ進展を遂げつつある。
-以下のコンテンツをサマリすると、
--RDBの並列処理の様なモノ(基礎は同じ)を、
--異なる目的(セグメント&ターゲット)で実装している感じ。
**基礎 [#q4fb50c2]
ざっくり、
-分散処理の起点は、[[並列化>#j0673aa7]]。
-[[並列化>#j0673aa7]]処理は
--手続型言語ではなく宣言型言語で記述される。
--宣言型言語では実行プランという形で最適化された処理が計算される。
みたいな話。
***アーキテクチャ [#gc694646]
無共有型のアーキテクチャが主流である。
-型
--共有メモリ型(シェアード・メモリ)
--共有ディスク型(シェアード・ディスク)
--無共有型(シェアード・ナッシング)
-理由
--単一ハードウェアコンポーネントにおけるレイテンシ低減の停滞のため、~
複数のハードウェアコンポーネントを効率的に活用する方向にシフトしている。
--複数のコモディティサーバを高速なネットワークで接続した無共有型のクラスタシステムが~
昨今のビッグデータ解析においては,価格性能比の点から,後者が広く利用されつつある。
***並列処理 [#j0673aa7]
-問い合わせ間の並列性(Inter-query Parallelism)~
複数の異なる問い合わせを並列に実行するときの並列性
-&color(red){問い合わせ内の並列性(Intra-query Parallelism)};~
1つの問い合わせを並列に実行可能な複数の~
サブタスクに分解して実行するときの並列性
--オペレータ間の並列性(Inter-operator Parallelism)~
問い合わせにおける複数の異なるオペレータを並列に実行するときの並列性
---&color(red){パイプライン並列性(Pipelined Parallelism)};~
あるオペレータが出力するデータを~
別のあるオペレータが入力する場合において,~
これらのオペレータを並列に実行するときの並列性
---独立並列性(Independent Parallelism)~
データの依存関係がない複数の独立したオペレータを並列に実行するときの並列性
--オペレータ内の並列性(Intra-operator Parallelism)~
1つのオペレータを並列実行可能な複数のサブタスクに分解して実行するときの並列性
---&color(red){パーティション並列性(Partitioned Parallelism)};~
データを複数にパーティショニングし,~
オペレータの複数のインスタンスが当該パーティションを~
並列に読み出すことにより,オペレータ内の並列性を活用する。~
※ [[SQL Serverの並列クエリはファイル・グループによるパーティション並列性になる。>https://techinfoofmicrosofttech.osscons.jp/index.php?cmd=read&page=SQL%20Server%20%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%83%BB%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97&word=%E4%B8%A6%E5%88%97#z5226928]]
***データ分割 [#ye7e9cb6]
パーティション並列性のデータの分割方法には、主に次の3つの方法がある。
-ラウンドロビン分割(Round-Robin Partitioning)~
均等に分散される。
-ハッシュ分割(Hash Partitioning)~
均等に分散される。
-範囲分割(Range Partitioning)~
不均等だが、データが値でクラスタ化されており、~
処理系が処理の効率化を図ることができる場合がある。
***性能指標 [#xc519c0c]
並列処理の性能指標
-スケーラビリティ(Scalability)~
以下の指標があるが、ビッグデータ系では、~
スケールアップ(Scale-up)がより重要になる。
--スピードアップ(Speed-up)~
ジョブを処理する計算資源をN倍に増やしたときに,~
ジョブの処理時間がどの程度低下するか?
--スケールアップ(Scale-up)~
ジョブを処理する計算資源をN倍に増やしたときに,~
ジョブの仕事量(データ量)もN倍に増やしたときに,~
ジョブの処理するための時間が同程度か?
-線形なスケーラビリティ~
理想的には線形なスケーラビリティを有することが望ましい。~
--スピードアップ(Speed-up)では、~
計算資源N倍で1/N時間になる場合。~
--スケールアップ(Scale-up)では、(同じ処理時間で)~
計算資源N倍で仕事量(データ量)もN倍になる場合。
***アルゴリズム [#f1f6bb35]
並列処理のオペレータとアルゴリズム
-選択オペレータ
--スキャン(・アルゴリズム~
--索引スキャン(・アルゴリズム~
-結合オペレータ~
--ソートマージ結合(アルゴリズム~
---並列化が可能(並列ソートマージ結合)
---双方のソート済み結合キーで再パーティションして、結合。
---ソートマージ結合はハッシュ結合よりも低速
--ハッシュ結合(アルゴリズム~
---並列化が可能(並列ハッシュ結合)
---片方の結合キーをハッシュに読み込み(再パーティションして)、結合。
---ハッシュ結合はソートマージ結合よりも高速
--ネステッド・ループ結合(アルゴリズム
***実行プランの選択 [#rd0ce58b]
実行プランの列挙・見積・選択は、~
「(問い合わせ)最適化」と呼ばれる。
-実行プランの列挙
-処理のコスト見積
--どのようなアルゴリズムを用いるか?
---選択(Selection)のアルゴリズム
---結合(Join)のアルゴリズム
---集約(Aggregation)のアルゴリズム
--結合方法、結合順序をどうするか?
--並列データ処理の戦略をどうするか?
--統計情報を用いた性能比較。
-最適な実行プランの選択
***永続性と一貫性 [#ie9bbdb3]
レプリケーションとロギングがある(RDBMSにもある)。
-ロギング
--論理ロギング(Logical Logging)
---データを生成するオペレーション(命令)のみを二時記憶に保持
---RDBMSのトランザクション・ログ的なもの。
--物理ロギング(Physical Logging)
---データイメージを(別の形式で)二時記憶に保持
---リラン可能バッチの中間状態のような状態と言える。
-レプリケーション
--RDBでは共有ディスクを使用しないクラスタで利用される。
--トレードオフ関係があるが、可用性の向上が耐障害性に繋がる。
--次の2軸で整理できる。
---Eager or Lazy~
データの追加や更新がいつレプリカに伝播するか?~
・Eager:当該処理の確定後に伝播するか?~
・Lazy:当該処理の確定前にも伝播してしまうか?
---Centralized or Distributed~
データの追加や更新がどこを起点に発生するか?~
・Centralized:中央のサーバ(マスタ)で行われる。~
・Distributed:いずれのサーバかで行われる(ADのマルチマスタ的な)。
--従って以下の4方式がある。
---Eager * Centralized~
・[Eager] or Lazy~
・Strong Consistencyの一貫性が得られる。~
・追加や更新にかかる時間(レイテンシ)が長くなる。~
・[Centralized] or Distributed~
・メタデータの管理が簡潔になる。~
・システム全体のスループットや耐障害性が低くなる。
---Lazy * Centralized~
・Eager or [Lazy]~
・Eventual Consistencyの一貫性~
・追加や更新にかかる時間(レイテンシ)が短くなる。~
・[Centralized] or Distributed~
・メタデータの管理が簡潔になる。~
・システム全体のスループットや耐障害性が低くなる。
---Eager * Distributed~
・[Eager] or Lazy~
・Strong Consistencyの一貫性が得られる。~
・追加や更新にかかる時間(レイテンシ)が長くなる。~
・Centralized or [Distributed]~
・メタデータの管理が複雑になる。~
・システム全体のスループットや耐障害性が高くなる。
---Lazy * Distributed~
・Eager or [Lazy]~
・Eventual Consistencyの一貫性~
・追加や更新にかかる時間(レイテンシ)が短くなる。~
・Centralized or [Distributed]~
・メタデータの管理が複雑になる。~
・システム全体のスループットや耐障害性が高くなる。
-前提知識
--一貫性(Consistency)の種類。
---Mutual Consistency~
分散システムのCAP定理におけるCに相当するレプリカ間の値の一貫性
---Transaction Consistency~
データベースにおけるACIDのIに相当するもの(分離レベル)
---Database Consistency~
データベースにおけるACIDのCに相当するもの(整合性)
--さまざまなレプリカ間の一貫性
---Strict Consistency
---Strong Consistency(Linearlizability)~
当該データの書き込み後の当該データの読み出では、~
書き込まれた当該データの値が必ず得られる。~
Eagerは、Strong Consistencyを保証する。
---Sequential Consistency
---Causal Consistency
---Eventual Consistency~
当該データの書き込み後の当該データの読み出では、~
書き込まれた当該データの値が「いつかは」必ず得られる。~
Lazyは、Strong Consistencyを保証する。
***コーディネーション [#p0aafb89]
複数のプロセス間において,協調して動作をする,または,同意を取るための技術
-分類
--分散排他制御(Distributed Mutual Exclusion)~
分散環境で
---排他制御を行う(ロックを取る)。
---クリティカルセクションに入るプロセスを選択する。
--リーダ選挙(Election / Leader Election)
---ある特定の作業を行うためのリーダプロセスを選択する。
---分散排他制御は,ロックを取るリーダプロセスの選挙の特殊系とも見れる。
--グループ通信(Group Communication / Multicast)
---あるプロセスがほかの全プロセスにメッセージを送信すること。
---いわゆる,マルチキャスト。
--コンセンサス(Consensus)
---あるプロセスが提案者となり,他のプロセスが同意をして,全体で決定する。
---グループ通信とコンセンサスはほぼ同等のもの。
-アルゴリズム
--2相コミット(Two-Phase Commit)
---複数のプロセスをまたいだ分散トランザクションにおいて~
原子性(Atomicity)を実現するための方法として広く用いられる。
---2つのフェーズから構成される。~
・フェーズ1:コーディネータがリソース・マネジャに対してPrepareメッセージを送る。~
・フェーズ2:コーディネータがすべてのリソース・マネジャから応答を受け取ると,~
全リソース・マネジャに当該分散トランザクションのCommit or Abortメッセージを送る。
--ZAB
---Zookeeperにおいて用いられているコンセンサスアルゴリズム
---Proposerが常に1つのみ存在し、提案のFIFO / Causal / Total orderingを保証。
---ProposerはFollowerに対して、2PCと類似の方法で任意の値を提案(送信)。
---定足数が同意があればProposerは当該提案をコミットする。
--PAXOS
---ZABと類似の現在,最も広く使われているものの1つ。
---Proposerは複数の場合であっても動作する。~
・汎用性が高い~
・ZABと比較する複雑な仕組~
・提案のFIFO / Causal orderingを保証しない。
-前提知識
--コーディネーションの前提
---任意のプロセスがクラッシュし得る。~
・ビザンチン故障(プロセスの動作において仮定をおかない故障)は想定しない。~
・≒任意の動作を実行しない(要求に対して不正または一貫しない応答を返すさない)。
---メッセージの送信にかかる時間は有限だが上限がない。~
すなわち,分散システムモデルにおける非同期システムを想定する。
---複数のプロセス間においては、~
固定的なマスタ / スレーブの関係は存在しない。
--分散システムにおける順序
---FIFO ordering~
・メッセージ送信順序でメッセージを受信する。~
・プロセス毎の因果関係のみを保証する性質。
---Causal ordering~
・因果関係が保たれる順序でメッセージを受信する。~
・FIFO ordering前提+αのプロセス間の因果関係も保証する性質
---Total ordering~
すべてのプロセスにおいてメッセージの到達順序が同一であることを保証する性質。
***分散処理 [#df139e29]
本項での処理系は
>「分散システム技術を活用した、~
データ処理専用の並列システム」
と言うことができる。
-永続性と一貫性
--HDFS~
レプリケーション方式
---Centralizedのアプローチを採用。
---ファイルエントリはEager。
---データはLazy(追加はあるが更新はない)。
--RDD~
レプリケーション方式
---...
--[[Hadoop]]~
ロギング方式
---外部ソートの結果を用いて物理ロギングと見ることができる。
---MapReduce処理の間の整列フェーズにおける結果データを二次記憶に書き、~
Reduceフェーズが何らかの理由で失敗した場合は,再度Reduce処理をやり直せる。
--[[Spark>Apache Spark]]~
ロギング方式
---RDDと称されるデータの塊を生成する論理ロギングと見ることができる。
---データが失われた場合、前のデータに対して当該オペレーションを適用してデータを復旧する。
-並列性
--HDFS~
ラウンドロビン分割(HDFS)のパーティション並列性を活用
--RDD~
...。
--[[Hadoop]]
---Map処理においては,並列スキャンを行う。
---一種の並列ソートマージ結合処理フレームワーク的。~
・通常はReduce側で並列ソートマージ結合を行う。~
・Map側で並列ハッシュ結合を行うことも可能。~
--Cloudera Impala / Presto
---Map処理においては,並列スキャンを行う。
---結合にハッシュ結合を使用しパイプライン並列性を活用
--[[Spark>Apache Spark]]~
[[Hadoop]]に類したデータ処理系
---map(),filter()においては,並列スキャンを行う。
---結合にハッシュ結合を使用しパイプライン並列性を活用
**ストア [#r77f778c]
データ・ストア、ディスクか?メモリか?
***ディスク [#g08a6d25]
-[[Hadoop]] の [[Hadoop Distributed File System (HDFS)>Hadoop#l2a0cd99]]
-[[HDFS>Hadoop#l2a0cd99]]ベース
--[[Apache HBase]]
--, etc.
***メモリ [#v4fec751]
-[[Apache Spark]] の [[Resilient Distributed Dataset (RDD)>Apache Spark#f411c5af]]
-[[RDD>Apache Spark#f411c5af]]ベース
--...
***その他 [#e2bd9443]
-[[ストレージ]]
-[[NoSQL]]~
[[Apache Spark]]と[[Cassandra]]なんて組み合わせもある模様。
**処理 [#q6bc0cf1]
どのような処理を実行できるか?
***[[分散(バッチ)系>分散処理:分散(バッチ)系#i6d81dee]] [#o97a1890]
***[[ストリーム系>分散処理:ストリーム系#u7b64dd2]] [#m55c61c3]
***[[データ収集・格納系>分散処理:データ収集・格納系#f13eaa3f]] [#o313ef62]
**目的 [#d5e53305]
ビジネス上の目的の例。
***意味付け [#r5007b57]
前もって意味付けせずに生のまま蓄積できる。
-データ分析時にいろいろな意味付けを試してみる探索的なデータマイニングできる。
-最新の統計理論をベースにゼロからプログラミングできる自由度をもっている。
データアナリストというよりデータサイエンティストに向いたアーキテクチャ
***可視化 [#b92c7f0a]
-可視化が目的の場合、以下のような流れで処理を行う。
>
+[[ストリーム>#m55c61c3]]
++データ収集
++エンリッチメント
+[[分散(バッチ)>#o97a1890]]
++蓄積
++可視化
-以下のようなプロダクトがある。
--[[Elasticsearch>#a87e408a]] ( + Kibana)
--[[BIツール>ビジネス インテリジェンス(BI)#j255e469]]
※ [[ディスク>#g08a6d25]]のデータを[[DWH>ビジネス インテリジェンス(BI)#f38a28c0]]にロードし、従来タイプの[[BIツール>ビジネス インテリジェンス(BI)#j255e469]]群を使うこともできる。
***[[データ解析]] [#g5da28df]
***[[機械学習>機械学習(machine learning)]] [#jaf2c402]
*リンク [#c29bf3e1]
**目的別 [#w454319b]
***[[分散(バッチ)系>分散処理:分散(バッチ)系#jb20d368]] [#jb20d368]
***[[ストリーム系>分散処理:ストリーム系#ef4cce53]] [#ta706e0b]
***[[データ収集・格納>分散処理:データ収集・格納系#p2196c83]] [#g7c95d09]
**プロダクト [#yc726057]
***[[分散(バッチ)系>分散処理:分散(バッチ)系#nb6b6319]] [#ked24982]
***[[ストリーム系>分散処理:ストリーム系#y82f9daa]] [#wbaa1483]
***[[データ収集・格納>分散処理:データ収集・格納系#d0265fa7]] [#nd71f463]
***[[Elastic Stack>Elasticsearch#r521f91b]] [#a87e408a]
[[Elasticsearch]]の推奨構成
-[[ビッグデータ]]の可視化のプロダクト群
-データはドキュメントで、全文検索処理を行う。
-ストレージに[[Hadoop]]を使えるので分散処理系に分類
**[[データ・パイプライン]] [#d336dcf5]
[[データ収集・格納系>分散処理:データ収集・格納系]]~
→ [[ストリーム系>分散処理:ストリーム系]]~
→ [[分散(バッチ)系>分散処理:分散(バッチ)系]]
みたいな組み合わせ。
*参考 [#d32f224d]
-[[分散コンピューティング - Wikipedia>https://ja.wikipedia.org/wiki/%E5%88%86%E6%95%A3%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0]]
-分散処理に入門してみた(Hadoop + Spark) | キャスレーコンサルティング株式会社~
https://www.casleyconsulting.co.jp/blog/engineer/150/
**@IT [#t952a25a]
-Database Watch(2016年3月版) Sparkは“誰”に例えられる?~
多様化と進化を続ける「Hadoop」、人気急上昇「Spark」~
https://www.atmarkit.co.jp/ait/articles/1603/07/news002.html
-Amazon EMRで構築するApache Spark超入門
--(1)Apache Sparkとは何か――使い方や基礎知識を徹底解説~
https://www.atmarkit.co.jp/ait/articles/1608/24/news014.html
--(2)Spark 2.0の回帰分析アプリをScalaのSBTで実装し、EMRで実行~
https://www.atmarkit.co.jp/ait/articles/1609/27/news018.html
**Think IT [#sa9f6bfa]
-伊藤 雅博~
https://thinkit.co.jp/author/10002
**NTTデータ [#r1f81a19]
***システム技術本部 [#s73a50e9]
-Hadoopエコシステムの最新動向とNTTデータの取り組み (OSC 2016 Tokyo/Spring 講演資料)~
https://www.slideshare.net/hadoopxnttdata/hadoop-osc2015spring-nttdata
-並列分散処理基盤のいま 45分で学ぶHadoop/Spark/Kafka/ストレージレイヤSW入門(Open Source Confere…~
https://www2.slideshare.net/nttdata-tech/distributed-data-processing-system-hadoop-spark-kafka-storage-layer-software-osc2020-online-kyoto-20200828
--動画 : https://www.youtube.com/watch?v=9NtYlRF5j6A
--動画2 : https://www.youtube.com/watch?v=9NtYlRF5j6A(同じコンテンツ?
--動画2 : https://www.youtube.com/watch?v=-HGGmMOkEuc(同じコンテンツ?
***先端技術株式会社 [#wc71adf3]
-ビッグデータコラム Column on Big Data Analytics and Platform~
http://www.intellilink.co.jp/article/column/bigdata/index.html
--ビッグデータ分析の意義と、分析のためのシステム基盤~
http://www.intellilink.co.jp/plan/corporate/column1.html
--ビッグデータ活用から価値を生む仕組みについて~
http://www.intellilink.co.jp/article/column/bigdata-ok01.html
**[[Hadoopの歴史>Hadoop#reddea41]] [#ida03893]
**gihyo.jp … 技術評論社 [#r8aff958]
Hadoopはどのように動くのか
-並列・分散システム技術から読み解くHadoop処理系の設計と実装:連載~
https://gihyo.jp/admin/serial/01/how_hadoop_works
--第1回 なぜ,Hadoopはどのように動くのか,を学ぶのか~
https://gihyo.jp/admin/serial/01/how_hadoop_works/0001
--第2回 並列データ処理系の歴史と重要性~
https://gihyo.jp/admin/serial/01/how_hadoop_works/0002
--第3回 並列システムと分散システム~
https://gihyo.jp/admin/serial/01/how_hadoop_works/0003
--第4回 データ処理の方法~
https://gihyo.jp/admin/serial/01/how_hadoop_works/0004
--第5回 データ処理の並列化
---https://gihyo.jp/admin/serial/01/how_hadoop_works/0005
---https://gihyo.jp/admin/serial/01/how_hadoop_works/0005?page=2
--データ処理における並列アルゴリズム
---第6回[1]~
https://gihyo.jp/admin/serial/01/how_hadoop_works/0006
---第7回[2]~
https://gihyo.jp/admin/serial/01/how_hadoop_works/0007
---第8回[3]~
https://gihyo.jp/admin/serial/01/how_hadoop_works/0008
--第9回 データ処理における性能の見積り~
https://gihyo.jp/admin/serial/01/how_hadoop_works/0009
--第10回 データ処理の最適化~
https://gihyo.jp/admin/serial/01/how_hadoop_works/0010
--第11回 耐障害性のための仕組み─レプリケーションとロギング~
https://gihyo.jp/admin/serial/01/how_hadoop_works/0011
--第12回 複数のプロセスにおける協調動作のための仕組み─コーディネーション~
https://gihyo.jp/admin/serial/01/how_hadoop_works/0012
--第13 - 15回
---[[Hadoop MapReduce>Hadoop#gd508729]]
---[[Hadoop YARN>Hadoop#h693517e]]
--第16回~
[[並列データ処理系 Apache Tez>Apache Tez#e2369c9c]]
--第17 - 19回~
[[Impalaの設計と実装>Apache Impala#ib9c9b50]]
--第20 - 21回~
[[Sparkの設計と実装>Apache Spark#r1d8a217]]
--第22回[最終回]まとめと本連載で解説できなかったこと~
https://gihyo.jp/admin/serial/01/how_hadoop_works/0022