Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Embulkの
2015.04.24
#bq_sushi tokyo #1
Satoshi Akama
GCS
BigQuery
周りのプラグインについて
About Me
Software Engineer
https://github.com/sakama/
embulk-output-bigquery
embulk-input-gcs
S-cubism Technology Inc.
Sat...
3無数のデータフォーマット、ストレージ…
あらゆるデータフォーマット、RDBMS、
データストレージとの連携がプロジェクト毎に発生
EAIツール(データ連携ソフトウェア)を使えるケースばかりではない
I m tired.
CSV
CSV
JSO...
4並列バルクロードツール Embulk
Treasure Dataさんが出したOSSのバルクデータ転送ツール
・並列実行
・データバリデーション
・エラーリカバリー
・Input/Ouput pluginを
 自由に組み合わせられるプラガブルな...
5Various Plugins
DB
Oracle
MySQL
PostgreSQL
Redshift
Elasticsearch
検索エンジン
クラウドサービス
Salesforce
Amazon S3
GCS、BigQuery
ファイルフ...
in:
type: file
path_prefix: "/root/try1/csv/sample_"
out:
type: stdout
6入力データ正規化支援
guess
preview
in:
type: file
path_prefix: /...
7GCP界隈のEmbulkプラグイン
embulk-input-gcs
embulk-output-gcs
embulk-output-bigquery
Input plugin
Output plugin
他のInput/Output plu...
8BigQueryへのデータロード
Streaming Insert
bq command line tools(GCS/直接)
Bulk Insert(GCS経由/直接)
embulk-output-bigquery(直接)
fluent-pl...
9embulk-output-bigquery
シンプルにバルクロードを行いたい用途向け
数100GB∼TB/dayの量をロードする必要がある用途は
現状転送スループット的に辛い(後述)
オプション名/値は極力fluentd-plugin-big...
10embulk-output-bigquery
Direct Insert
Embulk
executor plugin
CSV jsonl
gzip
embulk-output-bigquery
FormatterPlugin
Encode...
11BigQueryのQuota Policyの制約はそのまま
File Type 圧縮 非圧縮
CSV 4GB
データに改行を含む 4GB
データに改行を含まない 5TB
JSON 4GB 5TB
https://cloud.google.c...
12機能 - 動的テーブル作成、認証
auto_create_table: true
schema_path: /path/to/schema.json
table: table_%Y_%m
動的テーブル作成機能
・設定ファイルへの記述
・Em...
13機能 - 重複ロード防止機能
prevent_duplicate_insertオプション(default: off)
BigQueryの各プロジェクト内でjob IDはユニークである必要がある
(失敗したjobを含む)
同一データ/同一設定値...
14Performance(TODO:改善)
GCE instance上での実行時間例
ファイル転送(3∼7MB/sec)がボトルネック。処理時間の約半分が転送時間。
今のところgsutil程のスループットは出ない。
us-central1-c...
15TODO
・4GB単位(圧縮時)のファイル分割
改行位置を見てやる必要があるのでちょっと面倒
FileOutput Pluginの場合、行単位でのデータは取得できず…
Output Pluginに変えるとFormatter、Encoder ...
16Contributing to Embulk project
・Pull-requests & issues on Github
・Posting blogs
 ・“I tried Embulk. here is how it worked...
Upcoming SlideShare
Loading in …5
×

EmbulkのGCS/BigQuery周りのプラグインについて

4,981 views

Published on

EmbulkのGCS/BigQuery周りのプラグインについて #bq_sushi

Published in: Technology
  • Be the first to comment

EmbulkのGCS/BigQuery周りのプラグインについて

  1. 1. Embulkの 2015.04.24 #bq_sushi tokyo #1 Satoshi Akama GCS BigQuery 周りのプラグインについて
  2. 2. About Me Software Engineer https://github.com/sakama/ embulk-output-bigquery embulk-input-gcs S-cubism Technology Inc. Satoshi Akama iOS/WindowsタブレットでPOSを作ってる会社の インフラを中心に担当 チェーン店の600台∼1000台のPOSを 丸ごと置き換える用途でも使われていたりします。 BigQueryはSaaS形態で提供しているサービスの裏側の解析で使用 @oreradio
  3. 3. 3無数のデータフォーマット、ストレージ… あらゆるデータフォーマット、RDBMS、 データストレージとの連携がプロジェクト毎に発生 EAIツール(データ連携ソフトウェア)を使えるケースばかりではない I m tired. CSV CSV JSON CSV 1行目がコメント行 ヘッダファイルは別出力 タブ切り(TSV) MS SQL Server Mongo DB MySQL Amazon S3 JSON XML XML CSV Oracle N ✕ M development エラーハンドリング フォーマット変更 パフォーマンス リトライ処理実装 etc
  4. 4. 4並列バルクロードツール Embulk Treasure Dataさんが出したOSSのバルクデータ転送ツール ・並列実行 ・データバリデーション ・エラーリカバリー ・Input/Ouput pluginを  自由に組み合わせられるプラガブルな設計 ・分散処理が可能な設計 ・冪等性 http://www.slideshare.net/HiroshiNakamura/embulk-20150411 http://www.slideshare.net/repeatedly/fluentd-and-embulk-game-server-4 http://www.slideshare.net/frsyuki/embuk-making-data-integration-works-relaxed/12 Fluentdのバッチ版 プラグインベースのバルクローダー
  5. 5. 5Various Plugins DB Oracle MySQL PostgreSQL Redshift Elasticsearch 検索エンジン クラウドサービス Salesforce Amazon S3 GCS、BigQuery ファイルフォーマット CSV、TSV、JSON、XML pcap packet capture files gzip、bzip2、zip、tar、cpio http://www.embulk.org/plugins/ List of Embulk Plugins Embulk on Hadoop embulk-executor-mapreduce NoSQL Redis
  6. 6. in: type: file path_prefix: "/root/try1/csv/sample_" out: type: stdout 6入力データ正規化支援 guess preview in: type: file path_prefix: /root/try1/csv/sample_ decoders: - {type: gzip} parser: charset: UTF-8 newline: CRLF type: csv delimiter: ',' quote: '"' escape: '' skip_header_lines: 1 columns: - {name: id, type: long} - {name: account, type: long} - {name: time, type: timestamp, format: '%Y-% - {name: purchase, type: timestamp, format: - {name: comment, type: string} exec: {} out: {type: stdout} 元データの先頭を読んで スキーマ定義作成等を自動生成する embulk guess /path/to/config.yml -o out.yml dry runの機能
  7. 7. 7GCP界隈のEmbulkプラグイン embulk-input-gcs embulk-output-gcs embulk-output-bigquery Input plugin Output plugin 他のInput/Output pluginとの組み合わせで GCS→Elasticsearch RDBMS→GCS File→BigQuery等 embulk-output-google-spreadsheets
  8. 8. 8BigQueryへのデータロード Streaming Insert bq command line tools(GCS/直接) Bulk Insert(GCS経由/直接) embulk-output-bigquery(直接) fluent-plugin-bigquery Google Cloud LoggingのBigQuery連携 job作成時にデータをPostで送信
  9. 9. 9embulk-output-bigquery シンプルにバルクロードを行いたい用途向け 数100GB∼TB/dayの量をロードする必要がある用途は 現状転送スループット的に辛い(後述) オプション名/値は極力fluentd-plugin-bigqueryや bq Command-Line toolに合わせています EmbulkのjarファイルをDLしてPATH等を設定 embulk gemコマンドでプラグインをインストール guess、previewを駆使しつつconfig.ymlを作成 embulk run 1 2 3 4
  10. 10. 10embulk-output-bigquery Direct Insert Embulk executor plugin CSV jsonl gzip embulk-output-bigquery FormatterPlugin EncoderPlugin FileOutputPlugin Input or MySQL PostgreSQL File …etc 1. FormatterPluginでCSV/JSONにフォーマット 2. EncoderPluginでgzip圧縮 3. ローカルに出力したファイルをBigQueryにDirect Insert 4. jobが実行完了するまでBigQueryのAPIをpolling
  11. 11. 11BigQueryのQuota Policyの制約はそのまま File Type 圧縮 非圧縮 CSV 4GB データに改行を含む 4GB データに改行を含まない 5TB JSON 4GB 5TB https://cloud.google.com/bigquery/quota-policy 1,000 load jobs/table/day 10,000 load jobs/project/day プラグイン側で出力時のファイル分割は実装しようと思っているが、 InputがFileの場合は事前に分割する方がEmbulkで並列処理できるので効率は良い (embulk-input-filesplitというプラグインがあります) 同時にrunningになれるjobは20まで Output側で 1000 tasks実行すると上限に達する 4/16のアップデートで記述が消えた? 緩和されたなら並列実行に有利に
  12. 12. 12機能 - 動的テーブル作成、認証 auto_create_table: true schema_path: /path/to/schema.json table: table_%Y_%m 動的テーブル作成機能 ・設定ファイルへの記述 ・Embulkのスキーマを受け取る ・fetch_schema(fluent-plugin-bigqueryにある) 認証 ・サービスアカウントのp12形式秘密 による認証 ・GCEインスタンスのaccess tokenによる認証  →インスタンス作成の際に「BigQuery」の権限を付与すればOK schema.jsonのpathを指定してテーブルを作成する 未対応
  13. 13. 13機能 - 重複ロード防止機能 prevent_duplicate_insertオプション(default: off) BigQueryの各プロジェクト内でjob IDはユニークである必要がある (失敗したjobを含む) 同一データ/同一設定値での実行は必ず失敗 job ID = md5(md5(file) + table + schema + max_bad_records…) ONにするとjob IDをファイルのhash値等から明示的に指定する
  14. 14. 14Performance(TODO:改善) GCE instance上での実行時間例 ファイル転送(3∼7MB/sec)がボトルネック。処理時間の約半分が転送時間。 今のところgsutil程のスループットは出ない。 us-central1-c → BigQuery(US) n1-highcpu-4(vCPU✕4、メモリ 3.6GB) SSD persistent disk✕2 I/Oについてはinputがファイルなら output側出力先とはディスク別にすると若干速くなる embulk v0.6.5 embulk-output-bigquery v0.1.6 input:CSVファイル output:CSVフォーマットでBigQueryへ データ:8カラム 1GB✕1並列 644秒(10分44秒) 1GB✕4並列 1028秒(17分8秒)
  15. 15. 15TODO ・4GB単位(圧縮時)のファイル分割 改行位置を見てやる必要があるのでちょっと面倒 FileOutput Pluginの場合、行単位でのデータは取得できず… Output Pluginに変えるとFormatter、Encoder Pluginが使えない… ・ファイル転送速度向上 ・resume support ・エラーハンドリング Embulk本体の実装も追いつつ… イマドキの転送ツールとしては物足りない。 Google APIs Client Library for Javaがmultipart uploadに対応していなかったり するので(APIではサポートされている)「普通に」使っていると難しそう。
  16. 16. 16Contributing to Embulk project ・Pull-requests & issues on Github ・Posting blogs  ・“I tried Embulk. here is how it worked”  ・“I read Embulk code. Here is how it’s written”  ・Embulk is good because…but bad because… ・Talking on Twitter with a word “embulk” ・Writing & releasing plugins ・Windows support ・Integration to other software  ・ETL, Fluentd, Hadoop, Presto… https://github.com/embulk/embulk

×