Successfully reported this slideshow.
Your SlideShare is downloading. ×

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

More Related Content

Slideshows for you

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

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

  1. 1. スキーマ付き分散ストリーム処理を実行可能な FlinkSQLClientの紹介 2019/03/14 「Hadoop / Spark Conference Japan 2019」 Kimura, Sotaro(@kimutansk) https://www.flickr.com/photos/andrewmalone/810684924/
  2. 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. 3. https://flink.apache.org/ What is Flink? • バッチ処理とストリーム処理に両対応した 分散処理フレームワーク – ただし現状(1.7系)バッチとストリーム併用はできない – 1.8系のリリースで併用が可能になる見込み(?) • ウィンドウ処理などのいわゆる 「状態を持ったストリーム処理」が実行可能
  4. 4. What is Flink? • 自前クラスタ、YARN、Mesos、Kubernates等 多様な環境で動作可能 – Amazon Kinesis Data Analytics上でも動作 • 並列度を増す事で兆/日オーダーにもスケール可能 • 非同期Snapshot/CheckPointの機構を持ち メモリのアクセス速度を活用して高速化 https://flink.apache.org/
  5. 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. 6. SQL Client Execute Example SlideShare上ではアニメーションが動作しないため、 以下よりご覧ください。 https://ci.apache.org/projects/flink/flink-docs-stable/dev/table/sqlClient.html
  7. 7. SQL Clients Execution Flow • Flink Standalone Cluster + SELECT SQLClient JobManager TaskManager TaskManager Data Source
  8. 8. SQL Clients Execution Flow • Flink Standalone Cluster + SELECT SQLClient JobManager TaskManager TaskManager Data Source SQLを解釈してジョブを生成し、 Submit
  9. 9. SQL Clients Execution Flow • Flink Standalone Cluster + SELECT SQLClient JobManager TaskManager TaskManager Data Source ジョブの並列度を元にTaskManagerに配 分
  10. 10. SQL Clients Execution Flow • Flink Standalone Cluster + SELECT SQLClient JobManager TaskManager TaskManager Data Source Task Task 実際に実行するTaskを生成
  11. 11. SQL Clients Execution Flow • Flink Standalone Cluster + SELECT SQLClient JobManager TaskManager TaskManager Data Source Task Task 処理対象のデータをData Sourceから取得
  12. 12. SQL Clients Execution Flow • Flink Standalone Cluster + Select SQLClient JobManager TaskManager TaskManager Data Source Task Task 結果を継続的に取得し、表示
  13. 13. SQL Clients Execution Flow • Flink Standalone Cluster + INSERT INTO SQLClient JobManager TaskManager TaskManager Data Source Data Destination SQLを解釈してジョブを生成し、 Submit
  14. 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. 15. SQL Clients Execution Flow • Flink Standalone Cluster + INSERT INTO SQLClient JobManager TaskManager TaskManager Data Source Data Destination ジョブの並列度を元にTaskManagerに配 分
  16. 16. SQL Clients Execution Flow • Flink Standalone Cluster + INSERT INTO SQLClient JobManager TaskManager TaskManager Data Source Data Destination Task 実際に実行するTaskを生成 Task
  17. 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. 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. 19. Compatibility of SQL/SQL Client • Flink Tableによって以下機能群は共通の実体を持つ – Flink Table API – Flink SQL – Flink SQL Client • Flinkはデータの入出力元であるSourceやSinkを Tableとして抽象化し、共通のIFでアクセス – Tableを介することで、SQLでの処理やスキーマや型を前 提としたアプリケーションの記述が可能となる • もちろん、バッチとストリームでのどちらで利用可能などの 制約は受ける
  20. 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. 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. 22. Flink Table related Objects • Tableの上位にEnvironmentが存在 • Environment • ※SparkでいうSparkSessionのようなものと考えればいい – Table(DataCatalog)管理(自前登録/外部取込) – Table API / SQLの実行インタフェース – UDFの登録 / 管理 – DataStream / DataTableをTableに変換 • ※SparkでいうRDDのようなものと考えれば(略
  23. 23. Flink Table related Objects • Tableは主に以下3つの要素を保持 – Connector – Format – Table Schema • ※コンポーネント次第で何が組み合わせ可能かも変化 • これらは全てコードとYAMLファイル両方で定義可 – コード • Flink Table API、Flink SQLで使用 – YAML • Flink SQL Clientで使用
  24. 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. 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. 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. 27. Flink Table related Objects • Format – 端的に格納データのフォーマット・スキーマ変換器 • 複数のフォーマットに対応するための機構 – 例えば、外部システムにはCSVや、JSON、Avro等 様々なフォーマットでデータが保存されているだろう – 一部の外部システムにおいては、 認識するためにFormat Schemaの設定も必要だろう • ※非常に紛らわしいですが後述のTable Schemaとは別物 – 例 • Parquet, CSV • Avro, JSON, LTSV etc
  28. 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. 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. 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. 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. 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. 33. Why can we use dual setting? • 両方式で宣言した設定項目は TableFactoryというコンポーネントにわたる – FactoryはソースとYAMLの両方に対応が必要 • TableFactoryは与えられた設定を基に、 SourceTable/SinkTableを 関連オブジェクトも含めて生成する • TableFactoryはJavaのServiceLoaderでロード – YAMLでの「type」で特定できる必要がある
  34. 34. Why are you thinking of Flink SQL? • ここまで聞いて、 「KSQLでいいんじゃね?」 と思う方もいらっしゃるかと思います • 私の考えるFlinkSQL Clientの利点 – SQL ClientのみでKafka以外への入出力が可能 • Kafka Connectorで可能だが、KSQLと比較していた段階で、 KSQLからKafkaConnectorを制御できず・・
  35. 35. Conclusion • Flinkは状態付きストリーム処理も可能な 分散処理フレームワーク • SQL ClientはSQLとYAML定義のみで Flink Applicationが起動可能なCLIツール • Flink Table API, Flink SQL, Flink SQL Clientは Flink Tableを扱うためのIF • KSQLと比較すると単体で多様なシステムと 入出力を行えるのが利点
  36. 36. Thank you for your attention! https://www.flickr.com/photos/savannahcorps/7409364642

×