本文介紹的MemSQL 數據庫號稱是世界上快的分布式內存數據庫(The World’s Fastest In-Memory Database)!它是由Eric Frenkiel(前Facebook員工)和Nikita Shamgunov(前微軟SQL Server高級工程師)創建的一款基于內存的分布式關系數據庫,它通過將數據存儲在內存中,并將SQL語句預編譯為C++而獲得極速的執行效率。它兼容MySQL,且速度要比MySQL快30倍,能實現每秒150萬次事務。
近在其官方發布的一個MemSQL Spark Connector可以很好地和Spark一起使用,使得Spark用戶可以快速地讀寫數據庫中的數據。MemSQL 天生就適合Spark,因為它可以高效地處理大量的讀寫,而Spark經常需要這樣的操作,而且MemSQL可以提供大量的空間足以提供給Spark創建新的數據。
MemSQL Spark Connector提供了所有Spark和MemSQL交互的各種接口,而且其中做了許多的優化措施,比如并行地從MemSQL讀取數據;當 MemSQL和Spark運行在一個物理節點上,Spark直接將數據寫入其中。MemSQL提供了兩個主要的組建:MemSQLRDD和saveToMemsql。
MemSQLRDD用于存儲從MemSQL查詢的數據集;而saveToMemsql將Spark中的RDD數據寫入到MemSQL表中。這兩個接口和Spark內置的JDBC接口看起來很類似,而且使用方式也很類似(可以看這里《Spark與Mysql(JdbcRDD)整合開發》)。來看看如何使用MemSQLRDD。我們使用從MemSQL讀取表數據,并存儲在MemSQLRDD中:
01import com.memsql.spark.connector.rdd.MemSQLRDD
02
03...
04
05val rdd = new MemSQLRDD(
06 sc,
07 dbHost,
08 dbPort,
09 dbUser,
10 dbPassword,
11 dbName,
12 "SELECT * FROM iteblog",
13 (r: ResultSet) => { r.getString("test_column") })
14rdd.first() // Contains the value of "test_column" for the first row
如果你想將RDD寫入到Memsql,可以使用saveToMemsql函數:
1import com.memsql.spark.connector._
2
3...
4
5val rdd = sc.parallelize(Array(Array("www", "iteblog"), Array("com", "qux")))
6rdd.saveToMemsql(dbHost, dbPort, dbUser, dbPassword,
7 dbName, outputTableName, insertBatchSize=1000)
從上面的例子可以看出,使用Memsql和Spark結合是多么的容易。
本文翻譯自: blog.memsql.com/memsql-spark-connector
轉載自過往記憶(www.iteblog.com)
本文鏈接地址: 《使用Spark和MemSQL Spark連接器運行實時應用》(http://www.iteblog.com/archives/1327)
本站文章版權歸原作者及原出處所有 。內容為作者個人觀點, 并不代表本站贊同其觀點和對其真實性負責,本站只提供參考并不構成任何投資及應用建議。本站是一個個人學習交流的平臺,網站上部分文章為轉載,并不用于任何商業目的,我們已經盡可能的對作者和來源進行了通告,但是能力有限或疏忽,造成漏登,請及時聯系我們,我們將根據著作權人的要求,立即更正或者刪除有關內容。本站擁有對此聲明的最終解釋權。