2015年8月25日 星期二

[Apache Spark][Docker] 利用Jupyterhub打造隨開即用的spark教學環境


台灣Spark社群將在九月中的Hadoop Conference展開一系列的Spark課程(開放當天就已經額滿了XD),由於小弟我沒有負責任何課程,所以有時間來建課程環境.因為環境要考量比賽以及教學使用,所以架設上相對複雜一點.
相關文章:
[Apache Spark][Docker] 利用Jupyterhub打造隨開即用的spark教學環境
[Apache Spark][Docker] 利用Jupyterhub打造隨開即用的spark教學環境--HiveContext設定
[Apache Spark][Docker] 利用Jupyterhub打造隨開即用的spark教學環境-- numpy 設定



SoftLayer贊助我們的四台機器既然是實體機,為了讓效能發揮到最大,所以直接在上面建立hadoop和spark stand alone集群,這部分比較沒有問題.比較複雜的問題在於教學環境因為要供上課的人同時使用(未來也會開放給社群的人使用),使用者相對又多又雜,直接開帳號技術上當然沒問題,但是在管理以及環境維護上也相對麻煩.所以概念上想透過docker來區隔環境,讓guest使用者連到docker中,並透過submit的方式將spark任務丟到實體環境中執行.
為了教學便利性,需要能互動的IDE介面,這時候除了ipython notebook當然沒有不二人選(因為都用pyspark嘛),因為有多個帳號需要管理,最後找到了JupyterHub,可以簡單利用系統帳號的來區隔登入的帳號,目錄以及相關設定.


角色都決定了,設下就是怎麼把他們兜起來了.這是最終的Framework:


enter image description here


用Docker下載JupyterHub和Spark很簡單,重要的是在Jupyter中啟動Spark Context時,要將Master指向實體機中的Master位置(透過內部ip:port).因為同時上線的人數超過36個,避免有人開啟Spark Context時開大太,資源分配不足,所以把sc寫在/home/user_id/.ipython/profile_default/startup 裡面:

enter image description here


這樣使用者只要開啟新的notebook,就會自動內建sc,也可以透過hadoop URI存取hdfs上的資料:
enter image description here
enter image description here

因為JupyterHub的帳號管理是跟著系統帳號,所以知道JupyterHub帳號的人,也表示可以用同樣的帳號連到主機(是也可以在帳號那邊設定禁止login),全部放到docker裡比較安全(docker 只開放必要的port出來).另外怕這種極端狀況造成系統不穩,放在docker當掉重開就是了,可以避免主機整台掛掉的情況(希望如此).


最後感謝IBM和SoftLayer的贊助:


enter image description here
圖片來源:SoftLayer