當MongoDB遇見Spark

NoSQL Spark MongoDB HDFS 極客左右 2017-04-03

適宜讀者人群

  • 正在使用Mongodb的開發者

傳統Spark生態系統 和 MongoDB在Spark生態的角色

傳統Spark生態系統

當MongoDB遇見Spark

Spark生態系統

那麼Mongodb作為一個database, 可以擔任什麼樣的角色呢? 就是數據存儲這部分, 也就是圖中的黑色圈圈HDFS的部分, 如下圖

用MongoDB替換HDFS後的Spark生態系統

當MongoDB遇見Spark

Spark+Mongodb生態系統

為什麼要用MongoDB替換HDFS

  1. 存儲方式上, HDFS以文件為單位,每個文件64MB~128MB不等, 而MongoDB作為文檔數據庫則表現得更加細顆粒化

  2. MongoDB支持HDFS所沒有的索引的概念, 所以在讀取上更加快

  3. MongoDB支持的增刪改功能比HDFS更加易於修改寫入後的數據

  4. HDFS的響應級別為分鐘, 而MongoDB通常是毫秒級別

  5. 如果現有數據庫已經是MongoDB的話, 那就不用再轉存一份到HDFS上了

  6. 可以利用MongoDB強大的Aggregate做數據的篩選或預處理

MongoDB Spark Connector介紹

  1. 支持讀取和寫入,即可以將計算後的結果寫入MongoDB

  2. 將查詢拆分為n個子任務, 如Connector會將一次match,拆分為多個子任務交給spark來處理, 減少數據的全量讀取

MongoDB Spark 示例代碼

計算用類型Type=1的message字符數並按userid進行分組

開發Maven dependency配置

這裡用的是mongo-spark-connector_2.11 的2.0.0版本和spark的spark-core_2.11的2.0.2版本

 <dependency>

示例代碼

 import com.mongodb.spark._ import org.apache.spark.{SparkConf, SparkContext} import org.bson._ val conf = new SparkConf()

相關推薦

推薦中...