![](/img/trans.png)
[英]Spark SQL : INSERT Statement with JDBC does not support default value
[英]Spark Sql JDBC Support
目前,我們正在構建一個報告平台,作為我們使用Shark的數據存儲。 由於Shark的開發已停止,因此我們正處於評估Spark SQL的階段。 根據我們的用例,我們幾乎沒有問題。
1)我們有各種來源的數據(MySQL,Oracle,Cassandra,Mongo)。 我們想知道如何將這些數據導入Spark SQL? 我們可以使用任何實用工具嗎? 此實用程序是否支持持續刷新數據(將數據存儲上的新添加/更新/刪除同步到Spark SQL?
2)是一種在Spark SQL中創建多個數據庫的方法嗎?
3)對於Reporting UI,我們使用Jasper,我們希望從Jasper連接到Spark SQL。 當我們進行初始搜索時,我們了解到目前沒有消費者支持通過JDBC連接Spark SQL,但在將來的版本中,您希望添加相同的內容。 我們想知道什么時候Spark SQL會有一個可以獲得JDBC支持的穩定版本? 與此同時,我們從https://github.com/amplab/shark/tree/sparkSql獲取了源代碼,但我們在本地設置和評估它時遇到了一些困難。 如果您能幫助我們完成設置說明,那就太棒了。(我可以分享我們面臨的問題,請告訴我在哪里可以發布錯誤日志)
4)我們還需要一個SQL提示符,我們可以在其中執行查詢,目前Spark Shell提供SCALA提示符,其中SCALA代碼可以執行,從SCALA代碼我們可以觸發SQL查詢。 像Shark一樣,我們希望在Spark SQL中使用SQL提示符。 當我們進行搜索時,我們發現在將來發布的Spark中會添加。 如果你能告訴我們哪個版本的Spark會解決同樣問題,那將會很棒。
至於
3)Spark 1.1為SparkSQL ThriftServer接口提供了更好的支持,您可能希望將其用於JDBC接口。 支持v.1.02.0的Hive JDBC客戶端能夠連接和連接此類服務器。
4)Spark 1.1還提供了一個SparkSQL CLI接口,可用於輸入查詢。 與Hive CLI或Impala Shell的方式相同。
請提供有關您想要實現1和2的更多詳細信息。
我可以回答(1):
Apache Sqoop專門用於解決關系數據庫的這個問題。 該工具適用於HDFS,HBase和Hive - 因此可用於通過HDFS和Hive Metastore為Spark提供數據。
我相信Cassandra可通過DataStax的連接器使用SparkContext: https : //github.com/datastax/spark-cassandra-connector - 我從未使用過。
我不知道MongoDB的任何連接器。
1)我們有各種來源的數據(MySQL,Oracle,Cassandra,Mongo)
您必須為每種情況使用不同的驅動程序。 對於cassandra,有datastax驅動程序 (但我遇到了一些與SparkSQL的兼容性問題)。 對於任何SQL系統,您都可以使用JdbcRDD。 用法很簡單,請看scala示例 :
test("basic functionality") {
sc = new SparkContext("local", "test")
val rdd = new JdbcRDD(
sc,
() => { DriverManager.getConnection("jdbc:derby:target/JdbcRDDSuiteDb") },
"SELECT DATA FROM FOO WHERE ? <= ID AND ID <= ?",
1, 100, 3,
(r: ResultSet) => { r.getInt(1) } ).cache()
assert(rdd.count === 100)
assert(rdd.reduce(_+_) === 10100)
}
但是它只是一個RDD的概念,所以你應該通過map-reduce api來處理這些數據,而不是在SQLContext中。
我們可以使用任何實用工具嗎?
有Apache Sqoop項目,但它處於活動開發狀態。 目前的穩定版本甚至不保存鑲木地板格式的文件。
Spark SQL是Spark框架的一項功能。 它不應該與Shark相比,因為Shark是一種服務。 (回想一下,使用Shark,您運行ThriftServer,然后可以從Thrift應用程序甚至ODBC連接到。)
您能詳細說明“將此數據導入Spark SQL”的含義嗎?
有幾個Spark - MongoDB連接器: - hadoop的mongodb連接器(實際上根本不需要Hadoop!) https://databricks.com/blog/2015/03/20/using-mongodb-with- spark.html
如果您的數據很龐大並且需要執行大量轉換,那么Spark SQL可以用於ETL目的,否則presto可以解決您的所有問題。 逐個解決您的問題:
由於您的數據在MySQL,Oracle,Cassandra,Mongo中,所有這些都可以集成到Presto中,因為它具有所有這些數據庫的連接器https://prestodb.github.io/docs/current/connector.html 。
在群集模式下安裝Presto后,您可以在一個平台中查詢所有這些數據庫,這也提供了從Cassandra和Mongo的其他表連接表,這種靈活性是無與倫比的。
Presto可用於連接Apache Superset https://superset.incubator.apache.org/ ,它是開源的,並提供所有集Dashboarding。 Presto也可以連接到Tableau。
您可以使用presto連接詳細信息安裝MySQL工作台,這有助於在一個位置為所有數據庫提供UI。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.