目的
- 用docker實現所有服務
- 在spark-notebook中編寫Scala代碼,實時提交到spark集群中運行
- 在HDFS中存儲數據文件,spark-notebook中直接讀取
組件
- Spark (Standalone模式, 1個master節點 + 可擴展的worker節點)
- Spark-notebook
- Hadoop name node
- Hadoop data node
- HDFS FileBrowser
實現
最初用了Big Data Europe的docker-spark-hadoop-workbench,但是docker 服務運行后在spark-notebook中運行代碼會出現經典異常:

java.lang.ClassCastException: cannot assign instance of scala.collection.immutable.List$SerializationProxy to field org.apache.spark.rdd.RDD.org$apache$spark$rdd$RDD$$dependencies_ of type scala.collection.Seq in instance of org.apache.spark.rdd.MapPartitionsRDD
發現是因為spark-notebook和spark集群使用的spark版本不一致. 於是fork了Big Data Europe的repo,在此基礎上做了一些修改,基於spark2.11-hadoop2.7實現了一個可用的workbench.
運行docker服務
docker-compose up -d
擴展spark worker節點
docker-compose scale spark-worker=3
測試服務
各個服務的URL如下:
Namenode: http://localhost:50070 Datanode: http://localhost:50075 Spark-master: http://localhost:8080 Spark-notebook: http://localhost:9001 Hue (HDFS Filebrowser): http://localhost:8088/home
以下是各個服務的運行截圖
HDFS Filebrower
Spark集群
Spark-notebook
運行例子
1. 上傳csv文件到HDFS FileBrowser,
2. Spark notebook新建一個notebook
3. 在新建的notebook里操作HDFS的csv文件
具體的步驟參考這里
以下是spark-notebook運行的截圖:
代碼鏈接