SlideShare a Scribd company logo
1 of 36
スキーマ付き分散ストリーム処理を実行可能な
FlinkSQLClientの紹介
2019/03/14
「Hadoop / Spark Conference Japan 2019」
Kimura, Sotaro(@kimutansk)
https://www.flickr.com/photos/andrewmalone/810684924/
Self Introduction
• Kimura, Sotaro(@kimutansk)
– Current
• Software Engineer @ dotData Japan
– Previous
• Data Engineer @ DWANGO Co.,Ltd.
• etc
– Favorite
• Stream data processing
• Kafka, Flink, Fluend, Spark, Pulsar etc…
https://flink.apache.org/
What is Flink?
• バッチ処理とストリーム処理に両対応した
分散処理フレームワーク
– ただし現状(1.7系)バッチとストリーム併用はできない
– 1.8系のリリースで併用が可能になる見込み(?)
• ウィンドウ処理などのいわゆる
「状態を持ったストリーム処理」が実行可能
What is Flink?
• 自前クラスタ、YARN、Mesos、Kubernates等
多様な環境で動作可能
– Amazon Kinesis Data Analytics上でも動作
• 並列度を増す事で兆/日オーダーにもスケール可能
• 非同期Snapshot/CheckPointの機構を持ち
メモリのアクセス速度を活用して高速化
https://flink.apache.org/
What is Flink SQL Client?
• Flinkのアプリケーションを
以下で起動できるCLIツール
– Flinkクラスタへの接続設定(flink-conf.yaml)
– テーブル・スキーマ定義(sql-client-default.yaml)
– SQL(一部独自構文あり)
• 起動方法はFlinkインストール後
yamlファイルを設定し、以下コマンドを実行
$ ${FLINK_HOME}/bin/sql-client.sh embedded
…(Flinkロゴ)
Flink SQL>
SQL Client Execute Example
SlideShare上ではアニメーションが動作しないため、
以下よりご覧ください。
https://ci.apache.org/projects/flink/flink-docs-stable/dev/table/sqlClient.html
SQL Clients Execution Flow
• Flink Standalone Cluster + SELECT
SQLClient JobManager
TaskManager
TaskManager
Data Source
SQL Clients Execution Flow
• Flink Standalone Cluster + SELECT
SQLClient JobManager
TaskManager
TaskManager
Data Source
SQLを解釈してジョブを生成し、
Submit
SQL Clients Execution Flow
• Flink Standalone Cluster + SELECT
SQLClient JobManager
TaskManager
TaskManager
Data Source
ジョブの並列度を元にTaskManagerに配
分
SQL Clients Execution Flow
• Flink Standalone Cluster + SELECT
SQLClient JobManager
TaskManager
TaskManager
Data Source
Task
Task
実際に実行するTaskを生成
SQL Clients Execution Flow
• Flink Standalone Cluster + SELECT
SQLClient JobManager
TaskManager
TaskManager
Data Source
Task
Task
処理対象のデータをData Sourceから取得
SQL Clients Execution Flow
• Flink Standalone Cluster + Select
SQLClient JobManager
TaskManager
TaskManager
Data Source
Task
Task
結果を継続的に取得し、表示
SQL Clients Execution Flow
• Flink Standalone Cluster + INSERT INTO
SQLClient JobManager
TaskManager
TaskManager
Data Source
Data Destination
SQLを解釈してジョブを生成し、
Submit
SQL Clients Execution Flow
• Flink Standalone Cluster + INSERT INTO
SQLClient JobManager
TaskManager
TaskManager
Data Source
Data Destination
SQLを解釈してジョブを生成し、Submit
Submitが終わった段階で以下の情報を表示し、
次のSQLが入力可能になる
- クラスタ情報
- JobID
- Web UI URL
SQL Clients Execution Flow
• Flink Standalone Cluster + INSERT INTO
SQLClient JobManager
TaskManager
TaskManager
Data Source
Data Destination
ジョブの並列度を元にTaskManagerに配
分
SQL Clients Execution Flow
• Flink Standalone Cluster + INSERT INTO
SQLClient JobManager
TaskManager
TaskManager
Data Source
Data Destination
Task
実際に実行するTaskを生成
Task
SQL Clients Execution Flow
• Flink Standalone Cluster + INSERT INTO
SQLClient JobManager
TaskManager
TaskManager
Data Source
Data Destination
Task
Task
Submit完了後にジョブが動作し、
Data Sourceからデータを取得して処理し、
Data Destinationへの投入が継続
SQL Client’s major functions
• Same as Flink SQL
– つまり、以下のような機能を一通り利用可能
• ANSI SQLに従ったSQLの機能(一部制限あり)
• Window Function
– TUMBLE、HOP、SESSION
Processing/EventTimeの使い分け可
• Temporal Table Function
– 主キー・時刻に対応したSnapshotを取得するための機能
• MATCH_RECOGNIZE
– 特定のパターンを持つデータ列が来た場合に検知出力可能
» 例:あるカラムがA > B > Cという順になった際に検知!
• UDF定義
Compatibility of SQL/SQL Client
• Flink Tableによって以下機能群は共通の実体を持つ
– Flink Table API
– Flink SQL
– Flink SQL Client
• Flinkはデータの入出力元であるSourceやSinkを
Tableとして抽象化し、共通のIFでアクセス
– Tableを介することで、SQLでの処理やスキーマや型を前
提としたアプリケーションの記述が可能となる
• もちろん、バッチとストリームでのどちらで利用可能などの
制約は受ける
Flink Table Data Processing
• Flink Table APIでの記述
// Table API Select
val orders = tableEnv.scan("Orders")
val revenue = orders
.filter('cCountry === "FRANCE")
.groupBy('cID, 'cName)
.select('cID, 'cName, 'revenue.sum AS 'revSum)
// Table API Update
// SinkTable Objectに投入
revenue.writeToSink(sinkRevenueFrance)
// Catalog中のTableに投入
revenue.insertInto("RevenueFrance")
Flink Table Data Processing
• Flink SQLでの記述(SQLClientの場合SQLのみ)
// SQL SELECT
val revenue = tableEnv.sqlQuery("""
|SELECT cID, cName, SUM(revenue) AS revSum
|FROM Orders WHERE cCountry = 'FRANCE'
|GROUP BY cID, cName
""".stripMargin)
// SQL UPDATE
tableEnv.sqlUpdate("""
|INSERT INTO RevenueFrance
|SELECT cID, cName, SUM(revenue) AS revSum
|FROM Orders WHERE cCountry = 'FRANCE'
|GROUP BY cID, cName
""".stripMargin)
Flink Table related Objects
• Tableの上位にEnvironmentが存在
• Environment
• ※SparkでいうSparkSessionのようなものと考えればいい
– Table(DataCatalog)管理(自前登録/外部取込)
– Table API / SQLの実行インタフェース
– UDFの登録 / 管理
– DataStream / DataTableをTableに変換
• ※SparkでいうRDDのようなものと考えれば(略
Flink Table related Objects
• Tableは主に以下3つの要素を保持
– Connector
– Format
– Table Schema
• ※コンポーネント次第で何が組み合わせ可能かも変化
• これらは全てコードとYAMLファイル両方で定義可
– コード
• Flink Table API、Flink SQLで使用
– YAML
• Flink SQL Clientで使用
Flink Table related Objects
• Connector
– 端的に外部システムに接続するためのコネクタ
• Source / Sinkのどちらに対応するかはオブジェクトによる
– 例えば、KafkaConnectorであれば
クラスタ情報とTopic名を保持
– 例えば、FileSystemConnectorであれば
パスやファイルシステム定義を保持
– 後述のFormat / TableSchemaを内包するケースもある
– 例
• Kafka, Cassandra, Kinesis Streams, Elasticsearch
• HDFS, RabbitMQ, Apache NiFi, Twitter etc
Flink Table related Objects
• Connector定義例(コード)
// declare the external system to connect to
tableEnvironment
.connect(
new Kafka()
.version("0.10")
.topic("test-input")
.startFromEarliest()
.property("zookeeper.connect", "localhost:2181")
.property("bootstrap.servers", "localhost:9092")
)
Flink Table related Objects
• Connector定義例(YAML)
# declare the external system to connect to
connector:
type: kafka
version: "0.10"
topic: test-input
startup-mode: earliest-offset
properties:
- key: zookeeper.connect
value: localhost:2181
- key: bootstrap.servers
value: localhost:9092
Flink Table related Objects
• Format
– 端的に格納データのフォーマット・スキーマ変換器
• 複数のフォーマットに対応するための機構
– 例えば、外部システムにはCSVや、JSON、Avro等
様々なフォーマットでデータが保存されているだろう
– 一部の外部システムにおいては、
認識するためにFormat Schemaの設定も必要だろう
• ※非常に紛らわしいですが後述のTable Schemaとは別物
– 例
• Parquet, CSV
• Avro, JSON, LTSV etc
Flink Table related Objects
• Format定義例(コード)
// declare a format for this system
.withFormat(
new Avro()
.avroSchema(
"{" +
" ¥"namespace¥": ¥"org.myorganization¥"," +
" ¥"type¥": ¥"record¥"," +
" ¥"name¥": ¥"UserMessage¥"," +
" ¥"fields¥": [" +
" {¥"name¥": ¥"timestamp¥", ¥"type¥": ¥"string¥"}," +
" {¥"name¥": ¥"user¥", ¥"type¥": ¥"long¥"}," +
" {¥"name¥": ¥"message¥", ¥"type¥": [¥"string¥", ¥"null¥"]}" +
" ]"...
Flink Table related Objects
• Format定義例(YAML)
# declare a format for this system
format:
type: avro
avro-schema: >
{
"namespace": "org.myorganization",
"type": "record",
"name": "UserMessage",
"fields": [
{"name": "ts", "type": "string"},
{"name": "user", "type": "long"},
{"name": "message", "type": ["string", "null"]}...
Flink Table related Objects
• Table Schema
– 実際にTable API, SQLでアクセスする際のSchema
– Table Schemaによって、Format Schemaに定義された
columnAカラムをテーブル上ではCOLIMN_A
で使用可能にするなどのマッピングが可能
– Table Schemaを定義する際に時刻カラムを
EventTime/ProcessingTimeとして入れ込める
– ※Table Schema自体のバリエーションはない
Flink Table related Objects
• Table Schema定義例(コード)
// declare the schema of the table
.withSchema(
new Schema()
.field("rowtime", Types.SQL_TIMESTAMP)
.rowtime(new Rowtime()
.timestampsFromField("ts")
.watermarksPeriodicBounded(60000)
)
.field("user", Types.LONG)
.field("message", Types.STRING)
)
Flink Table related Objects
• Table Schema定義例(YAML)
# declare the schema of the table
schema:
- name: rowtime
type: TIMESTAMP
rowtime:
timestamps:
type: from-field
from: ts
watermarks:
type: periodic-bounded
delay: "60000"
- name: user (¥n) type: BIGINT
- name: message (¥n) type: VARCHAR
Why can we use dual setting?
• 両方式で宣言した設定項目は
TableFactoryというコンポーネントにわたる
– FactoryはソースとYAMLの両方に対応が必要
• TableFactoryは与えられた設定を基に、
SourceTable/SinkTableを
関連オブジェクトも含めて生成する
• TableFactoryはJavaのServiceLoaderでロード
– YAMLでの「type」で特定できる必要がある
Why are you thinking of Flink SQL?
• ここまで聞いて、
「KSQLでいいんじゃね?」
と思う方もいらっしゃるかと思います
• 私の考えるFlinkSQL Clientの利点
– SQL ClientのみでKafka以外への入出力が可能
• Kafka Connectorで可能だが、KSQLと比較していた段階で、
KSQLからKafkaConnectorを制御できず・・
Conclusion
• Flinkは状態付きストリーム処理も可能な
分散処理フレームワーク
• SQL ClientはSQLとYAML定義のみで
Flink Applicationが起動可能なCLIツール
• Flink Table API, Flink SQL, Flink SQL Clientは
Flink Tableを扱うためのIF
• KSQLと比較すると単体で多様なシステムと
入出力を行えるのが利点
Thank you for your attention!
https://www.flickr.com/photos/savannahcorps/7409364642

More Related Content

What's hot

Deep Dive into Spark SQL with Advanced Performance Tuning
Deep Dive into Spark SQL with Advanced Performance TuningDeep Dive into Spark SQL with Advanced Performance Tuning
Deep Dive into Spark SQL with Advanced Performance TuningTakuya UESHIN
 
ログ解析基盤におけるストリーム処理パイプラインについて
ログ解析基盤におけるストリーム処理パイプラインについてログ解析基盤におけるストリーム処理パイプラインについて
ログ解析基盤におけるストリーム処理パイプラインについてcyberagent
 
Tez on EMRを試してみた
Tez on EMRを試してみたTez on EMRを試してみた
Tez on EMRを試してみたSatoshi Noto
 
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 TokyoPrestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 TokyoTreasure Data, Inc.
 
Sparkパフォーマンス検証
Sparkパフォーマンス検証Sparkパフォーマンス検証
Sparkパフォーマンス検証BrainPad Inc.
 
Kafkaを活用するためのストリーム処理の基本
Kafkaを活用するためのストリーム処理の基本Kafkaを活用するためのストリーム処理の基本
Kafkaを活用するためのストリーム処理の基本Sotaro Kimura
 
Spot Instance + Spark + MLlibで実現する簡単低コスト機械学習
Spot Instance + Spark + MLlibで実現する簡単低コスト機械学習Spot Instance + Spark + MLlibで実現する簡単低コスト機械学習
Spot Instance + Spark + MLlibで実現する簡単低コスト機械学習Katsushi Yamashita
 
Modern stream processing by Spark Structured Streaming
Modern stream processing by Spark Structured StreamingModern stream processing by Spark Structured Streaming
Modern stream processing by Spark Structured StreamingSotaro Kimura
 
スキーマつきストリーム データ処理基盤、 Confluent Platformとは?
スキーマつきストリーム データ処理基盤、 Confluent Platformとは?スキーマつきストリーム データ処理基盤、 Confluent Platformとは?
スキーマつきストリーム データ処理基盤、 Confluent Platformとは?Sotaro Kimura
 
TokyoWebminig カジュアルなHadoop
TokyoWebminig カジュアルなHadoopTokyoWebminig カジュアルなHadoop
TokyoWebminig カジュアルなHadoopTeruo Kawasaki
 
2019.03.19 Deep Dive into Spark SQL with Advanced Performance Tuning
2019.03.19 Deep Dive into Spark SQL with Advanced Performance Tuning2019.03.19 Deep Dive into Spark SQL with Advanced Performance Tuning
2019.03.19 Deep Dive into Spark SQL with Advanced Performance TuningTakuya UESHIN
 
Hive on Spark を活用した高速データ分析 - Hadoop / Spark Conference Japan 2016
Hive on Spark を活用した高速データ分析 - Hadoop / Spark Conference Japan 2016Hive on Spark を活用した高速データ分析 - Hadoop / Spark Conference Japan 2016
Hive on Spark を活用した高速データ分析 - Hadoop / Spark Conference Japan 2016Nagato Kasaki
 
Evolution of Impala #hcj2014
Evolution of Impala #hcj2014Evolution of Impala #hcj2014
Evolution of Impala #hcj2014Cloudera Japan
 
A Benchmark Test on Presto, Spark Sql and Hive on Tez
A Benchmark Test on Presto, Spark Sql and Hive on TezA Benchmark Test on Presto, Spark Sql and Hive on Tez
A Benchmark Test on Presto, Spark Sql and Hive on TezGw Liu
 
「Oracle Database + Java + Linux」 環境における性能問題の調査手法 ~ミッションクリティカルシステムの現場から~ Part.1
「Oracle Database + Java + Linux」環境における性能問題の調査手法 ~ミッションクリティカルシステムの現場から~ Part.1「Oracle Database + Java + Linux」環境における性能問題の調査手法 ~ミッションクリティカルシステムの現場から~ Part.1
「Oracle Database + Java + Linux」 環境における性能問題の調査手法 ~ミッションクリティカルシステムの現場から~ Part.1Shogo Wakayama
 
Hive on Spark の設計指針を読んでみた
Hive on Spark の設計指針を読んでみたHive on Spark の設計指針を読んでみた
Hive on Spark の設計指針を読んでみたRecruit Technologies
 
Impala データサイエンティストのための 高速大規模分散基盤 #tokyowebmining
Impala データサイエンティストのための 高速大規模分散基盤 #tokyowebminingImpala データサイエンティストのための 高速大規模分散基盤 #tokyowebmining
Impala データサイエンティストのための 高速大規模分散基盤 #tokyowebminingSho Shimauchi
 

What's hot (20)

Deep Dive into Spark SQL with Advanced Performance Tuning
Deep Dive into Spark SQL with Advanced Performance TuningDeep Dive into Spark SQL with Advanced Performance Tuning
Deep Dive into Spark SQL with Advanced Performance Tuning
 
Hiveを高速化するLLAP
Hiveを高速化するLLAPHiveを高速化するLLAP
Hiveを高速化するLLAP
 
ログ解析基盤におけるストリーム処理パイプラインについて
ログ解析基盤におけるストリーム処理パイプラインについてログ解析基盤におけるストリーム処理パイプラインについて
ログ解析基盤におけるストリーム処理パイプラインについて
 
Tez on EMRを試してみた
Tez on EMRを試してみたTez on EMRを試してみた
Tez on EMRを試してみた
 
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 TokyoPrestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
 
Sparkパフォーマンス検証
Sparkパフォーマンス検証Sparkパフォーマンス検証
Sparkパフォーマンス検証
 
hscj2019_ishizaki_public
hscj2019_ishizaki_publichscj2019_ishizaki_public
hscj2019_ishizaki_public
 
噛み砕いてKafka Streams #kafkajp
噛み砕いてKafka Streams #kafkajp噛み砕いてKafka Streams #kafkajp
噛み砕いてKafka Streams #kafkajp
 
Kafkaを活用するためのストリーム処理の基本
Kafkaを活用するためのストリーム処理の基本Kafkaを活用するためのストリーム処理の基本
Kafkaを活用するためのストリーム処理の基本
 
Spot Instance + Spark + MLlibで実現する簡単低コスト機械学習
Spot Instance + Spark + MLlibで実現する簡単低コスト機械学習Spot Instance + Spark + MLlibで実現する簡単低コスト機械学習
Spot Instance + Spark + MLlibで実現する簡単低コスト機械学習
 
Modern stream processing by Spark Structured Streaming
Modern stream processing by Spark Structured StreamingModern stream processing by Spark Structured Streaming
Modern stream processing by Spark Structured Streaming
 
スキーマつきストリーム データ処理基盤、 Confluent Platformとは?
スキーマつきストリーム データ処理基盤、 Confluent Platformとは?スキーマつきストリーム データ処理基盤、 Confluent Platformとは?
スキーマつきストリーム データ処理基盤、 Confluent Platformとは?
 
TokyoWebminig カジュアルなHadoop
TokyoWebminig カジュアルなHadoopTokyoWebminig カジュアルなHadoop
TokyoWebminig カジュアルなHadoop
 
2019.03.19 Deep Dive into Spark SQL with Advanced Performance Tuning
2019.03.19 Deep Dive into Spark SQL with Advanced Performance Tuning2019.03.19 Deep Dive into Spark SQL with Advanced Performance Tuning
2019.03.19 Deep Dive into Spark SQL with Advanced Performance Tuning
 
Hive on Spark を活用した高速データ分析 - Hadoop / Spark Conference Japan 2016
Hive on Spark を活用した高速データ分析 - Hadoop / Spark Conference Japan 2016Hive on Spark を活用した高速データ分析 - Hadoop / Spark Conference Japan 2016
Hive on Spark を活用した高速データ分析 - Hadoop / Spark Conference Japan 2016
 
Evolution of Impala #hcj2014
Evolution of Impala #hcj2014Evolution of Impala #hcj2014
Evolution of Impala #hcj2014
 
A Benchmark Test on Presto, Spark Sql and Hive on Tez
A Benchmark Test on Presto, Spark Sql and Hive on TezA Benchmark Test on Presto, Spark Sql and Hive on Tez
A Benchmark Test on Presto, Spark Sql and Hive on Tez
 
「Oracle Database + Java + Linux」 環境における性能問題の調査手法 ~ミッションクリティカルシステムの現場から~ Part.1
「Oracle Database + Java + Linux」環境における性能問題の調査手法 ~ミッションクリティカルシステムの現場から~ Part.1「Oracle Database + Java + Linux」環境における性能問題の調査手法 ~ミッションクリティカルシステムの現場から~ Part.1
「Oracle Database + Java + Linux」 環境における性能問題の調査手法 ~ミッションクリティカルシステムの現場から~ Part.1
 
Hive on Spark の設計指針を読んでみた
Hive on Spark の設計指針を読んでみたHive on Spark の設計指針を読んでみた
Hive on Spark の設計指針を読んでみた
 
Impala データサイエンティストのための 高速大規模分散基盤 #tokyowebmining
Impala データサイエンティストのための 高速大規模分散基盤 #tokyowebminingImpala データサイエンティストのための 高速大規模分散基盤 #tokyowebmining
Impala データサイエンティストのための 高速大規模分散基盤 #tokyowebmining
 

Similar to スキーマ 付き 分散ストリーム処理 を実行可能な FlinkSQLClient の紹介

Jjug springセッション
Jjug springセッションJjug springセッション
Jjug springセッションYuichi Hasegawa
 
20021127 ku-librarians勉強会 #38 : Where can I go? : OpenURLによる状況判断型リンク(SFXを中心として)
20021127 ku-librarians勉強会 #38 : Where can I go? : OpenURLによる状況判断型リンク(SFXを中心として)20021127 ku-librarians勉強会 #38 : Where can I go? : OpenURLによる状況判断型リンク(SFXを中心として)
20021127 ku-librarians勉強会 #38 : Where can I go? : OpenURLによる状況判断型リンク(SFXを中心として)kulibrarians
 
クラウド開発に役立つ OSS あれこれ
クラウド開発に役立つ OSS あれこれクラウド開発に役立つ OSS あれこれ
クラウド開発に役立つ OSS あれこれMasataka MIZUNO
 
Object-Funcational Analysis and design
Object-Funcational Analysis and designObject-Funcational Analysis and design
Object-Funcational Analysis and designTomoharu ASAMI
 
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門Daiyu Hatakeyama
 
Scalaz-StreamによるFunctional Reactive Programming
Scalaz-StreamによるFunctional Reactive ProgrammingScalaz-StreamによるFunctional Reactive Programming
Scalaz-StreamによるFunctional Reactive ProgrammingTomoharu ASAMI
 
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標Tomoharu ASAMI
 
Scalaの現状と課題
Scalaの現状と課題Scalaの現状と課題
Scalaの現状と課題Kota Mizushima
 
Qlik ReplicateでApache Kafkaをターゲットとして使用する
Qlik ReplicateでApache Kafkaをターゲットとして使用するQlik ReplicateでApache Kafkaをターゲットとして使用する
Qlik ReplicateでApache Kafkaをターゲットとして使用するQlikPresalesJapan
 
LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境
LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境
LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境Shinsuke Sugaya
 
AWSマイスターシリーズReloaded(AWS Beanstalk)
AWSマイスターシリーズReloaded(AWS Beanstalk)AWSマイスターシリーズReloaded(AWS Beanstalk)
AWSマイスターシリーズReloaded(AWS Beanstalk)Akio Katayama
 
20120416 aws meister-reloaded-aws-elasticbeanstalk-public
20120416 aws meister-reloaded-aws-elasticbeanstalk-public20120416 aws meister-reloaded-aws-elasticbeanstalk-public
20120416 aws meister-reloaded-aws-elasticbeanstalk-publicAmazon Web Services Japan
 
Azure Cosmos DB を使った高速分散アプリケーションの設計パターン
Azure Cosmos DB を使った高速分散アプリケーションの設計パターンAzure Cosmos DB を使った高速分散アプリケーションの設計パターン
Azure Cosmos DB を使った高速分散アプリケーションの設計パターンKazuyuki Miyake
 
Enter the-dolphine
Enter the-dolphineEnter the-dolphine
Enter the-dolphineMikiya Okuno
 
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方linzhixing
 

Similar to スキーマ 付き 分散ストリーム処理 を実行可能な FlinkSQLClient の紹介 (20)

Jjug springセッション
Jjug springセッションJjug springセッション
Jjug springセッション
 
20021127 ku-librarians勉強会 #38 : Where can I go? : OpenURLによる状況判断型リンク(SFXを中心として)
20021127 ku-librarians勉強会 #38 : Where can I go? : OpenURLによる状況判断型リンク(SFXを中心として)20021127 ku-librarians勉強会 #38 : Where can I go? : OpenURLによる状況判断型リンク(SFXを中心として)
20021127 ku-librarians勉強会 #38 : Where can I go? : OpenURLによる状況判断型リンク(SFXを中心として)
 
クラウド開発に役立つ OSS あれこれ
クラウド開発に役立つ OSS あれこれクラウド開発に役立つ OSS あれこれ
クラウド開発に役立つ OSS あれこれ
 
Object-Funcational Analysis and design
Object-Funcational Analysis and designObject-Funcational Analysis and design
Object-Funcational Analysis and design
 
HTML5&API総まくり
HTML5&API総まくりHTML5&API総まくり
HTML5&API総まくり
 
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
 
PHP on Cloud
PHP on CloudPHP on Cloud
PHP on Cloud
 
Scalaz-StreamによるFunctional Reactive Programming
Scalaz-StreamによるFunctional Reactive ProgrammingScalaz-StreamによるFunctional Reactive Programming
Scalaz-StreamによるFunctional Reactive Programming
 
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
 
Scalaの現状と課題
Scalaの現状と課題Scalaの現状と課題
Scalaの現状と課題
 
Qlik ReplicateでApache Kafkaをターゲットとして使用する
Qlik ReplicateでApache Kafkaをターゲットとして使用するQlik ReplicateでApache Kafkaをターゲットとして使用する
Qlik ReplicateでApache Kafkaをターゲットとして使用する
 
LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境
LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境
LastaFluteに移行したFessとElasticsearch+ESFluteによるDBFlute環境
 
HTML5最新動向
HTML5最新動向HTML5最新動向
HTML5最新動向
 
Startup JavaScript
Startup JavaScriptStartup JavaScript
Startup JavaScript
 
AWSマイスターシリーズReloaded(AWS Beanstalk)
AWSマイスターシリーズReloaded(AWS Beanstalk)AWSマイスターシリーズReloaded(AWS Beanstalk)
AWSマイスターシリーズReloaded(AWS Beanstalk)
 
20120416 aws meister-reloaded-aws-elasticbeanstalk-public
20120416 aws meister-reloaded-aws-elasticbeanstalk-public20120416 aws meister-reloaded-aws-elasticbeanstalk-public
20120416 aws meister-reloaded-aws-elasticbeanstalk-public
 
Azure Cosmos DB を使った高速分散アプリケーションの設計パターン
Azure Cosmos DB を使った高速分散アプリケーションの設計パターンAzure Cosmos DB を使った高速分散アプリケーションの設計パターン
Azure Cosmos DB を使った高速分散アプリケーションの設計パターン
 
Enter the-dolphine
Enter the-dolphineEnter the-dolphine
Enter the-dolphine
 
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
 
PostgreSQL 12の話
PostgreSQL 12の話PostgreSQL 12の話
PostgreSQL 12の話
 

More from Sotaro Kimura

Custom management apps for Kafka
Custom management apps for KafkaCustom management apps for Kafka
Custom management apps for KafkaSotaro Kimura
 
Kinesis Analyticsの適用できない用途と、Kinesis Firehoseの苦労話
Kinesis Analyticsの適用できない用途と、Kinesis Firehoseの苦労話Kinesis Analyticsの適用できない用途と、Kinesis Firehoseの苦労話
Kinesis Analyticsの適用できない用途と、Kinesis Firehoseの苦労話Sotaro Kimura
 
Stream dataprocessing101
Stream dataprocessing101Stream dataprocessing101
Stream dataprocessing101Sotaro Kimura
 
Apache NiFiと 他プロダクトのつなぎ方
Apache NiFiと他プロダクトのつなぎ方Apache NiFiと他プロダクトのつなぎ方
Apache NiFiと 他プロダクトのつなぎ方Sotaro Kimura
 
Hadoop基盤上のETL構築実践例 ~多様なデータをどう扱う?~
Hadoop基盤上のETL構築実践例 ~多様なデータをどう扱う?~Hadoop基盤上のETL構築実践例 ~多様なデータをどう扱う?~
Hadoop基盤上のETL構築実践例 ~多様なデータをどう扱う?~Sotaro Kimura
 
JVM上でのストリーム処理エンジンの変遷
JVM上でのストリーム処理エンジンの変遷JVM上でのストリーム処理エンジンの変遷
JVM上でのストリーム処理エンジンの変遷Sotaro Kimura
 
Gearpump, akka based Distributed Reactive Realtime Engine
Gearpump, akka based Distributed Reactive Realtime EngineGearpump, akka based Distributed Reactive Realtime Engine
Gearpump, akka based Distributed Reactive Realtime EngineSotaro Kimura
 
リアルタイム処理エンジン Gearpumpの紹介
リアルタイム処理エンジンGearpumpの紹介リアルタイム処理エンジンGearpumpの紹介
リアルタイム処理エンジン Gearpumpの紹介Sotaro Kimura
 

More from Sotaro Kimura (8)

Custom management apps for Kafka
Custom management apps for KafkaCustom management apps for Kafka
Custom management apps for Kafka
 
Kinesis Analyticsの適用できない用途と、Kinesis Firehoseの苦労話
Kinesis Analyticsの適用できない用途と、Kinesis Firehoseの苦労話Kinesis Analyticsの適用できない用途と、Kinesis Firehoseの苦労話
Kinesis Analyticsの適用できない用途と、Kinesis Firehoseの苦労話
 
Stream dataprocessing101
Stream dataprocessing101Stream dataprocessing101
Stream dataprocessing101
 
Apache NiFiと 他プロダクトのつなぎ方
Apache NiFiと他プロダクトのつなぎ方Apache NiFiと他プロダクトのつなぎ方
Apache NiFiと 他プロダクトのつなぎ方
 
Hadoop基盤上のETL構築実践例 ~多様なデータをどう扱う?~
Hadoop基盤上のETL構築実践例 ~多様なデータをどう扱う?~Hadoop基盤上のETL構築実践例 ~多様なデータをどう扱う?~
Hadoop基盤上のETL構築実践例 ~多様なデータをどう扱う?~
 
JVM上でのストリーム処理エンジンの変遷
JVM上でのストリーム処理エンジンの変遷JVM上でのストリーム処理エンジンの変遷
JVM上でのストリーム処理エンジンの変遷
 
Gearpump, akka based Distributed Reactive Realtime Engine
Gearpump, akka based Distributed Reactive Realtime EngineGearpump, akka based Distributed Reactive Realtime Engine
Gearpump, akka based Distributed Reactive Realtime Engine
 
リアルタイム処理エンジン Gearpumpの紹介
リアルタイム処理エンジンGearpumpの紹介リアルタイム処理エンジンGearpumpの紹介
リアルタイム処理エンジン Gearpumpの紹介
 

スキーマ 付き 分散ストリーム処理 を実行可能な FlinkSQLClient の紹介

  • 1. スキーマ付き分散ストリーム処理を実行可能な FlinkSQLClientの紹介 2019/03/14 「Hadoop / Spark Conference Japan 2019」 Kimura, Sotaro(@kimutansk) https://www.flickr.com/photos/andrewmalone/810684924/
  • 2. Self Introduction • Kimura, Sotaro(@kimutansk) – Current • Software Engineer @ dotData Japan – Previous • Data Engineer @ DWANGO Co.,Ltd. • etc – Favorite • Stream data processing • Kafka, Flink, Fluend, Spark, Pulsar etc…
  • 3. https://flink.apache.org/ What is Flink? • バッチ処理とストリーム処理に両対応した 分散処理フレームワーク – ただし現状(1.7系)バッチとストリーム併用はできない – 1.8系のリリースで併用が可能になる見込み(?) • ウィンドウ処理などのいわゆる 「状態を持ったストリーム処理」が実行可能
  • 4. What is Flink? • 自前クラスタ、YARN、Mesos、Kubernates等 多様な環境で動作可能 – Amazon Kinesis Data Analytics上でも動作 • 並列度を増す事で兆/日オーダーにもスケール可能 • 非同期Snapshot/CheckPointの機構を持ち メモリのアクセス速度を活用して高速化 https://flink.apache.org/
  • 5. What is Flink SQL Client? • Flinkのアプリケーションを 以下で起動できるCLIツール – Flinkクラスタへの接続設定(flink-conf.yaml) – テーブル・スキーマ定義(sql-client-default.yaml) – SQL(一部独自構文あり) • 起動方法はFlinkインストール後 yamlファイルを設定し、以下コマンドを実行 $ ${FLINK_HOME}/bin/sql-client.sh embedded …(Flinkロゴ) Flink SQL>
  • 6. SQL Client Execute Example SlideShare上ではアニメーションが動作しないため、 以下よりご覧ください。 https://ci.apache.org/projects/flink/flink-docs-stable/dev/table/sqlClient.html
  • 7. SQL Clients Execution Flow • Flink Standalone Cluster + SELECT SQLClient JobManager TaskManager TaskManager Data Source
  • 8. SQL Clients Execution Flow • Flink Standalone Cluster + SELECT SQLClient JobManager TaskManager TaskManager Data Source SQLを解釈してジョブを生成し、 Submit
  • 9. SQL Clients Execution Flow • Flink Standalone Cluster + SELECT SQLClient JobManager TaskManager TaskManager Data Source ジョブの並列度を元にTaskManagerに配 分
  • 10. SQL Clients Execution Flow • Flink Standalone Cluster + SELECT SQLClient JobManager TaskManager TaskManager Data Source Task Task 実際に実行するTaskを生成
  • 11. SQL Clients Execution Flow • Flink Standalone Cluster + SELECT SQLClient JobManager TaskManager TaskManager Data Source Task Task 処理対象のデータをData Sourceから取得
  • 12. SQL Clients Execution Flow • Flink Standalone Cluster + Select SQLClient JobManager TaskManager TaskManager Data Source Task Task 結果を継続的に取得し、表示
  • 13. SQL Clients Execution Flow • Flink Standalone Cluster + INSERT INTO SQLClient JobManager TaskManager TaskManager Data Source Data Destination SQLを解釈してジョブを生成し、 Submit
  • 14. SQL Clients Execution Flow • Flink Standalone Cluster + INSERT INTO SQLClient JobManager TaskManager TaskManager Data Source Data Destination SQLを解釈してジョブを生成し、Submit Submitが終わった段階で以下の情報を表示し、 次のSQLが入力可能になる - クラスタ情報 - JobID - Web UI URL
  • 15. SQL Clients Execution Flow • Flink Standalone Cluster + INSERT INTO SQLClient JobManager TaskManager TaskManager Data Source Data Destination ジョブの並列度を元にTaskManagerに配 分
  • 16. SQL Clients Execution Flow • Flink Standalone Cluster + INSERT INTO SQLClient JobManager TaskManager TaskManager Data Source Data Destination Task 実際に実行するTaskを生成 Task
  • 17. SQL Clients Execution Flow • Flink Standalone Cluster + INSERT INTO SQLClient JobManager TaskManager TaskManager Data Source Data Destination Task Task Submit完了後にジョブが動作し、 Data Sourceからデータを取得して処理し、 Data Destinationへの投入が継続
  • 18. SQL Client’s major functions • Same as Flink SQL – つまり、以下のような機能を一通り利用可能 • ANSI SQLに従ったSQLの機能(一部制限あり) • Window Function – TUMBLE、HOP、SESSION Processing/EventTimeの使い分け可 • Temporal Table Function – 主キー・時刻に対応したSnapshotを取得するための機能 • MATCH_RECOGNIZE – 特定のパターンを持つデータ列が来た場合に検知出力可能 » 例:あるカラムがA > B > Cという順になった際に検知! • UDF定義
  • 19. Compatibility of SQL/SQL Client • Flink Tableによって以下機能群は共通の実体を持つ – Flink Table API – Flink SQL – Flink SQL Client • Flinkはデータの入出力元であるSourceやSinkを Tableとして抽象化し、共通のIFでアクセス – Tableを介することで、SQLでの処理やスキーマや型を前 提としたアプリケーションの記述が可能となる • もちろん、バッチとストリームでのどちらで利用可能などの 制約は受ける
  • 20. Flink Table Data Processing • Flink Table APIでの記述 // Table API Select val orders = tableEnv.scan("Orders") val revenue = orders .filter('cCountry === "FRANCE") .groupBy('cID, 'cName) .select('cID, 'cName, 'revenue.sum AS 'revSum) // Table API Update // SinkTable Objectに投入 revenue.writeToSink(sinkRevenueFrance) // Catalog中のTableに投入 revenue.insertInto("RevenueFrance")
  • 21. Flink Table Data Processing • Flink SQLでの記述(SQLClientの場合SQLのみ) // SQL SELECT val revenue = tableEnv.sqlQuery(""" |SELECT cID, cName, SUM(revenue) AS revSum |FROM Orders WHERE cCountry = 'FRANCE' |GROUP BY cID, cName """.stripMargin) // SQL UPDATE tableEnv.sqlUpdate(""" |INSERT INTO RevenueFrance |SELECT cID, cName, SUM(revenue) AS revSum |FROM Orders WHERE cCountry = 'FRANCE' |GROUP BY cID, cName """.stripMargin)
  • 22. Flink Table related Objects • Tableの上位にEnvironmentが存在 • Environment • ※SparkでいうSparkSessionのようなものと考えればいい – Table(DataCatalog)管理(自前登録/外部取込) – Table API / SQLの実行インタフェース – UDFの登録 / 管理 – DataStream / DataTableをTableに変換 • ※SparkでいうRDDのようなものと考えれば(略
  • 23. Flink Table related Objects • Tableは主に以下3つの要素を保持 – Connector – Format – Table Schema • ※コンポーネント次第で何が組み合わせ可能かも変化 • これらは全てコードとYAMLファイル両方で定義可 – コード • Flink Table API、Flink SQLで使用 – YAML • Flink SQL Clientで使用
  • 24. Flink Table related Objects • Connector – 端的に外部システムに接続するためのコネクタ • Source / Sinkのどちらに対応するかはオブジェクトによる – 例えば、KafkaConnectorであれば クラスタ情報とTopic名を保持 – 例えば、FileSystemConnectorであれば パスやファイルシステム定義を保持 – 後述のFormat / TableSchemaを内包するケースもある – 例 • Kafka, Cassandra, Kinesis Streams, Elasticsearch • HDFS, RabbitMQ, Apache NiFi, Twitter etc
  • 25. Flink Table related Objects • Connector定義例(コード) // declare the external system to connect to tableEnvironment .connect( new Kafka() .version("0.10") .topic("test-input") .startFromEarliest() .property("zookeeper.connect", "localhost:2181") .property("bootstrap.servers", "localhost:9092") )
  • 26. Flink Table related Objects • Connector定義例(YAML) # declare the external system to connect to connector: type: kafka version: "0.10" topic: test-input startup-mode: earliest-offset properties: - key: zookeeper.connect value: localhost:2181 - key: bootstrap.servers value: localhost:9092
  • 27. Flink Table related Objects • Format – 端的に格納データのフォーマット・スキーマ変換器 • 複数のフォーマットに対応するための機構 – 例えば、外部システムにはCSVや、JSON、Avro等 様々なフォーマットでデータが保存されているだろう – 一部の外部システムにおいては、 認識するためにFormat Schemaの設定も必要だろう • ※非常に紛らわしいですが後述のTable Schemaとは別物 – 例 • Parquet, CSV • Avro, JSON, LTSV etc
  • 28. Flink Table related Objects • Format定義例(コード) // declare a format for this system .withFormat( new Avro() .avroSchema( "{" + " ¥"namespace¥": ¥"org.myorganization¥"," + " ¥"type¥": ¥"record¥"," + " ¥"name¥": ¥"UserMessage¥"," + " ¥"fields¥": [" + " {¥"name¥": ¥"timestamp¥", ¥"type¥": ¥"string¥"}," + " {¥"name¥": ¥"user¥", ¥"type¥": ¥"long¥"}," + " {¥"name¥": ¥"message¥", ¥"type¥": [¥"string¥", ¥"null¥"]}" + " ]"...
  • 29. Flink Table related Objects • Format定義例(YAML) # declare a format for this system format: type: avro avro-schema: > { "namespace": "org.myorganization", "type": "record", "name": "UserMessage", "fields": [ {"name": "ts", "type": "string"}, {"name": "user", "type": "long"}, {"name": "message", "type": ["string", "null"]}...
  • 30. Flink Table related Objects • Table Schema – 実際にTable API, SQLでアクセスする際のSchema – Table Schemaによって、Format Schemaに定義された columnAカラムをテーブル上ではCOLIMN_A で使用可能にするなどのマッピングが可能 – Table Schemaを定義する際に時刻カラムを EventTime/ProcessingTimeとして入れ込める – ※Table Schema自体のバリエーションはない
  • 31. Flink Table related Objects • Table Schema定義例(コード) // declare the schema of the table .withSchema( new Schema() .field("rowtime", Types.SQL_TIMESTAMP) .rowtime(new Rowtime() .timestampsFromField("ts") .watermarksPeriodicBounded(60000) ) .field("user", Types.LONG) .field("message", Types.STRING) )
  • 32. Flink Table related Objects • Table Schema定義例(YAML) # declare the schema of the table schema: - name: rowtime type: TIMESTAMP rowtime: timestamps: type: from-field from: ts watermarks: type: periodic-bounded delay: "60000" - name: user (¥n) type: BIGINT - name: message (¥n) type: VARCHAR
  • 33. Why can we use dual setting? • 両方式で宣言した設定項目は TableFactoryというコンポーネントにわたる – FactoryはソースとYAMLの両方に対応が必要 • TableFactoryは与えられた設定を基に、 SourceTable/SinkTableを 関連オブジェクトも含めて生成する • TableFactoryはJavaのServiceLoaderでロード – YAMLでの「type」で特定できる必要がある
  • 34. Why are you thinking of Flink SQL? • ここまで聞いて、 「KSQLでいいんじゃね?」 と思う方もいらっしゃるかと思います • 私の考えるFlinkSQL Clientの利点 – SQL ClientのみでKafka以外への入出力が可能 • Kafka Connectorで可能だが、KSQLと比較していた段階で、 KSQLからKafkaConnectorを制御できず・・
  • 35. Conclusion • Flinkは状態付きストリーム処理も可能な 分散処理フレームワーク • SQL ClientはSQLとYAML定義のみで Flink Applicationが起動可能なCLIツール • Flink Table API, Flink SQL, Flink SQL Clientは Flink Tableを扱うためのIF • KSQLと比較すると単体で多様なシステムと 入出力を行えるのが利点
  • 36. Thank you for your attention! https://www.flickr.com/photos/savannahcorps/7409364642