這樣搭建Spark學習環境效率似乎更高

轉自我的個人博客:https://showme.codes/2017-01-31/setup-spark-dev-env/

像學習Spark這類大數據平臺,搭建環境,是一件很費時費力的事情。特別是當你想使用多臺機器模擬真實生產環境時。

為了更有效的學習Spark,我決定將自己的學習環境按生產環境的要求來搭建。但是真實生產環境的群集往往由多個集群組成:Hadoop/Hbase集群、Zookeeper集群、Spark集群。掐指一算,至少需要6臺機器了。

我們真的需要買6臺機器嗎?當然不是,我們只需要在自己的電腦上虛擬化出6臺就好了。而我的電腦只有16G,虛擬化6臺太吃力了。最終,我決定搭建成以下結構:

Paste_Image.png

以下是搭建過程:

環境的搭建

按以前學習像Spring這些類Web,開發環境的搭建非常簡單,也就引入幾個依賴,添加幾項配置,就好了。

但是學習Spark,我敢?肯定不少人在環境搭建這一環節踩坑。正因為這樣,才會有此博客。

Spark不是一框架,而是一個分布式的計算平臺。所以,你不能通過引入依賴,添加配置就完成搭建。需要先將Spark這個平臺部署起來。Spark支持4種部署方式:

  1. 單機:同一臺機器,同一進程,不同線程運行Master和Worker
  2. 偽分布式:同一臺機器,不同進程分別運行Master和Worker
  3. Standalone方式:多臺機器分別運行Master和Worker,自己解決資源調度
  4. Yarn和Mesos方式:將資源調度這一職責外包出去

雖然Spark的單機部署方式很簡單,但是沒有人會在生產環境上使用單機部署方式。而偽分布式我見不少人搭建,以此為基礎來學習Spark。但我不推薦。

因為在線上真正運行的是Standalone、Yarn、Mesos方式,也稱為完全分布式的方式。只有一開始就使用完全分布式的方式來進行開發調試,你才會學習到生產環境會遇到什么問題。

機器準備

?如果采取完全分布式的部署方式來學習,你必須準備?很多臺機器,就像上面所說的。

我想大多數人都會選擇虛擬化方案來得到多臺機器。我推薦Virtualbox。

我見不少人手工的創建一臺機器,然后安裝操作系統,接著想要多少臺機器,就復制幾臺,甚至還要分別進入機器修改每臺機器的IP。。。

這樣的方式,效率低,又很難與你的同事分享你的環境(也就是統一一個團隊的開發環境,以避免不同開發環境不同引起的問題)。

所以,我一開始就使用Vagrant。把機器的虛擬化這一動作進行自動化和版本化(提交到git倉庫中)。使用了Vagrant,你只需要在Vagrantfile中定義機器數據、機器的系統鏡像、CPU個數、內存,然后執行vagrant up,就可以得到你想要的機器了。要與同事統一這些機器,只需要他使用相同的Vagrantfile就好了。
同時,這樣,還能實現:統一開發環境與生產環境使用同樣或相近的機器環境。

以下是一個Vagrantfile樣例

Vagrant.configure(2) do |config|
  VAGRANT_VM_PROVIDER = "virtualbox"
  machine_box = "boxcutter/ubuntu1604"  -> 系統鏡像

  config.vm.define "offlinenode1" do |machine|
    machine.vm.box = machine_box 
    machine.vm.hostname = "offlinenode1"
    machine.vm.network "private_network", ip: "192.168.11.151" -> 指定IP
    machine.vm.provider "virtualbox" do |node|
        node.name = "offlinenode1"
        node.memory = 4096 -> 指定內存
        node.cpus = 2 -> 指定CPU個數
    end
   end

   config.vm.define "offlinenode2" do |machine|
     machine.vm.box = machine_box
     machine.vm.hostname = "offlinenode2"
     machine.vm.network "private_network", ip: "192.168.11.152"
     machine.vm.provider "virtualbox" do |node|
         node.name = "offlinenode2"
         node.memory = 4096
         node.cpus = 2
     end
    end
....... 還可以定義很多這樣的機器
end

搭建Spark集群

在準備好機器后,接下來做的就是搭建Spark集群。我會選擇Ansible來實現自動化搭建,而不是一臺臺機器登上去,一條條命令的執行安裝。

那么,只是學習階段,我為什么要自動化呢?正因為在學習階段,我們更要自動化搭建過程。作為新手很容易把環境弄亂了,又沒法一下子查到原因。但是自動化后,意味著版本化了搭建腳本,查原因時,只要對比版本庫就好了。

同時,也因為我要搭建的是Spark完全分布式,需要上3臺機器,除了安裝Spark,還需要安裝Hadoop。如果不自動化這整個過程,學習過程會浪費很多時間在重復工作上。

題外話:很多人反對項目開始時就考慮自動化所有的部署流程,理由是成本高(指人力成本),先實現功能再說。這兩點理由是站不住腳的,因為如果一開始不自動化,你后期返回來再補,成本會更高。因為會有歷史負擔!

監控集群

為什么我們要學習過程中就加上監控?寫出剛剛能運行的Spark應用,不難,但是誰知道你寫的應用的性能如何,有沒有發揮所有機器的作用呢?所以,我在一開始就會加上監控。
目前,我還沒有完成這部分工作。

自動化Submit提交Spark應用

在搭建好了Spark集群后,我們就可以寫Spark應用,然后將應用提交到Spark集群中運行。我們采用集群模式來submit spark應用,在集群中某臺Spark node上手工執行命令來提交:

./bin/spark-submit \
  --class codes.showme.HbaseExample \
  --master spark://192.168.11.153:7077 \
  --deploy-mode cluster
  --executor-memory 1G \
  --total-executor-cores 2 \
  /home/spark/spark/example.jar 

如果不自動這個過程,你需要做:

  1. 在開發環境將應用打成jar包
  2. 手工將jar包copy上指定機器指定路徑
  3. 執行命令

所以,我又將這個過程寫成了Ansible腳本,你只需要在./ansible/下執行:
./deploy-hbase-example.sh 就完成submit的操作了。

最后,我們的應用如果要上CI,完全沒有壓力!

小結

以上是我個人的Spark學習環境搭建方法。希望有經驗的同學能多多指教。
這是最終搭建好的環境:spark2-hadoop2.6-hbase-labs

祝大家學習愉快。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,825評論 6 546
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,814評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,980評論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 64,064評論 1 319
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,779評論 6 414
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,109評論 1 330
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,099評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,287評論 0 291
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,799評論 1 338
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,515評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,750評論 1 375
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,221評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,933評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,327評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,667評論 1 296
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,492評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,703評論 2 380

推薦閱讀更多精彩內容