Diese Präsentation wurde erfolgreich gemeldet.
Die SlideShare-Präsentation wird heruntergeladen. ×

gcpug_okinawa_#2_hiroshi_kawakami

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Nächste SlideShare
GCP vs 他社クラウド
GCP vs 他社クラウド
Wird geladen in …3
×

Hier ansehen

1 von 34 Anzeige

Weitere Verwandte Inhalte

Diashows für Sie (20)

Ähnlich wie gcpug_okinawa_#2_hiroshi_kawakami (20)

Anzeige

Aktuellste (20)

gcpug_okinawa_#2_hiroshi_kawakami

  1. 1. 沖縄と私とGCP GCPを業務で使用して 得られた失敗と知見 By 川上博@pialab
  2. 2. 自己紹介 川上 博(33)♂ ・元はSIerで客先常駐 ・ほぼJava言語ばかり、Python・Go少々 ・サーバサイドのコードだけ書いていた ・客先でクラウド基盤ツールの案件に放り込まれる ・クラウドへの熱を抱えたまま数年・・・ ・縁あって現在の会社「PIALab.」(ピアラボ)へ 個人:Facebookで「hiroshi kawkami」と検索 会社:「PIALab」と検索
  3. 3. 弊社システム ユースケース
  4. 4. ・他社様データを日時でアップロード ・アップロード先はCloud Storage(gsutil) ・格納先はBIGQuery ・お客さん毎にBucket、Datasetを分ける ・他社様システムには手を加えることは不可 ・S-JISでアップロードするお客様がいる ・現在はお客様毎にETLしているが、将来的に汎用 的なものを作成し、どんなデータが来てもBQに格 納したい
  5. 5. ファイルアップロード Cloud Storage BIG Query ファイルアップロード Cloud Storage これを ETL処理 BIG Query こうしたい
  6. 6. そうだCloudDataflow があるじゃない
  7. 7. CloudDataflow を使ってみた
  8. 8. ・バッチ・ストリーム処理を並列で処理 ・各GCPサービスをシームレスにコール ・今の所Javaのみ(今後対応予定) ・ETL(Extract/Transform/Load)にも使える どんなサービスか
  9. 9. バッチ・ストリームを並列で処理 ・ソースコードがデプロイされるとInstanceが自動で起動 ・処理内容を判断して必要なリソース分Instanceをスケール ・データをRecord単位でInstance上に分散、並列処理する ・処理が終了すると自動でサーバを停止、削除(※バッチモードのみ)
  10. 10. 各GCPサービスをシームレスにコール 対象サービス ・Cloud Datastore ・Cloud Pub/Sub ・Cloud Storage ・Cloud BIGTable ・BIGQuery ※小難しい認証処理はSDKが肩代わりしてくれるよ
  11. 11. 実装イメージ
  12. 12. public static void main(String[] args) { Pipeline p = Pipeline.create(new PipelineOptions()); p.begin() .apply(PubSubIO.Read.topic("input_topic") .apply(ParDo.Of(new ExtractTags()) .apply(Count.perElement()) .apply(ParDo.Of(new ExPandPrefixes()) .apply(Top.largestPerKey(3)) .apply(PubSubIO.Write.topic("output_topic") p.run(); } インプット アウトプット
  13. 13. public static void main(String[] args) { Pipeline p = Pipeline.create(new PipelineOptions()); p.begin() .apply(Create.of("Hello", "World")) .apply(ParDo.of(new DoFn<String, String>() { @Override public void processElement(ProcessContext c) { c.output(c.element().toUpperCase()); } })); p.run(); } #processElement() 部分が分散並列処理されます 他の箇所に変数宣言しても参照 できません
  14. 14. 指定可能なinput/output - Cloud Datastore - Cloud Storage - Cloud BIGTable - Cloud PubSub - BIGQuery ・Input 基本 「xxxxIO.Read」のように記述 例:DatastoreIO.Read()、PubSubIO.Read() ・OutPut 基本 「xxxxIO.Write」のように記述 例:TextIO.Write()、BIGQueryIO.Write() ※Cloud StorageはTextIOなので注意!!!
  15. 15. 処理イメージ
  16. 16. デプロイ・起動までの流れ ・コマンドラインまたはEclipseからデプロイ ・デプロイするとライブラリ(jar)とJavaソースがCloud Storageに格納 ・Compute Engine でインスタンス起動 ・処理開始
  17. 17. デプロイ・起動の方法 ・コマンドラインから - Mavenコマンドで実行(mvn compile exec:java・・・) - 各種起動オプションを指定(--project=sample-project) ・Eclipseから - Eclipse Pluginが用意されている(Eclipse 4.4 以降) - 新規Cloud Dataflowプロジェクト作成も簡単に - CloudDataflow用の実行設定メニューで起動オプション指定可 =>ぜひEclipse Plugin使いましょう
  18. 18. 処理モードについて ・BatchMode - 一括処理 - 処理終了後、Jobは待機しない - 処理が終了するとInstance数が0に(Instanceをたたむ) ・StreamMode - リアルタイム処理 - 処理終了後もジョブは待機状態 - 待機状態でInputがあれば処理実行されます - 基本Instance数は0にならない - Inputは原則PubSubのみ(PubsubIO.Read) - ジョブの終了はブラウザもしくはコマンドラインから ※起動オプションで切り替え。処理中に変更は出来ない
  19. 19. 実際やってみます
  20. 20. 困ったこと ・Input(Cloud Storage)/Output(BIGQuery)を動的 に変更したい ・だがxxxxIO.Read、xxxxIO.Writeが基本固定 ・「ComputeEngine経由でCommand Lineから実行 しろ」と公式は言ってる・・・ ・AppEngine野郎としてはComputeEngine使ったら 負けかなと思っている
  21. 21. 助けて〜Goolgleえも〜ん・・・
  22. 22. Googleサポートチームにメールしました やっててよかったゴールドサポート…
  23. 23. ※実際には英語でやりとりしています 公式には書いていないけどAppEngineからコール出来るよ♪ ままま、まじですか?やってみます・・・。 出来ないよー。問題のソースを送るので原因教えて下さい 起動オプションが違うよー。 workerMachineTypeはn1-standard-1以上を設定しなきゃダメだよ あざーーっす、やってみまーす うわーん出来ないよー。問題のソース(ry オプションが(ry
  24. 24. うーん、このままだとエンドレスなので サンプルコードをGitHubの公開リポジトリに作成するから参考にしてよ あああ、ありがとうございます。助かります。。。 1ヶ月ぐらいかかるよ。ごめんねー。 ※実際には英語でやりとりしています 1ヶ月たったよ。。。 ごめんごめん、もうちょっとかかるかな。てへぺろ
  25. 25. というわけで 実際やってみます の予定でしたが・・・
  26. 26. すみません、間に合いませんでした
  27. 27. 実際動かせたら公開します PIALabブログ https://pialab.co.jp Facebook GCPUG https://www.facebook.com/groups/1531859033770693/?fref=ts とりあえず目のつく所に共有しますのでしばしお待ち下さい
  28. 28. CloudDataflow まとめ
  29. 29. ・重たい処理をサービス跨いで実行したい人はぜひ ・リアルタイム処理を〃 ・バッチモードだと終了後インスタンス0に ・ストリームモードだと課金怖い ・Eclipse Pluginはぜひ使っていこう ・AppEngineから起動できるかも(未確認)
  30. 30. 最後に 野望というかお願いです
  31. 31. GCPUG沖縄のFacebookグループ作成しまし た!!!Facebookで「GCPUG OKINAWA」と検索 ぜひ参加してください GCPの知見を共有していきましょう!!!
  32. 32. さらに・・・ ■bq_sushi BIGQueryを肴に酒を飲むというマニアックな会 とそのFacebookグループ Facebookで「#bq_sushi」と検索 ■GCPUG全体のグループ Googleで「GCPUG」と検索 URLが「gcpug.jp」のページです
  33. 33. さらにさらに・・・ ・GCPUG Okinawa、もしくは別でGCPについてのハンズオ ンメインの勉強会を開催したい。できれば月1ぐらいで ・手を動かすのが苦じゃない方に参加いただきたい ・AppEngine、BIGQuery、ContainerEngine等の各種サー ビスについて興味がある方 ・何回か1回ゲストに来てもらう or リモートで ハンズオンしてもらいたいなー ※沖縄行きたいのでゲストで来ますも全然OKです!!! ・Googleさん、今日の登壇者の皆様どうですか? ・#bq_sushiとリモート中継とかおもしろそう

×