小 T 導(dǎo)讀:想用 Spark 對接 TDengine?保姆級教程來了。
0、前言
TDengine 是由濤思數(shù)據(jù)開發(fā)并開源的一款高性能、分布式、支持 SQL 的時序數(shù)據(jù)庫(Time-Series Database)。
在上一篇文章中,我們示范了如何使用 Apache Flink 連接 TDengine,使用 Apache Spark 的小伙伴們已經(jīng)迫不及待地等待續(xù)集了。
相對于 Flink,Spark 對接起來就簡單多了。

1、技術(shù)實現(xiàn)
Spark 本身封裝了 JDBC 的方法,所以我們直接使用 Spark 官網(wǎng)的示例代碼就可以完成對接了。
2、示例代碼
package com.taosdata.java;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SaveMode;
import org.apache.spark.sql.SparkSession;
import org.apache.spark.sql.jdbc.JdbcDialect;
import org.apache.spark.sql.jdbc.JdbcDialects;
public class SparkTest{
public static void main(String[] args) {
// 數(shù)據(jù)庫配置
String url = "jdbc:TAOS://u05:6030/tt?user=root&password=taosdata";
String driver = "com.taosdata.jdbc.TSDBDriver";
String dbtable = "t1";
SparkSession sparkSession = SparkSession.builder()
.appName("DataSourceJDBC") // 設(shè)置應(yīng)用名稱
.master("local") // 本地單線程運行
.getOrCreate();
// 創(chuàng)建DataFrame
Dataset<Row> df = sparkSession
.read() // 返回一個DataFrameReader,可用于將非流數(shù)據(jù)作為DataFrame讀取
.format("jdbc") // JDBC數(shù)據(jù)源
.option("url", url)
.option("driver", driver)
.option("query", "select * from tt.meters limit 100") // 二選一,sql語句或者表
.load();
// 將DataFrame的內(nèi)容顯示
df.show();
df.write() // 返回一個DataFrameWriter,可用于將DataFrame寫入外部存儲系統(tǒng)
.format("jdbc") // JDBC數(shù)據(jù)源
.mode(SaveMode.Append) // 如果第一次生成了,后續(xù)會追加
.option("url", url)
.option("driver", driver)
.option("dbtable", "test.meters") // 表名
.save();
sparkSession.stop();
}
}
3、簡單測試 JNI 讀寫
1) 環(huán)境準(zhǔn)備:
a) Spark 安裝&啟動:
- wget?https://www.apache.org/dyn/closer.lua/spark/spark-3.2.1/spark-3.2.1-bin-hadoop3.2.tgz
- tar zxf spark-3.2.1-bin-hadoop3.2.tgz -C /usr/local
b) TDengine Database 環(huán)境準(zhǔn)備:
- 創(chuàng)建原始數(shù)據(jù):?
- create database tt;
- create table tt.meters (ts TIMESTAMP,vol INT) ;
- insert into meters values(now,220);
- 創(chuàng)建目標(biāo)數(shù)據(jù)庫表:?
- create database test;
- create table test.meters (ts TIMESTAMP,vol INT) ;
2) 打包編譯:
源碼位置: https://github.com/liuyq-617/TD-Spark
mvn clean package
3) 程序啟動:
spark-submit –master local –name TDenginetest –class com.taosdata.java.SparkTest /testSpark-1.0-SNAPSHOT-dist.jar
- 讀取數(shù)據(jù)
- 讀取的數(shù)據(jù)直接打印在控制臺
- 寫入數(shù)據(jù)
- select * from test.meters;
- 可以查詢到剛插入的數(shù)據(jù)
- select * from test.meters;
4、小結(jié)
Spark 本身支持 JDBC 的方式來進(jìn)行讀寫,我們無需做更多適配,數(shù)據(jù)接入可以做到無縫銜接。



互聯(lián)網(wǎng).png)



-1.png)







證.png)


伙伴.png)
伙伴.png)
伙伴.png)



