嵐のSQL統合

ストームSQLの統合は、ユーザーがSQLストームストリーミングデータをクエリを実行することができます。フロー分析では、SQLインタフェースは、開発サイクルをスピードアップするだけでなく、統一されたバッチが開かなくなりApacheのハイブとデータ処理をストリーミングするための真の機会を。

StormSQL SQLクエリは、高い標準にコンパイルされトライデントトポロジと嵐のクラスタ上で、それらを可能にします。どのようにStormSQLこの記事では、ユーザーが得られます。誰かがStormSQLの設計と実装の詳細に興味がある場合は、参照してくださいここに

使用

これは、ことができますstorm sqlコマンドはトライデント・トポロジーのためのSQLステートメントをコンパイルすると、ストームクラスタに提出しました。

      
      
1
      
      
$ビン/ストームSQL <SQL-ファイル> <TOPO-名>

ここではsql-file、実行するSQL文を含む、topo-name提出のトポロジの名前です。

サポートされる機能

ライブラリの現在のバージョン(1.0.1)では、以下の機能をサポートしています。

  • ストリーミングは、外部データソースを読み書き
  • フィルタのタプル
  • 予測(プロジェクション)

外部データソースを指定します。

StormSQLデータが外部表の形で表現され、ユーザーが使用できるCREATE EXTERNAL TABLEステートメントは、データ・ソースを指定します。CREATE EXTERNAL TABLE構文は厳密に従うハイブデータ定義言語の定義を。

      
      
1
2
3
4
5
6
7
8
      
      
EXTERNALテーブルtable_nameのCREATE field_listに
[として保存され
InputFormatのinput_format_classname
OUTPUTFORMATのoutput_format_classname
]
LOCATION場所
【TBLPROPERTIES tbl_properties]
[select_stmt AS]

あなたはできるデータ定義言語は、ハイブ各プロパティの詳細な説明を見つけます。たとえば、次の文は、カフカの注ぎ口を指定し、シンク:

      
      
1
      
      
外部表FOO(ID INT PRIMARY KEY)LOCATION ':// localhostの:カフカ2181 /ブローカートピック=試験' を作成TBLPROPERTIES「{ "生産":{ "bootstrap.serversを": "はlocalhost:9092"、 "ACKを"。 "1"、 "key.serializer": "org.apache.org.apache.storm.kafka.IntSerializer"、 "value.serializer": "org.apache.org.apache.storm.kafka.ByteBufferSerializer"}}」

外部データソースをドッキング

用户对接外部数据源需要实现 ISqlTridentDataSource 接口并且使用 Java 的服务加载机制注册他们,外部数据源就会基于表中 URI 的 Scheme 来选择。请参阅 storm-sql-kafka 来了解更多实现细节。

示例: 过滤 Kafka 数据流

假设有一个 Kafka 数据流存储交易的订单数据。流中的每个消息包含订单的 id 、产品的单价及订单的数量。我们的目的是过滤出有很大交易额的订单,将这些订单插入另一个 Kafka 数据流用于进行进一步分析。

用户可以在 SQL 文件中指定如下的 SQL 语句:

      
      
1
2
3
      
      
CREATE EXTERNAL TABLE ORDERS (ID INT PRIMARY KEY, UNIT_PRICE INT, QUANTITY INT) LOCATION 'kafka://localhost:2181/brokers?topic=orders' TBLPROPERTIES '{"producer":{"bootstrap.servers":"localhost:9092","acks":"1","key.serializer":"org.apache.org.apache.storm.kafka.IntSerializer","value.serializer":"org.apache.org.apache.storm.kafka.ByteBufferSerializer"}}'
CREATE EXTERNAL TABLE LARGE_ORDERS (ID INT PRIMARY KEY, TOTAL INT) LOCATION 'kafka://localhost:2181/brokers?topic=large_orders' TBLPROPERTIES '{"producer":{"bootstrap.servers":"localhost:9092","acks":"1","key.serializer":"org.apache.org.apache.storm.kafka.IntSerializer","value.serializer":"org.apache.org.apache.storm.kafka.ByteBufferSerializer"}}'
INSERT INTO LARGE_ORDERS SELECT ID, UNIT_PRICE * QUANTITY AS TOTAL FROM ORDERS WHERE UNIT_PRICE * QUANTITY > 50

第一条语句定义的 ORDER 表代表了输入流。 LOCATION 字段指定了 ZK 地址 (localhost:2181) 、brokers 在 Zookeeper 中的路径 (/brokers) 以及 topic (orders)。TBLPROPERTIES 字段指定了 KafkaProducer 的配置项。
目前 storm-sql-kafka的实现即使 table 是 read-only 或 write-only 情况都需要指定 LOCATIONTBLPROPERTIES 项。

类似的第二条语句定义的 LARGE_ORDERS 表代表了输出流。第三条 SELECT 语句定义了 topology : 其使 StormSQL 过滤外部表 ORDERS 中的所有订单(译注:过滤出总价在 50 以上的订单),计算总价格并将满足的记录插入指定的 LARGE_ORDER Kafka 流中。

要运行这个示例,用户需要在 classpath 中包含数据源 (这个示例中是 storm-sql-kafka) 及其依赖。一种办法是将所需的 jars 放到 extlib 目录中:

      
      
1
2
3
4
5
6
      
      
$ cp curator-client-2.5.0.jar curator-framework-2.5.0.jar zookeeper-3.4.6.jar
extlib/
$ cp scala-library-2.10.4.jar kafka-clients-0.8.2.1.jar kafka_2.10-0.8.2.1.jar metrics-core-2.2.0.jar extlib/
$ cpはJSON-シンプル-1.1.1.jarのEXTLIB /
$ cpはジャクソン注釈-2.6.0.jar EXTLIB /
$ cpは嵐-カフカ - *ジャー嵐-SQL-カフカ - 。。*ジャー嵐-SQLランタイム - 。*ジャーEXTLIB /

その後StormSQLにSQL文を提出します:

      
      
1
      
      
$ビン/嵐のSQL order_filteringのorder_filtering.sql

今、あなたはで嵐UIを見ることができるはずorder_filteringトポロジ。

現在の欠陥

重合(凝集)、窓(ウィンドウイング)及び(接合)もテーブルが実装されていない。トポロジーは、並列処理の指定された程度をサポートしていない、すべての処理タスクの並列は1です。

また、ユーザーはする必要がありextlibそうトポロジがしますので、外部のデータソースディレクトリに頼る提供ClassNotFoundException実行されません。

カフカStormSQL現在実装コネクタは、入出力データJSON形式を想定しています。コネクタはサポートしていませんINPUTFORMATOUTPUTFORMAT

オリジナル:大列  嵐のSQL統合


おすすめ

転載: www.cnblogs.com/sanxiandoupi/p/11641305.html