rubyによるデータ分析・活用 · rubyによるデータ分析・活用 sadayuki furuhashi...
TRANSCRIPT
![Page 1: Rubyによるデータ分析・活用 · Rubyによるデータ分析・活用 Sadayuki Furuhashi RubyWorld Conference 2018 RubyWorld Conference 2018 @frsyuki Senior Principal Engineer](https://reader030.vdocuments.net/reader030/viewer/2022040711/5e13a37083567c06c35e9ea4/html5/thumbnails/1.jpg)
Rubyによるデータ分析・活用
Sadayuki Furuhashi
RubyWorld Conference 2018
RubyWorld Conference 2018
@frsyuki
Senior Principal Engineer
![Page 2: Rubyによるデータ分析・活用 · Rubyによるデータ分析・活用 Sadayuki Furuhashi RubyWorld Conference 2018 RubyWorld Conference 2018 @frsyuki Senior Principal Engineer](https://reader030.vdocuments.net/reader030/viewer/2022040711/5e13a37083567c06c35e9ea4/html5/thumbnails/2.jpg)
About Sadayuki FuruhashiA founder of Treasure Data, Inc.
Located in Silicon Valley, USA.
OSS Hacker. Github: @frsyuki
OSS projects I initially designed:
![Page 3: Rubyによるデータ分析・活用 · Rubyによるデータ分析・活用 Sadayuki Furuhashi RubyWorld Conference 2018 RubyWorld Conference 2018 @frsyuki Senior Principal Engineer](https://reader030.vdocuments.net/reader030/viewer/2022040711/5e13a37083567c06c35e9ea4/html5/thumbnails/3.jpg)
It's like JSON. but fast and small.
![Page 4: Rubyによるデータ分析・活用 · Rubyによるデータ分析・活用 Sadayuki Furuhashi RubyWorld Conference 2018 RubyWorld Conference 2018 @frsyuki Senior Principal Engineer](https://reader030.vdocuments.net/reader030/viewer/2022040711/5e13a37083567c06c35e9ea4/html5/thumbnails/4.jpg)
✓ 各言語のエキスパート が開発プロジェクトを所有し、互いに緩く影響しつつ、 独自のアプローチで1つの仕様を設計・実装
✓ 世界各国 に広がる開発者(日本、アメリカ、フランス、オランダ、スウェーデン、インドネシア、…)
![Page 5: Rubyによるデータ分析・活用 · Rubyによるデータ分析・活用 Sadayuki Furuhashi RubyWorld Conference 2018 RubyWorld Conference 2018 @frsyuki Senior Principal Engineer](https://reader030.vdocuments.net/reader030/viewer/2022040711/5e13a37083567c06c35e9ea4/html5/thumbnails/5.jpg)
私とRuby
![Page 6: Rubyによるデータ分析・活用 · Rubyによるデータ分析・活用 Sadayuki Furuhashi RubyWorld Conference 2018 RubyWorld Conference 2018 @frsyuki Senior Principal Engineer](https://reader030.vdocuments.net/reader030/viewer/2022040711/5e13a37083567c06c35e9ea4/html5/thumbnails/6.jpg)
人生初の実用プログラム(高校2年)• 街でタンポポを採集し、遺伝子分析(電気泳動)で外来種か在来種かを判別
• 座標上にプロットし、ヒートマップを作る
• 在来種は田園部に多く、外来種は都市部に多いので、継続的に調査すると街の開発の歴史が分かる
• C++で1,000行くらい
![Page 7: Rubyによるデータ分析・活用 · Rubyによるデータ分析・活用 Sadayuki Furuhashi RubyWorld Conference 2018 RubyWorld Conference 2018 @frsyuki Senior Principal Engineer](https://reader030.vdocuments.net/reader030/viewer/2022040711/5e13a37083567c06c35e9ea4/html5/thumbnails/7.jpg)
![Page 8: Rubyによるデータ分析・活用 · Rubyによるデータ分析・活用 Sadayuki Furuhashi RubyWorld Conference 2018 RubyWorld Conference 2018 @frsyuki Senior Principal Engineer](https://reader030.vdocuments.net/reader030/viewer/2022040711/5e13a37083567c06c35e9ea4/html5/thumbnails/8.jpg)
人生初の実用プログラミング体験• 「プログラミングって難しい…」
• ポインタが分からない
• 動的メモリ確保の方法が分からない
• バイナリファイルの扱い方が分からない
• 画像の作り方が分からない
• スタック上に巨大な配列を確保
• SVG画像(XML)を生成(テキストだから大丈夫)
![Page 9: Rubyによるデータ分析・活用 · Rubyによるデータ分析・活用 Sadayuki Furuhashi RubyWorld Conference 2018 RubyWorld Conference 2018 @frsyuki Senior Principal Engineer](https://reader030.vdocuments.net/reader030/viewer/2022040711/5e13a37083567c06c35e9ea4/html5/thumbnails/9.jpg)
シェルスクリプトに傾倒(高校3年~大学1年)• シェルスクリプトが読めれば、
Linuxの起動プロセスを追える「一番最初はどうなっている?」
• 初期起動プロセスを書き換え、ディスクレスブートシステムを開発
• シェル(ash)スクリプトで1万行くらい
• 「プログラミングって面倒…」
VIVER
![Page 10: Rubyによるデータ分析・活用 · Rubyによるデータ分析・活用 Sadayuki Furuhashi RubyWorld Conference 2018 RubyWorld Conference 2018 @frsyuki Senior Principal Engineer](https://reader030.vdocuments.net/reader030/viewer/2022040711/5e13a37083567c06c35e9ea4/html5/thumbnails/10.jpg)
参考:Linuxの初期起動プロセス
initramfs
/init
SSDやDVDなどの記録媒体から読み出すか、ネットワーク経由でLinuxカーネルとinitramfsを取得し、メモリ上に展開する
/sbin/init
ファームウェア
ブートローダ
Linuxカーネル
UEFI, BIOS
GRUB, ISOLINUX, PXELINUX, etc.
initramfs内からドライバをロードし、記録媒体を使用可能にする
1.
(ハードウェア自動認識)
記録媒体を/sysrootにマウントする
2.
/と/sysrootを入れ替える (pivot_root)
3.
/sbin/initを起動4.
![Page 11: Rubyによるデータ分析・活用 · Rubyによるデータ分析・活用 Sadayuki Furuhashi RubyWorld Conference 2018 RubyWorld Conference 2018 @frsyuki Senior Principal Engineer](https://reader030.vdocuments.net/reader030/viewer/2022040711/5e13a37083567c06c35e9ea4/html5/thumbnails/11.jpg)
ディスクレスブートからP2Pに傾倒(大学1年)• /sysrootにマウントする記録媒体を、ネットワーク経由でサーバから読み出して起動する→SSDやDVDが無くても起動可能
• 起動したら記録媒体の一部をメモリ上に保存し、他のノードにも提供する
• 多くのノードが起動していくと、記録媒体の全体のコピーが完成し、最初のサーバがいなくなっても起動可能になる
• C++で1,300行くらい
• 独自の通信プロトコルを実装(大変)
![Page 12: Rubyによるデータ分析・活用 · Rubyによるデータ分析・活用 Sadayuki Furuhashi RubyWorld Conference 2018 RubyWorld Conference 2018 @frsyuki Senior Principal Engineer](https://reader030.vdocuments.net/reader030/viewer/2022040711/5e13a37083567c06c35e9ea4/html5/thumbnails/12.jpg)
私とRuby• 過去のプログラミング体験
• 「C++でプログラミングって難しい…」
• 「シェルスクリプトでプログラミングって面倒…」
• 「通信プロトコルの実装って大変…」
• 欲しかったプログラミング体験
• 「適切なプログラミング言語を適材適所で使用」 → 多言語プログラミング
• 「異なる言語で書かれたプログラム間でも、通信は簡単にしたい」 → 汎用の多言語間通信プロトコル「MessagePack」を開発
• 「最初はシンプルに書いて、性能や複雑な問題は後から考えたい」 → 「Rubyファーストプログラミング」
![Page 13: Rubyによるデータ分析・活用 · Rubyによるデータ分析・活用 Sadayuki Furuhashi RubyWorld Conference 2018 RubyWorld Conference 2018 @frsyuki Senior Principal Engineer](https://reader030.vdocuments.net/reader030/viewer/2022040711/5e13a37083567c06c35e9ea4/html5/thumbnails/13.jpg)
多言語分散プログラミングに傾倒(大学1年~3年)• kumofs
• 分散Key-value store
• プロトタイプ:RubyP2Pノード群:C++管理ツール群:Ruby通信:MessagePack
• LS4 • 分散オブジェクトストア
• 既存のHTTPサーバを流用。 ルーティングやレプリケーションなどの制御システム群をRubyで実装。
• 通信:MessagePack
![Page 14: Rubyによるデータ分析・活用 · Rubyによるデータ分析・活用 Sadayuki Furuhashi RubyWorld Conference 2018 RubyWorld Conference 2018 @frsyuki Senior Principal Engineer](https://reader030.vdocuments.net/reader030/viewer/2022040711/5e13a37083567c06c35e9ea4/html5/thumbnails/14.jpg)
![Page 15: Rubyによるデータ分析・活用 · Rubyによるデータ分析・活用 Sadayuki Furuhashi RubyWorld Conference 2018 RubyWorld Conference 2018 @frsyuki Senior Principal Engineer](https://reader030.vdocuments.net/reader030/viewer/2022040711/5e13a37083567c06c35e9ea4/html5/thumbnails/15.jpg)
Treasure Dataの設計と実装
![Page 16: Rubyによるデータ分析・活用 · Rubyによるデータ分析・活用 Sadayuki Furuhashi RubyWorld Conference 2018 RubyWorld Conference 2018 @frsyuki Senior Principal Engineer](https://reader030.vdocuments.net/reader030/viewer/2022040711/5e13a37083567c06c35e9ea4/html5/thumbnails/16.jpg)
Arm Treasure Data - Enterprise Customer Data Platform
Hiro YoshikawaCEO
Kaz OtaCTO
Sada FuruhashiChief Architect
Open source business veteran
Founder - world’s largest Hadoop group
Invented Fluentd, Messagepack
Total Records Stored
55 Trillion
New Records / second
6 Million
15 TrillionRecords Processed / day
新規レコード毎秒600万
毎日15兆レコードを処理
![Page 17: Rubyによるデータ分析・活用 · Rubyによるデータ分析・活用 Sadayuki Furuhashi RubyWorld Conference 2018 RubyWorld Conference 2018 @frsyuki Senior Principal Engineer](https://reader030.vdocuments.net/reader030/viewer/2022040711/5e13a37083567c06c35e9ea4/html5/thumbnails/17.jpg)
>_
創業当初のTreasure Data
import
& query
import query
API
CLI
![Page 18: Rubyによるデータ分析・活用 · Rubyによるデータ分析・活用 Sadayuki Furuhashi RubyWorld Conference 2018 RubyWorld Conference 2018 @frsyuki Senior Principal Engineer](https://reader030.vdocuments.net/reader030/viewer/2022040711/5e13a37083567c06c35e9ea4/html5/thumbnails/18.jpg)
>_
ジョブキューとWorkerの分離
import
& query
API
query
import query
Worker
Job queue
CLI
![Page 19: Rubyによるデータ分析・活用 · Rubyによるデータ分析・活用 Sadayuki Furuhashi RubyWorld Conference 2018 RubyWorld Conference 2018 @frsyuki Senior Principal Engineer](https://reader030.vdocuments.net/reader030/viewer/2022040711/5e13a37083567c06c35e9ea4/html5/thumbnails/19.jpg)
>_
JRubyからCRuby+jemallocへ移行
import
& query
API
query
import query
Worker
Job queue
CLI
![Page 20: Rubyによるデータ分析・活用 · Rubyによるデータ分析・活用 Sadayuki Furuhashi RubyWorld Conference 2018 RubyWorld Conference 2018 @frsyuki Senior Principal Engineer](https://reader030.vdocuments.net/reader030/viewer/2022040711/5e13a37083567c06c35e9ea4/html5/thumbnails/20.jpg)
>_
Web UIを追加 / インポートAPIを分離
import
query
API
query
import query
Worker
Job queue
Web UI
CLI
![Page 21: Rubyによるデータ分析・活用 · Rubyによるデータ分析・活用 Sadayuki Furuhashi RubyWorld Conference 2018 RubyWorld Conference 2018 @frsyuki Senior Principal Engineer](https://reader030.vdocuments.net/reader030/viewer/2022040711/5e13a37083567c06c35e9ea4/html5/thumbnails/21.jpg)
>_
メタデータシステムを追加 - PlazmaDB
import
query
API
query
import query
Worker
Job queue
Web UI
CLI
PlazmaDB
![Page 22: Rubyによるデータ分析・活用 · Rubyによるデータ分析・活用 Sadayuki Furuhashi RubyWorld Conference 2018 RubyWorld Conference 2018 @frsyuki Senior Principal Engineer](https://reader030.vdocuments.net/reader030/viewer/2022040711/5e13a37083567c06c35e9ea4/html5/thumbnails/22.jpg)
>_
対話型クエリエンジンを追加 - Impala
import
query
API
query
import query
Worker
Job queue
Web UI
CLI
PlazmaDB
Impala
![Page 23: Rubyによるデータ分析・活用 · Rubyによるデータ分析・活用 Sadayuki Furuhashi RubyWorld Conference 2018 RubyWorld Conference 2018 @frsyuki Senior Principal Engineer](https://reader030.vdocuments.net/reader030/viewer/2022040711/5e13a37083567c06c35e9ea4/html5/thumbnails/23.jpg)
>_
Impala から Presto に移行
import
query
API
query
import query
Worker
Job queue
Web UI
CLI
PlazmaDB
![Page 24: Rubyによるデータ分析・活用 · Rubyによるデータ分析・活用 Sadayuki Furuhashi RubyWorld Conference 2018 RubyWorld Conference 2018 @frsyuki Senior Principal Engineer](https://reader030.vdocuments.net/reader030/viewer/2022040711/5e13a37083567c06c35e9ea4/html5/thumbnails/24.jpg)
>_
BI向けの直接クエリAPIを追加
import
query
API
query
import query
Worker
Job queue
Web UI
CLI
Prestobase
BI ODBC/JDBC API PlazmaDB
![Page 25: Rubyによるデータ分析・活用 · Rubyによるデータ分析・活用 Sadayuki Furuhashi RubyWorld Conference 2018 RubyWorld Conference 2018 @frsyuki Senior Principal Engineer](https://reader030.vdocuments.net/reader030/viewer/2022040711/5e13a37083567c06c35e9ea4/html5/thumbnails/25.jpg)
>_
ブラウザから直接データ収集するAPIを追加
import
query
API
query
import query
Worker
Job queue
Web UI
CLI
Prestobase
BI ODBC/JDBC API
Web events Event-collect API
PlazmaDB
![Page 26: Rubyによるデータ分析・活用 · Rubyによるデータ分析・活用 Sadayuki Furuhashi RubyWorld Conference 2018 RubyWorld Conference 2018 @frsyuki Senior Principal Engineer](https://reader030.vdocuments.net/reader030/viewer/2022040711/5e13a37083567c06c35e9ea4/html5/thumbnails/26.jpg)
>_
バルクデータローダを汎用化 - Embulk
import
query
API
query
import query
Worker
Job queue
PlazmaDB
Web UI
CLI
Prestobase
BI ODBC/JDBC API
Web events Event-collect API
Data connector
![Page 27: Rubyによるデータ分析・活用 · Rubyによるデータ分析・活用 Sadayuki Furuhashi RubyWorld Conference 2018 RubyWorld Conference 2018 @frsyuki Senior Principal Engineer](https://reader030.vdocuments.net/reader030/viewer/2022040711/5e13a37083567c06c35e9ea4/html5/thumbnails/27.jpg)
>_
ワークフローエンジンを追加 - Digdag
import
query
API
query
import query
Worker
Job queue
PlazmaDB
Web UI
CLI
Prestobase
BI ODBC/JDBC API
Web events Event-collect API
Workflow
Data connector
![Page 28: Rubyによるデータ分析・活用 · Rubyによるデータ分析・活用 Sadayuki Furuhashi RubyWorld Conference 2018 RubyWorld Conference 2018 @frsyuki Senior Principal Engineer](https://reader030.vdocuments.net/reader030/viewer/2022040711/5e13a37083567c06c35e9ea4/html5/thumbnails/28.jpg)
変遷5 years
2 years
Now
![Page 29: Rubyによるデータ分析・活用 · Rubyによるデータ分析・活用 Sadayuki Furuhashi RubyWorld Conference 2018 RubyWorld Conference 2018 @frsyuki Senior Principal Engineer](https://reader030.vdocuments.net/reader030/viewer/2022040711/5e13a37083567c06c35e9ea4/html5/thumbnails/29.jpg)
まとめ
![Page 30: Rubyによるデータ分析・活用 · Rubyによるデータ分析・活用 Sadayuki Furuhashi RubyWorld Conference 2018 RubyWorld Conference 2018 @frsyuki Senior Principal Engineer](https://reader030.vdocuments.net/reader030/viewer/2022040711/5e13a37083567c06c35e9ea4/html5/thumbnails/30.jpg)
まとめ• 小さく始めて、着実に積み上げる
• 必要とされている物を、必要とされているときに作る
• 「学び終わってから作る」は不可能。「学びながら作る」「学ぶために作る」
• 大規模な分散システムも明日から作り始められる
• 大規模化は結果
![Page 31: Rubyによるデータ分析・活用 · Rubyによるデータ分析・活用 Sadayuki Furuhashi RubyWorld Conference 2018 RubyWorld Conference 2018 @frsyuki Senior Principal Engineer](https://reader030.vdocuments.net/reader030/viewer/2022040711/5e13a37083567c06c35e9ea4/html5/thumbnails/31.jpg)
Questions?