ストームSQLの統合は、ユーザーがSQLストームストリーミングデータをクエリを実行することができます。フロー分析では、SQLインタフェースは、開発サイクルをスピードアップするだけでなく、統一されたバッチが開かなくなりApacheのハイブとデータ処理をストリーミングするための真の機会を。
StormSQL SQLクエリは、高い標準にコンパイルされトライデントトポロジと嵐のクラスタ上で、それらを可能にします。どのようにStormSQLこの記事では、ユーザーが得られます。誰かがStormSQLの設計と実装の詳細に興味がある場合は、参照してくださいここに
使用
これは、ことができますstorm sql
コマンドはトライデント・トポロジーのためのSQLステートメントをコンパイルすると、ストームクラスタに提出しました。
|
|
ここではsql-file
、実行するSQL文を含む、topo-name
提出のトポロジの名前です。
サポートされる機能
ライブラリの現在のバージョン(1.0.1)では、以下の機能をサポートしています。
- ストリーミングは、外部データソースを読み書き
- フィルタのタプル
- 予測(プロジェクション)
外部データソースを指定します。
StormSQLデータが外部表の形で表現され、ユーザーが使用できるCREATE EXTERNAL TABLE
ステートメントは、データ・ソースを指定します。CREATE EXTERNAL TABLE
構文は厳密に従うハイブデータ定義言語の定義を。
|
|
あなたはできるデータ定義言語は、ハイブ各プロパティの詳細な説明を見つけます。たとえば、次の文は、カフカの注ぎ口を指定し、シンク:
|
|
外部データソースをドッキング
用户对接外部数据源需要实现 ISqlTridentDataSource
接口并且使用 Java 的服务加载机制注册他们,外部数据源就会基于表中 URI 的 Scheme 来选择。请参阅 storm-sql-kafka
来了解更多实现细节。
示例: 过滤 Kafka 数据流
假设有一个 Kafka 数据流存储交易的订单数据。流中的每个消息包含订单的 id 、产品的单价及订单的数量。我们的目的是过滤出有很大交易额的订单,将这些订单插入另一个 Kafka 数据流用于进行进一步分析。
用户可以在 SQL 文件中指定如下的 SQL 语句:
|
|
第一条语句定义的 ORDER
表代表了输入流。 LOCATION
字段指定了 ZK 地址 (localhost:2181
) 、brokers 在 Zookeeper 中的路径 (/brokers
) 以及 topic (orders
)。TBLPROPERTIES
字段指定了 KafkaProducer 的配置项。
目前 storm-sql-kafka
的实现即使 table 是 read-only 或 write-only 情况都需要指定 LOCATION
和 TBLPROPERTIES
项。
类似的第二条语句定义的 LARGE_ORDERS
表代表了输出流。第三条 SELECT
语句定义了 topology : 其使 StormSQL 过滤外部表 ORDERS
中的所有订单(译注:过滤出总价在 50 以上的订单),计算总价格并将满足的记录插入指定的 LARGE_ORDER
Kafka 流中。
要运行这个示例,用户需要在 classpath 中包含数据源 (这个示例中是 storm-sql-kafka
) 及其依赖。一种办法是将所需的 jars 放到 extlib
目录中:
|
|
その後StormSQLにSQL文を提出します:
|
|
今、あなたはで嵐UIを見ることができるはずorder_filtering
トポロジ。
現在の欠陥
重合(凝集)、窓(ウィンドウイング)及び(接合)もテーブルが実装されていない。トポロジーは、並列処理の指定された程度をサポートしていない、すべての処理タスクの並列は1です。
また、ユーザーはする必要がありextlib
そうトポロジがしますので、外部のデータソースディレクトリに頼る提供ClassNotFoundException
実行されません。
カフカStormSQL現在実装コネクタは、入出力データJSON形式を想定しています。コネクタはサポートしていませんINPUTFORMAT
とOUTPUTFORMAT
。