前言
StreamingPro可以很容易讓你搭建一個Spark SQL Server 服務,并且提供Http 格式的接口進行交互。通常查詢結果較小,但是如果用戶的SQL可能會產生幾G甚至幾十G的結果,那么Driver 就直接掛了。StreamingPro提供了同步和異步機制,將SQL的查詢結果放在HDFS上。如果是同步的話,執行完后返回下載地址(HTTP接口,StreamingPro提供),如果是異步,則會使用用戶提供的回調函數告知任務完成,并且提供下載地址。
編譯新版本
目前該功能只支持spark 2 以上的版本。
參考 如何自己打包
啟動一個SQL Server
SHome=/Users/allwefantasy/streamingpro
./bin/spark-submit --class streaming.core.StreamingApp \
--master local[2] \
--name sql-interactive \
$SHome/streamingpro-spark-2.0-0.4.15-SNAPSHOT.jar \
-streaming.name sql-interactive \
-streaming.job.file.path file://$SHome/query.json \
-streaming.platform spark \
-streaming.rest true \
-streaming.driver.port 9003 \
-streaming.spark.service true \
-streaming.thrift true \
-streaming.enableHiveSupport true
query.json 的內容為:
{}
準備數據
創建一張表:
//CREATE TABLE IF NOT EXISTS zhl_table(id string, name string, city string, age Int)
curl --request POST \
--url http://127.0.0.1:9003/run/sql \
--data 'sql=CREATE%20TABLE%20IF%20NOT%20EXISTS%20zhl_table(id%20string%2C%20name%20string%2C%20city%20string%2C%20age%20Int)%20'
導入數據:
你可以隨便創建一個csv格式的數據,然后按如下方式導入
//LOAD DATA LOCAL INPATH '/Users/allwefantasy/streamingpro/sample.csv' INTO TABLE zhl_table
curl --request POST \
--url http://127.0.0.1:9003/run/sql \
--data 'sql=LOAD%20DATA%20LOCAL%20INPATH%20%20'\''%2FUsers%2Fallwefantasy%2Fstreamingpro%2Fsample.csv'\''%20%20INTO%20TABLE%20zhl_table'
異步導出數據:
curl --request POST \
--url http://127.0.0.1:9003/run/sql \
--data 'sql=select%20*%20from%20zhl_table&async=true&resultType=file&path=%2Ftmp%2Fjack&callback=http%3A%2F%2F127.0.0.1%3A9003%2Fpull'
WX20170711-153834.png
接口會返回一個空數組。
- async: true,異步返回。
- sql : 查詢SQL
- path: hdfs 暫存路徑
- callback: StreamingPro會調用該參數提供的接口告知下載地址。
同步導出數據:
- async: false
- sql : 查詢SQL
- resultType: file
- path: hdfs 暫存路徑
接口會返回下載路徑。將該路徑黏貼到瀏覽器上即可下載文件。