第1章 ビッグデータ計算機システムの概要
1.1 ビッグデータコンピューティングフレームワークの概要
ハドゥープ
Hadoop の実行プロセス (5 つのステップ?)
分割 => マップ => シャッフル => リデュース => 出力
Hadoopの詳しい動作プロセスは?(4大工程、6+6+6+2)
- 新しいジョブ インスタンスを作成し、HDFS リソースをスケジュールする
- MapTask でマップ関数を実行できるようにする
- ReduceTaskを起動してreduce関数を実行します。
- JobClient はタスクが完了したことをポーリングします。
ジョブとタスクの違いは何ですか?
ジョブ: MapReduce プログラムによって指定された完全な計算プロセス
タスク: MapReduce フレームワークにおける並列コンピューティングの基本トランザクション単位
ジョブ (Job) は、実行中に複数の Map and Reduce タスク (Task) に分割できます。
MapReduce スケジューラ (3 つ? デフォルトは何ですか? ジョブの実行順序は?)
FIFO、公平、容量
Map の後の 2 つのソート (それぞれどのようなソート アルゴリズムが使用されますか? オブジェクトはファイルですか、それとも複数のファイルですか?)
ファイル内のクイックソート(Sort)
複数のファイルを結合して並べ替える(結合)
MapReduceタスクの処理プロセス(6ステップ?)
処理するビッグデータ => 分割 => マスターノードに送信 => マップノードに送信、データの並べ替え作業 (結合) => リデュースノードに送信
障害ノードの処理 (マスターノードに障害が発生した場合はどうなりますか? 稼働ノードの障害はどうなりますか?)
マスター ノードの障害: タスクが失敗すると、最新の有効なチェックポイントから再実行できるため、最初から計算する時間の無駄が回避されます。
作業ノードの障害: 作業ノードが応答を取得していないことをマスター ノードが検出した場合、作業ノードは無効であるとみなされます。マスター ノードは、失敗したタスクを他のワーカー ノードに再スケジュールして実行します。
MapReduce 1.0 の欠点 (主にどの 2 つの側面とどの 3 つの方向でしょうか?)
JobTracker は Map-reduce の集中処理ポイントであり、単一障害点が存在します。
JobTracker が完了したタスクが多すぎて、過剰なリソース消費が発生しました
YARN (どのような概念が導入されていますか? 3 つの主要な部分とその機能は何ですか?)
ApplicationMaster: 責任者、リソースの申請、タスクの割り当て
ResourceManager: 小さな責任者、責任者と部下の監視、リソースの割り当てとスケジューリング
NodeManager: 部下、リソース管理、コマンドの受け入れ
1.2 ビッグデータバッチコンピューティングフレームワーク
スパーク
RDD の概念 (フルネーム? パーティション可能? メイン メモリにあるのかメモリにあるのか?)
復元力のある分散データセット
RDD の異なるパーティションをクラスター内の異なるノードで並行して計算できます。
メモリを入れる
RDD 操作 (3 つのタイプとは何ですか? 目的は何ですか?)
行動、変化、持続
RDDの実行プロセス(どうやって作成するのか?どのように異なるRDDを生成するのか?どのように外部データソースに出力するのか?メリットは何なのか?)
外部データソースを読み取る
変換
アクション
RDD の効率が高い理由 (フォールト トレラントにする方法は? ディスク上かメモリ上か? データを保存できるものは何ですか?)
データのレプリケーションとロギング
中間データはメモリに永続化され、中間データはメモリ内の RDD 操作で渡されます。
ストレージ オブジェクトは Java オブジェクトです
基本的な考え方
- DAG:何の略語ですか?
- 実行者: プロセスはどこで実行されていますか? 何を実行する責任がありますか?
- アプリケーション、ジョブ、フェーズ、タスクの関係? それらは何に使われますか?
有向非巡回グラフ
ワーカー ノード (WorkerNode) 上で実行され、タスクの実行を担当するプロセス
アプリケーション > ジョブ > ステージ > タスク
アーキテクチャ設計 (3 つの層とは何ですか? 英語と中国語の名前は何ですか? 3 番目の層には何がありますか? 2 つのノードとは何ですか? どのようなストレージ構造に基づいていますか?)
ドライバープログラム(SparkContext)
クラスターマネージャー
ワーカーノード(実行者(タスク))
HDFS、HBase
Spark がコードを実行するための 7 つのステップ?
① ドライバーが解析してタスクを生成
② ドライバーはクラスターマネージャーからリソースを申請します
③ Cluster Managerはリソースとノードを割り当て、Executorを作成します
④ 執行者がドライバーに登録
⑤ドライバーはコードとファイルをExecutorに渡します。
⑥ 実行者がタスクを実行する
シャッフル操作(広い依存関係と狭い依存関係はどうなっているのか?)
幅広い依存関係: 1 対多および多対多
狭い依存関係: 多対 1 または 1 対 1
フェーズ分割 (分割の基礎?最適化に役立つ依存関係の種類は?)
逆流分割、狭い依存関係に遭遇した場合はマージ、広い依存関係に遭遇した場合は切断
RDD実行プロセス(4段階?何をしたの?)
①RDDオブジェクトを作成する
② DAG、つまりRDD間の依存関係を作成し、それを複数のタスクを持つ複数のステージに分解する
③タスクはTaskSchedulerによってWorkerNode上のExecutorに割り当てられ実行される
④ ワーカーがタスクを実行する
RDDフォールトトレランス機構(再構築のための情報の保持)
RDD は、失われたパーティションの作成に使用できる情報を保持します。
Spark のストレージ メカニズム (RDD キャッシュはどこに存在しますか? パーティションに対応するデータ ブロックをディスクから取得するにはどうすればよいですか? Shuffle データはどこに存在しますか?)
RDD キャッシュ: メモリおよびディスクベースのキャッシュを含む
メモリキャッシュ = ハッシュテーブル + アクセス戦略
シャッフル データの永続性: ディスク上にキャッシュする必要があります
第2章 ビッグデータ管理システム
ビッグデータ管理システム 1
コンセプト
データベース定義?
データベースは、コンピュータに長期間保存される、組織化された共有可能なデータのコレクションです。
DBMS (正式名?主な機能?DDLとは?DMLとは?)
データベースマネージメントシステム
データ定義言語。データベース内のデータ オブジェクトを定義します。
データを操作してデータベース上の基本的な操作を実現するデータ操作言語。
DBS (何が含まれますか?)
データベース、データベース管理システム、アプリケーション システム、データベース管理者、ユーザー
データベースのストレージ構造
-
RAID(それは何ですか?何でできていますか?)
ディスクの冗長アレイ
複数の同一ディスクの配列
-
ファイル内のレコードの構成 (5 つのレコードはどのように構成されていますか? どのように記録されていますか?)
ヒープファイルの構成: 必要なものを何でも配置します
シーケンシャルファイル構成: 昇順または降順、ポインタチェーン構造
ハッシュファイル構成: ハッシュ関数を通じて特定の属性値によって取得された値が格納アドレスとして使用されます。
クラスター化されたファイル構成: 関連するレコードは同じブロックに保存されます。
インデックス技術
- インデックスとは何ですか? ファイルですか?
- インデックスの分類(2つのカテゴリ?主なインデックスとは?クラスタリングインデックスと非クラスタリングインデックスの違い?クラスタリングインデックスの3種類のインデックスとは?)
- インデックスの更新 (密なインデックスと疎なインデックスの削除と挿入はそれぞれどのような操作ですか?)
メインファイルとは別に記録される、インデックス付き属性のみを含む小さなファイル
2 つのカテゴリ: 順序付きインデックスとハッシュ インデックス
クラスター化 (非クラスター化) インデックス: 違いは、メイン ファイルの順序と一致しているかどうかです。
密なインデックス、疎なインデックス、マルチレベルのインデックス
削除:
密なインデックスの場合は、対応するインデックス項目を削除します。
疎なインデックスの場合は、削除されたレコードのインデックス値がインデックス ブロックにある場合は、メインの削除されたレコードの次のレコードの検索キー A に置き換えます。ファイル。A がインデックス ブロックにすでに存在する場合は、削除されたレコードの対応するインデックス キーを削除します。挿入:
密なインデックスの場合、検索キーがインデックス ブロックに表示されない場合は、インデックスに挿入します。
スパース インデックスの場合: データ ブロックが新しいデータ用に空いている場合は、インデックスを変更する必要はありません。そうでない場合は、新しいデータ ブロックを追加し、新しいインデックス アイテムをインデックス ブロックに挿入します。
事務
- 定義、それは何で構成されていますか?
- トランザクションの ACID の性質?
DBMS 内の論理的な作業単位。通常は一連のデータベース操作で構成されます。
原子の
整合性、
絶縁性、
耐久性
I/Oパラレル
-
分割技術 定義(ディスク数 = n) アドバンテージ 欠点がある サイクル分割 ハッシュ分割 範囲区分
分割技術 定義(ディスク数 = n) アドバンテージ 欠点がある サイクル分割 (i mod n) 連続スキャンに最適 範囲クエリの処理が難しい ハッシュ分割 0…n-1の範囲のハッシュ関数h シーケンシャルアクセス クラスタリングがないため、範囲クエリに答えるのが困難 範囲区分 ベクトルの除算[ v 0 , v 1 , ..., vn − 2 ] [v_0, v_1, ..., v_{n-2}][ v0,v1,... ,vn − 2】
歪んだ取り扱い
-
スキューの種類 (スキューの 2 種類とは何ですか? スキューの 2 つの区分とは何ですか?)
-
スキューへの対処 (3 つの方法?)
属性値のスキュー: いくつかの値が多くのタプルのパーティション属性に表示され、パーティション属性に同じ値を持つすべてのタプルが同じパーティションに割り当てられます。
パーティションスキュー
範囲パーティショニング: 不正なパーティション ベクトルでは、1 つのパーティションに多すぎるタプルが割り当てられ、他のパーティションには少なすぎるタプルが割り当てられる可能性があります。
ハッシュ分割: 適切なハッシュ関数が選択されている限り、発生する可能性は低いです。
範囲パーティションのスキューの処理: バランスの取れたパーティション ベクトルを生成する方法。リレーションシップの 1/n が読み取られるたびに、次のタプルのパーティション属性値がパーティション ベクトルに追加されます。
ヒストグラムを使用した歪度の処理: ヒストグラムからバランスの取れた分割ベクトルを構築するのは比較的簡単です
仮想プロセッサを使用してスキューを処理する: スキューのある仮想パーティションは複数の実プロセッサに分散されます。
クエリ間の並列処理
トランザクション スループットを向上します。主に、1 秒あたりのより大きなトランザクションをサポートするためにトランザクション処理システムを拡張するためです。
キャッシュコヒーレンシプロトコル
• ページを読み書きする前に、ページを共有または排他的にロックする必要があります。
• ページをロックする場合、ページをディスクから読み取る必要があります
。 • ページのロックを解除する前に、ページが更新された場合はディスクに書き込む必要があります。
クエリ内並列処理 (クエリ内並列処理の 2 つの相補的な形式)
オペレーション内並列処理 - クエリ内の各オペレーションは並行して実行されます。
操作間の並列性 - クエリ内の異なる操作が並行して実行されます。
ビッグデータマネジメントシステムⅡ
NoSQL の概要
SQLだけではない
一般的な NoSQL データベースには、通常、キー/値データベース、列ファミリー データベース、ドキュメント データベース、グラフ データベースが含まれます。
キャップ
C (一貫性): 一貫性とは、どの読み取り操作でも、以前に完了した書き込み操作の結果を常に読み取ることができることを意味します。
A (可用性): 可用性とは、データを迅速に取得し、一定期間内に操作結果が返されることを指します。
P (ネットワーク分断耐性): 分断耐性とは、ネットワーク分断が発生した場合でも、別々のシステムが正常に動作できることを意味します。
- CA: 一貫性 (C) と可用性 (A) を重視し、パーティション耐性 (P) を放棄することを意味します。最も簡単な方法は、トランザクション関連のコンテンツをすべて同じマシン上に置くことです。明らかに、このアプローチはシステムのスケーラビリティに重大な影響を与えます。従来のリレーショナル データベースはこの設計原則を採用しているため、スケーラビリティが比較的劣ります
- CP: つまり、一貫性 (C) と分割耐性 (P) を重視し、可用性 (A) を放棄します。ネットワーク分割が発生すると、影響を受けるサービスはデータの整合性を待つ必要があるため、待機期間中は外部サービスを提供できません。
- AP: つまり、可用性 (A) と分割耐性 (P) を重視し、一貫性 (C) を放棄して、システムが一貫性のないデータを返すことを許可します。
ベース
BASE(基本的に利用可能、ソフトステート、結果整合性)
BASE の基本的な意味は、基本的に利用可能 (Basically Available)、ソフト状態 (Soft state)、および結果整合性 (Eventual Consistency) です。
新しいSQL
NewSQL は、さまざまな新しいスケーラブル/高性能データベースの略称です。
- NoSQLによる大量データの保存・管理が可能
- ACID や SQL などの従来のデータベースの特性も維持します。
NewSQL の機能:
リレーショナル データ モデルのサポート
SQL をメイン インターフェイスとして使用
第 3 章 ビッグデータ リアルタイム コンピューティング フレームワーク
3.1 嵐
意味?
リアルタイム、分散、ストリーミング コンピューティング システム
Storm の典型的なアプリケーション シナリオ (同期、非同期、データ ストリーム処理、継続的コンピューティング、分散リモート プログラム呼び出し) は何ですか?
リクエストレスポンス(同期):リアルタイム画像処理、リアルタイムWebページ解析
ストリーム処理 (非同期): 項目ごとの処理、分析、統計
データ ストリーム処理: フォールト トレランスとスケーラビリティを備えた新しいデータの処理とデータベースのリアルタイム更新に使用できます。
継続的な計算: 継続的なクエリを実行でき、結果をリアルタイムでクライアントにフィードバックできます。
分散リモート プロシージャ コール
ストームの特徴
信頼性、高速性、高い耐障害性、水平拡張性
技術的なアーキテクチャ (3 つの部分とは何ですか?)
Nimbus (クラス JobTracker
動物園の飼育員
スーパーバイザー (クラス TaskTracker)
ワーカー (クラス Child
ワーカー、実行者、タスクの関係
以前と似たような
ストームのワークフロー
クライアントがトポロジを送信 => Nimbus がタスクを Zookeeper に保存 => スーパーバイザーが割り当てられたタスクを取得して開始 => ワーカーが特定の (タスク) を実行
ストーム フォールト トレランス (タスク レベルの障害にどう対処するか? タスク スロットの障害 + クラスター ノード (マシン) の障害のタスク レベルの障害はどうなりますか? Nimbus ノードの障害はどうなりますか?)
タスクレベルの失敗
ボルトタスクのクラッシュによって引き起こされたメッセージが応答されないか、アッカータスクが失敗する
=> スパウトの失敗メソッドが呼び出されます。スパウト タスクの失敗
=> スパウト タスクに接続されている外部デバイス (MQ など) がメッセージの整合性を担当します。クラスタノード(マシン)の障害
- Storm クラスターのノード障害: タスクの移行
- Zookeeper クラスターのノード障害: マシンの半分未満がダウンしていてまだ実行されていることを確認します。
Nimbus ノードの障害: Nimbus がないと、ワーカーは必要なときに他のホストにスケジュールされず、クライアントはタスクを送信できません。
ストリームとは何ですか? スパウトとは何ですか? タプルとは何ですか? ボルトとは何ですか? トポロジーとは何ですか?
ストリーム: タプルの無限シーケンス
スパウト: 蛇口、ストリームの源
ボルト: タプルを処理し、新しいストリームを作成します
トポロジー: スパウトとボルトの抽象的なネットワーク
ストリームのグループ化とは何ですか? 6通りあるの?
2 つのコンポーネント (スパウト、ボルト) 間でタプルを転送する方法をトポロジーに指示するために使用されます。
ShuffleGrouping: ランダムなグループ化
FieldsGrouping: フィールドごとのグループ化
AllGrouping: ブロードキャスト送信、すべてのタプルがすべてのタスクに送信される
GlobalGrouping: グローバル グループ化、すべてのタプルが同じタスクに送信される
NonGrouping: グループ化なし DirectGrouping
: 送信指定、受信指定
3.2 スパークストリーミング
入力データはタイムスライスに従って DStream のセグメントに分割され、データの各セグメントは Spark の RDD に変換されます。
Spark Streaming の中心的なコンセプト
- DStream は何を表しますか?
- トランスフォーメーションは何をするのですか? (標準RDD動作、ステートフル動作)
データストリームを表す一連の RDD
変換: 1 つの Dstream からのデータを変更して別の DStream を作成する
標準 RDD 操作: map、countByValue、reduce、insert...
ステートフル操作: window、countByValueAndWindow...
DStreamの入力ソース
- ベースソース?
- プレミアムソース?
火花故障耐性
- RDD は、元のフォールト トレラント入力から RDD を作成した一連の操作を記憶できます。
- 入力データのバッチは複数のワーカー ノードにわたってメモリ内に複製されるため、フォールト トレラントになります。
若干のコントラスト
Spark Streaming と Storm の比較
スパークストリーミング | 嵐 |
---|---|
ミリ秒レベルのストリームコンピューティングは実現できない | ミリ秒単位の応答を実現可能 |
低遅延の実行エンジンをリアルタイム コンピューティングに使用可能 | |
Storm と比較して、RDD データ セットは効率的なフォールト トレラント処理を実行するのが簡単です。 |
Storm アーキテクチャ コンポーネントと Hadoop アーキテクチャ コンポーネント間の機能的対応関係
ハドゥープ | 嵐 | |
---|---|---|
アプリケーション名 | 仕事 | トポロジー |
システムの役割 | ジョブトラッカー | 雲 |
タスクトラッカー | スーパーバイザー | |
コンポーネントインターフェース | マップ/リデュース | 注ぎ口・ボルト |
第 4 章 ビッググラフコンピューティングフレームワーク
計算モデル
スーパーステップ: 並列ノード コンピューティング
-
各ノード (6 つの可能な操作)
-
終了条件(2つ)
前のスーパーステップによって送信されたメッセージを受け入れます。
同じユーザー定義関数を実行します。
その値または出力エッジの値を変更します。
他のポイントにメッセージを送信します (次のスーパーステップによって受け入れられます)。
グラフのトポロジを変更します。 グラフのトポロジを変更します
。もっとやるべき仕事があるすべての頂点が同時に非アクティブになります。
メッセージは渡されません。
4.1 翻訳
システム構造
Pregel システムもマスター/スレーブ モデルを使用します。
- マスターノード: スレーブノードのスケジュールを設定し、スレーブノードのエラーを修正します
- スレーブノード: 独自のタスクを処理し、他のスレーブノードと通信します
アグリゲーター (何に使用されますか? どのような構造で集約されますか?)
グローバル通信、グローバルデータ、モニタリング用
スーパーステップの最後に、各スレーブ ノードから部分的に集約された値がツリー構造に集約されます。
プリジェルの実行(5ステップ)
① マスターノードはグラフを分割し、各スレーブノードに 1 つ以上の部分を割り当てます。
② マスターノードは各スレーブノードにスーパーステップの実行を指示します。
③ 最後に、マスターノードは各スレーブノードに自身のグラフを保存するよう指示します。
4.2 グラフX
ルーティングテーブルを使用した接続サイトの選択
mrTriplet のキャッシュを反復処理します。
mrTriplet の集約を反復処理します。
耐障害性
- チェックポイント: マスター ノードは、パーティションの状態を永続ストレージに保存するようにスレーブ ノードに定期的に指示します。
- エラー検出: 「ping」メッセージの時間指定の使用
- リカバリ
マスターはグラフパーティションを現在利用可能な
スレーブに再割り当てします すべてのワーカーは最新の利用可能なチェックポイントからパーティションの状態をリロードします- 部分的リカバリ: 送信情報をログに記録します。リカバリ パーティションのみが含まれます。
第5章 ビッグデータストレージ
確率の低い出来事が大規模な標準になるでしょう(確率の低い出来事とは何ですか?)
ディスクマシンの破損、RAIDカードの故障、ネットワーク障害、電源障害、データエラー、システム異常
HDFS
関連用語
HDFS | GFS | ムースFS | 説明する |
---|---|---|---|
名前ノード | マスター | マスター | ファイルシステムのディレクトリ情報、ブロック情報、データブロックの位置情報を提供し、各データサーバーを管理します。 |
データノード | チャンクサーバー | チャンクサーバー | 分散ファイル システムの各ファイルは複数のデータ ブロックに分割され、各データ ブロックは異なるサーバーに保存されます。 |
ブロック | かたまり | かたまり | 各ファイルは複数のブロック (デフォルトは 64MB) に分割され、各ブロックにはストレージの基本単位である連続したファイル コンテンツが含まれます。 |
パケット | なし | なし | Packetに蓄積後、一旦ファイルシステムに書き込みます |
かたまり | なし | ブロック(64KB) | 各データパケットは、データをより小さなブロック(512バイト)に分割し、各ブロックにパリティチェックコード(CRC)が照合され、このブロックが送信ブロックとなります。 |
セカンダリ ネームノード | なし | メタログ | スタンバイマスターサーバーはマスターサーバーのログを取得し、修正されるのを待っています |
コア機能
関数 | 説明する |
---|---|
名前空間 | 名前空間 |
シェルコマンド | HDFS およびその他の Hadoop がサポートするファイル システムと直接対話します。 |
データ複製 | |
ラック認識 | ストレージ戦略では、ローカル ラック上のノードに 1 つのコピーを保存し、同じラック上の別のノードに 1 つのコピーを保存します。 |
編集ログ | ログシステム全体の中核です |
クラスターバランス | |
スペースリサイクル |
ファイル読み込み処理(5ステップ?)
① HDFS クライアントがリモート ネームノードへの RPC リクエストを開始します。
② Namenode はファイルのブロックコピーの DataNode リストを返します。
③クライアントはクライアントに近いDataNodeを選択してブロックを読み込みます
④ ファイルの読み取りがまだ終了していない場合、クライアントは引き続きネームノードからブロック リストの次のバッチを取得します。
⑤ 読み取り後、DataNode との接続を閉じ、次のブロックの読み取りに最適な DataNode を見つけます。
ファイル書き込みプロセス (5 つのステップ? データの書き込み方法?)
① HDFS クライアントがリモート ネームノードへの RPC リクエストを開始します。
②NameNodeはファイルが存在するか、操作権限があるかを確認します。
③ ファイルを複数のパケットに分割し、NameNodeから新規ブロックを申請し、保存に適したDataNodeのリストを取得する
④ パイプライン形式でパケットをDataNodeに書き込み始め、残りをパイプライン形式で格納後、次のDataNodeに渡します。
⑤ 最後の DataNode は ack パケットを返し、パイプライン内のクライアントに渡します。クライアントはそれを受信すると、対応するパケットを ack キューから削除します。
データ書き込みプロセスの概要
データの書き込み方法 | アドバンテージ | 不十分 |
---|---|---|
チェーンライト | 負荷分散 | チェーンが長すぎる |
マスタースレーブ書き込み | 短いチェーン | 一点圧力 |