The overview of Server-ide Bulk Loader

Preview:

Citation preview

西澤無我Treasure Data, Inc.

Server-side Bulk Loader の概要

1

Today’s Talk

2

背景 > Treasure Data について > バルクデータ転送の難しさ Server-side Bulk Loader について > Embulk の概要 > 概要、使い方、今後について

Treasure Data Service

3

Result Output

クエリ結果自動書込

データ収集 データ分析データ保管

ストレージFlexible, Scalable, Columnar Storage

Webログ

Appログ

センサー

CRM

ERP

RDBMS

TD Toolbelt

バルク   アップローダー

Treasure Agent

ストリーミング   ログコレクター

バッチ型分析

アドホック型分析

データ集計KPI

データ可視化・共有

分析ツール連携

他製品連携

SQL, Pig

RDBMS, Google Docs,AWS S3, FTP Server, etc.

Metric Insights, etc.

Tableau, Motion Board(予定) etc.

POS

分析エンジンHadoop, Treasure Query Accelerator

データ抽出REST API

ODBC/JDBC(SQL, Pig)

(Treasure Data Serviceの機能概要図)

多数のお客様からデータをお預かり

4

1.5兆

3.0兆

4.5兆

6.0兆

2011/12 (創業)

2014/042013/04

創業から2年半で

1万倍に増加

(お客様からお預かりしているデータ件数の推移)

>120有償のお客様数

>20%四半期のアカウント増加率

>4,000単一のお客様の

最大データ収集サーバー数

数字でみる Treasure Data

5

100+日本国内のお客様

17兆保存されているデータ件数

4,000一社が所有する最大

サーバー数

500,0001秒間に保存されるデータ件数

特にバルクアップローダーについて

6

Result Output

クエリ結果自動書込

データ収集 データ分析データ保管

ストレージFlexible, Scalable, Columnar Storage

Webログ

Appログ

センサー

CRM

ERP

RDBMS

TD Toolbelt

バルク   アップローダー

Treasure Agent

ストリーミング   ログコレクター

バッチ型分析

アドホック型分析

データ集計KPI

データ可視化・共有

分析ツール連携

他製品連携

SQL, Pig

RDBMS, Google Docs,AWS S3, FTP Server, etc.

Metric Insights, etc.

Tableau, Motion Board(予定) etc.

POS

分析エンジンHadoop, Treasure Query Accelerator

データ抽出REST API

ODBC/JDBC(SQL, Pig)

(Treasure Data Serviceの機能概要図)

バルクデータのアップロードの難しさ

> 入力データの正規化

> エラー処理

> メンテナンス

> 性能

入力データの正規化の難しさ

様々なフォーマット、データストレージ

> CSV, TSV, JSON, XML, MessagePack, SequenceFile, RCFile

> S3, Salesforce.com, Google Cloud Storage, BigQuery, Elasticsearch

> MySQL, PostgreSQL, Oracle, MS SQL Server, Amazon Redshift, Redis, MongoDB

→ 試行によるデータ正規化、オプションの増加

入力データの正規化の難しさ

データエンコーディングのバリエーション

> null、時刻、浮動小数点

> 改行、エスケープ、レコード/カラム区切り

> 文字コード、圧縮有無

→ 試行によるデータ正規化、オプションの増加

エラー処理の難しさ

例外値の扱い ネットワークエラーからの復旧 ディスクフルからの復旧 重複データ転送の回避

→ データバリデーション、リトライ、リジューム

メンテナンスの難しさ

継続的な動作の確保 データ転送要件変更への対応

→ ドキュメント、汎用化

性能の問題

転送データ量は通常増えていく 対象レコードも増えたりする それでも、いついつまでにアップロードしたい

→ 並列・分散処理

Server-side Bulk Loader

ユーザー

転送管理コンソールから実行

PlazmaDBWorker

管理コンソールからアクセス

14

HDFS

MySQL

Amazon S3

CSV Files

SequenceFile

Salesforce.com

Elasticsearch

Cassandra

Hive

Redis

Reliable framework :-)

Embulk アプローチ

15

> プラグインアーキテクチャ

> 入力データ正規化支援: guess, preview

> トランザクション制御

Embulk のアーキテクチャ

16

4種のプラグインとそれを組み上げるフレームワーク

1. Executor: 実行

2. Input: バルクデータのレコード群を取り込み

FileInput, Decoder, Parser: ファイル操作

3. Filter: レコードに対するデータ操作

4. Output: バルクデータのレコード群を出力

FileOutput, Encoder, Formatter: ファイル操作

Embulk をどう利用するか?

> 入力データ正規化支援: guess, preview

> 実行: run

> 繰り返し実行

入力データ正規化支援: guess, preview

> コアは Embulk の guess, preview

> アプリケーションサーバ上で実行

> chef でサーバを構築・デプロイ

実行: run, 繰り返し実行

> クエリ実行の仕組みと同様

> Worker が run を実行

> PlazmaDB へ直接書き込む output plugin

> 設定と前回の run で読んだファイル名を保存

使い方

$ cat seed.yml config: type: s3 access_key_id: XXXXXXXXXX secret_access_key: YYYYYYYYYY bucket: sample_bucket path_prefix: path/to/sample_file

> S3 上のファイルへのアクセス情報を宣言

2014/06/20

$ td connector:guess seed.yml -o load.yml $ cat load.yml config: type: s3 access_key_id: XXXXXXXXXX secret_access_key: YYYYYYYYYY bucket: sample_bucket path_prefix: path/to/sample_file parser: charset: UTF-8 newline: CRLF type: csv delimiter: ',' quote: '"' escape: '' skip_header_lines: 1 columns: - name: id type: long - name: company type: string - name: customer type: string - name: created_at type: timestamp format: '%Y-%m-%d %H:%M:%S'

使い方> Guess が正規化のオプションを推測

$ td connector:preview load.yml +-------+---------+----------+---------------------+ | id | company | customer | created_at | +-------+---------+----------+---------------------+ | 11200 | AA Inc. | David | 2015-03-31 06:12:37 | | 20313 | BB Imc. | Tom | 2015-04-01 01:00:07 | | 32132 | CC Inc. | Fernando | 2015-04-01 10:33:41 | | 40133 | DD Inc. | Cesar | 2015-04-02 05:12:32 | | 93133 | EE Inc. | Jake | 2015-04-02 14:11:13 | +-------+---------+----------+---------------------+

使い方> Preview で正規化されたデータを確認

$ td connector:issue load.yml --database td_sample_db --table td_sample_tbl --time-column created_at

使い方> Database, table を指定してバルクロード

今後について

> Timestamp Parser の性能向上

> 入力データストレージを増やす

> Map/Reduce Executor の利用

1. Distributed Systems Engineer

2. Integration Engineer

3. Software Engineer, MPP DBMS

4. Sales Engineer

5. Technical Support Engineer

(日本,東京,丸の内)

https://jobs.lever.co/treasure-data

We’re hiring!

ANALYTICS INFRASTRUCTURE. SIMPLIFIED IN THE CLOUD.

26