[2020年7月] Google Cloud Certified – Professional Data Engineer日本語版(プロ認定):暗記ポイント、意味不明単語リストの解説など(1)

どうも、すえきあおいです。

アウトプットを意識するだけで学習効率が跳ね上がると、メンタリストDaiGoの動画で聞きまして。

ブログも更新できて勉強にもなったら一石二鳥だ!ということで、理解したことを私なりに噛み砕いてメモしていこうと思います。

この辺の経緯・方法などは以下の過去記事をご参照ください。

[2020年7月] Google Cloud Certified – Professional Data Engineer日本語版(プロ認定):遠隔監視(オンライン)試験の申し込み方

[2020年7月] Google Cloud Certified – Professional Data Engineer日本語版(プロ認定):模擬試験の受け方

 

模擬試験の解説を読んでわかった暗記ポイント

暗記はね、こう見えて結構得意なんですよ。うふふ。短期記憶は全然なんですけどね。コツコツ復習するので試験とかは結構強かったりして。はい、どうでもいいですね、しかもうざいですね。すみません。

いくつか、何度も出てくる単語やサービスをピックアップしたので、これらは暗記ポイントとしました。

Dataproc:Hadoopの代わりのマネージドサービス。データベース系のツール。

オンプレからGCPへのインフラ移行の話は、Dataprocの話だと思って大丈夫。詳しく知りたい方は以下ご参照ください。

[2020年7月] Google Cloud Certified – Professional Data Engineer日本語版(プロ認定):オンプレ(Hadoop のHDFS クラスタ)からGCP へのインフラ移行についてまとめ

[2020年7月] Google Cloud Certified – Professional Data Engineer日本語版(プロ認定):オンプレ(Hadoop のHDFS クラスタ)からGCP へのデータ移行についてまとめ

 

超容量のデータストレージには、Bigtable か BigQuery

  • Bigtable:低レイテンシー・高スループット
    • 超容量でありながらリクエストへの即時応答などが求められる金融データなどのストレージ。
  • BigQuery:データの操作がしやすい・低価格
    • データの解析など

[2020年7月] Google Cloud Certified – Professional Data Engineer日本語版(プロ認定):BigQuery ウィンドウ関数まとめ

GCPのDB、ストレージ系サービスまとめ

BigTable BigQuery Cloud

SQL

Cloud

Datastore

Cloud

Spanner

Cloud

Storage

大容量 × × × ×
種類 NoSQL DWH RDB NoSQL RDB DWH
水平スケーリング × ×

水平スケーリング:インスタンスやサーバの数を増やす

CloudSpanner:スキーマやSQLの概念を持ち、整合性を保ちつつ、データ分散による水平スケーラビリティを実現。

データはトランザクションとして整合性があるなら、NoSQLではなくRDBを使う。つまり、BigTableではなくSpanner、みたいな。

 

 

Dataflow:データの整形・集約などの処理を行うパイプライン

Dataflowを使用した大規模なログの処理の例

  1. マイクロサービスのデプロイ:GKE(Google Kubernetes Engine)
  2. ログを受信してエクスポート:Cloud Logging
  3. ログの保存
    • バッチ:Cloud Storage
    • ストリーミング:Pub/Sub
  4. ログデータの処理:Dataflow
  5. 処理出力の保存:BigQuery

DataflowとDataprocの違い

どちらのデータの変換ができる。

Dataprocは、GCP上のHadoopクラスタと、Hadoopエコシステムツール(Apache Pig、Hive、Sparkなど)へのアクセスを提供する。

Dataflowは、Sparkをサポートしてない。Apache Beamベースのジョブを実行する。

 

意味不明だった単語リスト

意味不明というか、聞いたことあるけどよく考えるとなんだっけ?ってやつが多い。まぁ聞いたことすらない意味不明なのも結構あったけどw

ANSI SQL クエリ

ANSI(American National Standards Institute:米国標準化団体)が決めた規格に準拠したSQLで書かれたクエリ。

ANSIなSQL:Oracle SQLとか。

ANSIじゃないSQL: LIMITとかTOPとか使えるやつ。あと比較演算子で%とか<>が使えるやつ。

 

要するに、Oracleみたいなちょっと古いタイプのSQLって感じの認識で良さそう。

BigQuery の Automatically detect

Automatically detectを訳すと自動検出。つまり、スキーマ自動検出のことやね。それなら知ってるー

英語読めなくて辛い( ; ; )

簡単に説明すると、CSVファイルをBigQueryにテーブルとして取り込む等の際、データ型をデータから自動で検出してれる機能。つまり、人間がいちいちこの列は数値型で、この列は日付型で、と設定しなくていいのだ!

Hadoop クラスタ

Hadoopってよく聞くけど、実際どんなもんなのか触ったことないからよくわからんちゃい。

Hadoop:大規模データの蓄積・分析を分散処理技術によって実現するオープンソースのミドルウェア

こっちの方がわかりやすいかも。「巨大データの取り扱いを目的とした分散処理のフレームワーク」ですね。この分散処理を可能にした技術が、GoogleのMapReduceを参考にしたもの。

MapReduceというのは、簡単にいうと巨大なデータ群から件数を出すより、巨大なデータをバラバラのクラスタ(群れ)にバラして、各集団の件数を集計しておいて、それを最後に合計した方が処理速度が速いやん、って技術。

つまり、

Hadoop クラスタ= 巨大なファイルシステムを分散させた群れの一つ。

ってことですね。別に今さらガッツリHadoopで作り込むこともないと思うので、これくらいの理解で十分かと。

Parquet 形式、ORC形式(=カラムナフォーマット)

CSVや普通のRDB(リレーショナルデータベース)の場合、行単位でデータが登録されています。これの、列単位バージョン。

余談だが、BigQueryが超高速なのは列指向なデータの持ち方のおかげらしい。

HDFS

HDFS :Hadoop Distributed File System : Hadoop分散ファイルシステムの略。つまり、巨大なデータを格納するためのファイル分散システム。

ステージングバケット

設定ファイルや制御ファイルを保存するバケット。

ステージング環境(=検証環境)

「ステージング環境」とは「試験を実施するための環境」。

開発環境、ステージング環境(検証環境)、本番環境、みたいな使い分けがある。

プリエンプティブル(preemptive:先買の)

余剰のキャパシティを利用する機能。低コストでジョブの処理能力を向上させることができるが、使用できるかどうかは利用状況による。なので、優先度の低いものに適用すべし。

エフェメラル(ephemeral:一時的な)

エフィメラル クラスタ、とかよく出てくる。

例えば、こんな感じ。

Dataprocでは、Cloud Storage に保存された永続データを指すようにジョブを更新する時、ジョブを実行する Dataproc クラスタを作成します。この種の一時的な 1 回限りのクラスタは、エフェメラル クラスタと呼ばれます。

エフェメラル クラスタで重要なポイントは、ジョブの存続期間にのみ使用すること。

OSSジョブ

オープンソースソフトウエア(OSS)のジョブ。ここでいうオープンソースソフトウェアというのは、Zabbix、JobScheduler、Hadoop、Apache Spark みたいなやつ。

Dataproc 上に OSS ジョブ を構築すると、Kubernetes を使ってそれらを素早くコンテナ化して、GKE クラスタがある場所ならどこでもデプロイできます。

マネージドサービス

サーバー運用管理、保守や障害時の対応など、システム管理を一括して請け負う、アウトソーシングサービスのこと。

ウィンドウ関数(分析関数)

行のグループに対して値を計算し、各行に対して 1 つの結果を返します。

これは、行のグループ全体に対して 1 つの結果を返す集計関数(GROUP BY)とは異なります。

GROUP BYしたときに集計値と、その明細を並べて見たい時に使うイメージですね。明細をみて分析するから、分析関数なのかな。ウィンドウ関数、ともいいますが、グループ化した塊をそれぞれ一つの窓枠(ウィンドウ枠)に納める、というのもイメージしやすいかも。

ちなみに、グループはOVER(PARTITION BY ほにゃらら)で定義する。。

???

ってなった人は、こういうのは具体的な使い方をみるとスッと理解できるので、下記で具体例をご参照ください。

[2020年7月] Google Cloud Certified – Professional Data Engineer日本語版(プロ認定):BigQuery ウィンドウ関数まとめ

offset(オフセット)

基準点からの距離を示す整数。

ウィンドウ化

PCollection のデータをその個別の要素のタイムスタンプに基づいて、論理的に細分化することによって動作する。(さっきのウィンドウ関数の話とは全く別の話)

  • 固定時間ウィンドウ
    • タイムスタンプ付きの PCollection に対して、各ウィンドウが◯分間分の要素を保持する
  • スライディング タイム ウィンドウ
    • 複数のウィンドウがずれて重なり合う。データの移動平均を求めたいときに使う。開始間隔はピリオドと呼ぶ。10秒ごとに開始、5分間のデータを保持するなら、ウィンドウサイズ5分、ピリオド10秒。
  • セッション単位ウィンドウ
    • ユーザのマウス操作のような、時間的に不規則に分散しているデータで使う。セッション ウィンドウ処理はキーごとに適用される。
    • 最小ギャップ時間を超えると、新しいウィンドウになる。超えない間隔であれば、同じウィンドウにグループ化される。
  • 単一グローバル ウィンドウ
    • デフォルトでは、PCollection のすべてのデータは単一のグローバル ウィンドウに割り当てられます。
    • PCollection の要素がすべて単一グローバル ウィンドウに属する場合、パイプラインはほとんどバッチ処理ジョブ(MapReduce ベースの処理での)と同様に動作します。

公式ドキュメントはこちら

PCollection

パイプライン データとして機能する複数要素のデータセット。無制限のグローバル ウィンドウを使って、Pub/Sub 入力データから作成される。

ETL フェーズ

  • Extractフェーズ:抽出(入力)
  • Transformフェーズ:変換
  • Load フェーズ:積み込み(出力)

プライマリ

Primary:主要な

SSDとHDD

どちらも記憶装置。

SSD:Solid State Drive:ソリッドステートドライブ。高価・高速。ただしデータ容量はHDDより小さい

HDD:Hard Disk Drive:ハードディスクドライブ。

 

ストレージ オプション

  • ゾーン/リージョン SSD 永続ディスク: 効率的で信頼性の高いブロック ストレージ。
  • ローカル SSD : 高パフォーマンスかつ一時的なローカル ブロック ストレージ。
  • Cloud Storage バケット: 手頃な料金のオブジェクト ストレージ。
  • Firestore: Google Cloud ユーザー向けの高性能ファイル ストレージ。

 

BigTable の cbtツール

Cloud Bigtable で基本的な操作を実行するためのコマンドラインツール。Goで記述されている。

 

BigTable の HBase シェル

HBase シェルは、表の作成や削除などの管理タスクを実行するコマンドライン ツール。

ホットスポット

Spanner において、データが集中してしまった一部のノード(単一のサーバ)。

SpannerはRDBだが、データは主キーによって分散されるため、ホットスポットが出来ないように主キーの採番処理を実装するなど、通常のRDBとは異なる設計が必要。

Apache Kafka

スケーラビリティに優れた分散メッセージキュー。メッセージキューとは、システム間のデータの受け渡しを仲介し、データを一時的に保持(キューイング)するミドルウェア。

Pub/Sub

高可用性とスケーラビリティを備えたメッセージ配信サービス。GCPではApach Kafkaを使うと複雑になるから基本的にはPub/Subを使うように、って感じです。

Subscriber(サブスクライバー):情報の利用者(情報の宛先)

Publisher(パブリッシャー):情報の提供者(情報の送信元)

ただし、Pub/Subではサブスクライバーによって受信されるメッセージの順序は保証されない。

順序が重要なケースにおいては、解決策が記されている。

ケース1:ログ、更新の状態など、最終結果の順序が重要なケースでは、パブリッシャーの各イベントにタイムスタンプをつける。

ケース2:しきい値を強制する必要のあるトランザクションでは、各メッセージに一意のIDを割り当てて保存しておくこと。保存先はFireStoreやCloudSQLなどの永続的な場所。

ただし、ケース2ではパフォーマンスとスループットが犠牲になるので、絶対に必要な場合以外はやらないように、と念押ししてあります。

hypervisorハイパーバイザー)

コンピュータの仮想化技術のひとつである仮想機械(バーチャルマシン)を実現するための、制御プログラムである。 仮想化モニタや仮想化OSと呼ばれることもある。

protobuf(Protocol Buffersの略)

Googleが内部で利用しているシリアライゼーション形式。スキーマ言語。XML schemaより20〜100倍高速で、シンプル。Protocol Buffersによりあらゆる種類のフォーマットをシリアライズすることができるようになる。

Apache HBase

オープンソースの、列指向、分散データベース。

GoogleのBigTableをモデルとし、Javaにより書かれている。

Apache Cassandra

オープンソースの分散データベース管理システムである。

元はFacebook社において大規模データの格納のために開発された

Apache Beam (Batch + strEAM)

バッチデータ処理とストリーミングデータ処理の両方を行うためのモデル。

キュレート ダッシュボード

curation(キュレーション):情報を選んで集めて整理すること。

キュレーションサイト=まとめサイト。

 

Cloud Monitoring には、次のような Cloud Spanner インスタンスに関する重要な情報を要約して示すキュレート ダッシュボードが用意されている。

  • インシデント: ユーザー作成のモニタリング アラート(オープン、アクティブ、解決済み)
  • イベント: Cloud Spanner 監査ログの一覧
  • インスタンス: Cloud Spanner インスタンスの概要。ノード数、データベース数、インスタンスの状態等
  • スループットとストレージ使用量の集計グラフ

ワークロード:仕事量、負荷

インスタンスのワークロード(仕事量、負荷)が変化しても、Cloud Spanner ではインスタンス内のノード数が自動的に調整されません。そのため、インスタンスが CPU 使用率の推奨最大値とノードあたりのストレージの推奨上限内に収まるように、いくつかのアラートを設定する必要があります。

ちなみに、BigTableではクラスタの CPU 使用率やディスク使用量が一定のしきい値を超えると、クラスタの性能が低下し、データの読み取りや書き込みを試行するとエラーが発生することがある。

インスタンス内のいずれかのクラスタがノードあたりのストレージ容量のハードリミット(ストレージ使用率70%など)を超えると、ハードリミットを超えたクラスタにノードを追加するまで、そのインスタンス内のすべてのクラスタへの書き込みが失敗します。

 

長くなったので続きはこちらへ!

それでは!

末岐 碧衣
  • 末岐 碧衣
  • フリーランス のシステムエンジニア。独立後、一度も営業せずに月収 96 万円を達成。1986年大阪生まれ。早稲田大学理工学部卒。システムエンジニア歴 12年。
    2009年、ITコンサルティング企業に入社。3年目でコミュ障が爆発し人間関係が崩壊。うつにより休職するも、復帰後はコミュ障の自覚を持ち、「チームプレイ」を徹底的に避け、会社組織内においても「一人でできる仕事」に専念。社内外から評価を得た。
    無理に「チームプレイ」するよりも「一人でできる仕事」に専念した方が自分も周囲も幸せにできることを確信し、2015年フリーランスとして独立。