ubuntu下hadoop,spark配置

轉載來自:http://www.cnblogs.com/spark-china/p/3941878.htmlhtml

  1. 在VMWare 中準備第2、第三臺運行Ubuntu系統的機器;

 

在VMWare中構建第2、三臺運行Ubuntu的機器和構建第一臺機器徹底同樣,再次不在贅述。。node

與安裝第一臺Ubuntu機器不一樣的幾點是:shell

第一點:咱們把第2、三臺Ubuntu機器命名爲了Slave一、Slave2,以下圖所示:vim

建立完的VMware中就有三臺虛擬機了:緩存

第二點:爲了簡化Hadoop的配置,保持最小化的Hadoop集羣,在構建第2、三臺機器的時候使用相同的root超級用戶的方式登陸系統。bash

2.按照配置僞分佈式模式的方式配置新建立運行Ubuntu系統的機器;

按照配置僞分佈式模式的方式配置新建立運行Ubuntu系統的機器和配置第一臺機器徹底相同, 網絡

      下圖是家林徹底安裝好後的截圖:app

3.  配置Hadoop分佈式集羣環境

根據前面的配置,咱們如今已經有三臺運行在VMware中裝有Ubuntu系統的機器,分別是:Master、Slave一、Slave2;ssh

下面開始配置Hadoop分佈式集羣環境:分佈式

Step 1:在/etc/hostname中修改主機名並在/etc/hosts中配置主機名和IP地址的對應關係:

咱們把Master這臺機器做爲Hadoop的主節點,首先看一下Master這臺機器的IP地址:

能夠看到當前主機的ip地址是「192.168.184.133」.

咱們在/etc/hostname中修改主機名:

進入配置文件:

能夠看到按照咱們裝Ubuntu系統時候的默認名稱,配置文件中的機器的名稱是」 rocky-virtual-machine」,咱們把」 rocky-virtual-machine」改成「Master」做爲Hadoop分佈式集羣環境的主節點:

保存退出。此時使用如下命令查看當前主機的主機名:

發現修改的主機名沒有生效,爲使得新修改的主機名生效,咱們從新啓動系統後再次查看主機名:

發現咱們的主機名成爲了修改後的「Master」,代表修改爲功。

打開在/etc/hosts 文件:

此時咱們發現文件中只有Ubuntu系統的原始ip(127.0.0.1)地址和主機名(localhost)的對應關係:

咱們在/etc/hosts中配置主機名和IP地址的對應關係:

修改以後保存退出。

 

接下來咱們使用「ping」命令看一下主機名和IP地址只見的轉換關係是否正確:

能夠看到此時咱們的主機「Master」對應的IP地址是「192.168.184.133」,這代表咱們的配置和運行都是正確的。

進入第二臺機器,看一下這臺主機的IP地址:

能夠看出這臺主機的IP地址是「192.168.184.131」.

咱們在/etc/hostname中把主機名稱修改成「Slave1」:

保存退出。

爲了使修改生效,咱們從新啓動該機器,此時查看主機名:

代表咱們的修改生效了。

進入第三臺機器,看一下這臺主機的IP地址:

能夠看出這臺主機的IP地址是「192.168.184.132」.

咱們在/etc/hostname中把主機名稱修改成「Slave2」:

保存退出。

爲了使修改生效,咱們從新啓動該機器,此時查看主機名:

代表咱們的修改生效了。

 

如今, Slave1上的/etc/hosts中配置主機名和IP地址的對應關係,打開後:

此時咱們修改成配置文件爲:

把「Master」和「Slave1」和「Slave2」的主機名和IP地址的對應關係都配置進去。保存退出。

咱們此時ping一下Master這個節點發現網絡訪問沒有問題:

接着,在 Slave2上的/etc/hosts中配置主機名和IP地址的對應關係,配置完後以下:

保存退出。

 

此時咱們ping一下Master和Slave1發現均可以ping通;

 

最後把在 Master上的/etc/hosts中配置主機名和IP地址的對應關係,配置完後以下:

此時在Master上使用ping命令和Slave1和Slave2這兩臺機器進行溝通:

發現此時已經ping通了兩個slave節點的機器。

最後咱們在測試一下Slave1這臺機器和Master、Slave2的通訊:

到目前爲止,Master、Slave一、Slave2這三臺機器之間實現了相互通訊!

Step 2:SSH無密碼驗證配置

首先咱們看一下在沒有配置的狀況下Master經過SSH協議訪問Slave1的狀況:

此時會發現咱們是須要密碼的。咱們不登錄進去,直接退出。

怎麼使得集羣可以經過SSH免登錄密碼呢?

按照前面的配置,咱們已經分佈在Master、Slave一、Slave2這三臺機器上的/root/.ssh/目錄下生成一個私鑰id_rsa和一個公鑰id_rsa.pub。

此時把Slave1的id_rsa.pub傳給Master,以下所示:

同時把Slave2的id_rsa.pub傳給Master,以下所示:

在Master上檢查一下是否複製了過來:

此時咱們發現Slave1和Slave2節點的公鑰已經傳輸過來

Master節點上綜合全部公鑰:

將Master的公鑰信息authorized_keys複製到Slave1和Slave1的.ssh目錄下:

此時再次經過SSH登陸Slave1和Slave2:

此時Master經過SSH登陸Slave1和Slave2已經不須要密碼,一樣的Slave1或者Slave2經過SSH協議登陸另外兩臺機器也不須要密碼了。

Step 3:修改Master、Slave一、Slave2的配置文件

 

首先修改Master的core-site.xml文件,此時的文件內容是:

咱們把「localhost」域名修改成「Master」:

一樣的操做分別打開Slave1和Slave2節點core-site.xml,把「localhost」域名修改成「Master」。

其次修改Master、Slave一、Slave2的mapred-site.xml文件.

進入Master節點的mapred-site.xml文件把「localhost」域名修改成「Master」,保存退出。

同理,打開Slave1和Slave2節點mapred-site.xml,把「localhost」域名修改成「Master」,保存退出。

最後修改Master、Slave一、Slave2的hdfs-site.xml文件:

咱們把三臺機器上的「dfs.replication」值由1改成3,這樣咱們的數據就會有3份副本:

保存退出。

Step 4:修改兩臺機器中hadoop配置文件的masters和slaves文件

首先修改Master的masters文件:

進入文件:

把「localhost」改成「Master」:

保存退出。

修改Master的slaves文件,

進入該文件:

具體修改成:

保存退出。

從上面的配置能夠看出咱們把Master即做爲主節點,又做爲數據處理節點,這是考慮咱們數據的3份副本而而咱們的機器臺數有限所致。

把Master配置的masters和slaves文件分別拷貝到Slave1和Slave2的Hadoop安裝目錄下的conf文件夾下:

進入Slave1或者Slave2節點檢查masters和slaves文件的內容:

發現拷貝徹底正確。

至此Hadoop的集羣環境終於配置完成!

4.測試Hadoop分佈式集羣環境;

首先在經過Master節點格式化集羣的文件系統:

輸入「Y」完成格式化:

格式化完成之後,咱們啓動hadoop集羣:

咱們在嘗試一下中止Hadoop集羣:

此時出現了「no datanode to stop」的錯誤,出現這種錯誤的緣由以下:

每次使用 「hadoop namenode -format」命令格式化文件系統的時候會出現一個新的namenodeId,而我咱們在搭建Hadoop單機僞分佈式版本的時候往咱們本身建立的tmp目錄下放了數據,如今須要把各臺機器上的「/usr/local/hadoop/hadoop-1.2.1/」下面的tmp及其子目錄的內容清空,於此同時把「/tmp」目錄下的與hadoop相關的內容都清空,最後要把咱們自定義的hdfs文件夾中的data和name文件夾中的內容清空:

把Slave1和Slave2中一樣的內容均刪除掉。

從新格式化並從新啓動集羣,此時進入Master的Web控制檯:

此時能夠看到Live  Nodes只有三個,這正是咱們預期的,由於咱們Master、Slave一、Slave2都設置成爲了DataNode,固然Master自己同時也是NameNode。

此時咱們經過JPS命令查看一下三臺機器中的進程信息:

發現Hadoop集羣的各類服務都正常啓動。

至此,Hadoop集羣構建完畢。

 在一、2講的從零起步構建好的Hadoop集羣的基礎上構建Spark集羣,咱們這裏採用2014年5月30日發佈的Spark 1.0.0版本,也就是Spark的最新版本,要想基於Spark 1.0.0構建Spark集羣,須要的軟件以下:

 

1.Spark 1.0.0,筆者這裏使用的是spark-1.0.0-bin-hadoop1.tgz, 具體的下載地址是http://d3kbcqa49mib13.cloudfront.net/spark-1.0.0-bin-hadoop1.tgz

以下圖所示:

筆者是保存在了Master節點以下圖所示的位置:

2.下載和Spark 1.0.0對應的Scala版本,官方要求的是Scala必須爲Scala 2.10.x:

 筆者下載的是「Scala 2.10.4」,具體官方下載地址爲http://www.scala-lang.org/download/2.10.4.html 下載後在Master節點上保存爲:

第二步:安裝每一個軟件

 安裝Scala

  1. 打開終端,創建新目錄「/usr/lib/scala」,以下圖所示:

 

 

 

    2.解壓Scala文件,以下圖所示:

把解壓好的Scala移到剛剛建立的「/usr/lib/scala」中,以下圖所示

3.修改環境變量:

進入以下圖所示的配置文件中:

按下「i」進入INSERT模式,把Scala的環境編寫信息加入其中,以下圖所示:

從配置文件中能夠看出,咱們設置了「SCALA_HOME」並把Scala的bin目錄設置到了PATH中。

按下「esc「鍵回到正常模式,保存並退出配置文件:

執行如下命令是配置文件的修改生效:

4.在終端中顯示剛剛安裝的Scala版本,以下圖所示

發現版本是」2.10.4」,這正是咱們指望的。

當咱們輸入「scala」這個命令的的時候,能夠直接進入Scala的命令行交互界面:

此時咱們輸入「9*9」這個表達式:

此時咱們發現Scala正確的幫咱們計算出告終果 。

此時咱們完成了Master上Scala的安裝;

 

因爲咱們的 Spark要運行在Master、Slave一、Slave2三臺機器上,此時咱們須要在Slave1和Slave2上安裝一樣的Scala,使用scp命令把Scala安裝目錄和「~/.bashrc」都複製到Slave1和Slave2相同的目錄之之下,固然,你也能夠按照Master節點的方式手動在Slave1和Slave2上安裝。

 

在Slave1上Scala安裝好後的測試效果以下:

在Slave2上Scala安裝好後的測試效果以下:

至此,咱們在Master、Slave一、Slave2這三臺機器上成功部署Scala。

安裝Spark

 

Master、Slave一、Slave2這三臺機器上均須要安裝Spark。

首先在Master上安裝Spark,具體步驟以下:

第一步:把Master上的Spark解壓:

咱們直接解壓到當前目錄下:

此時,咱們建立Spark的目錄「/usr/local/spark」:

把解壓後的「spark-1.0.0-bin-hadoop1」複製到/usr/local/spark」下面:

第二步:配置環境變量

       進入配置文件:

在配置文件中加入「SPARK_HOME」並把spark的bin目錄加到PATH中:

配置後保存退出,而後使配置生效:

第三步:配置Spark

 

進入Spark的conf目錄:

在配置文件中加入「SPARK_HOME」並把spark的bin目錄加到PATH中:

把spark-env.sh.template 拷貝到spark-env.sh:

使用vim打開spark-env.sh:

在配置文件中添加以下配置信息:

其中:

JAVA_HOME:指定的是Java的安裝目錄;

SCALA_HOME:指定的是Scala的安裝目錄;

SPARK_MASTER_IP:指定的是Spark集羣的Master節點的IP地址;

SPARK_WORKER_MEMOERY:指定的Worker節點可以最大分配給Excutors的內存大小,由於咱們的三臺機器配置都是2g,爲了最充分的使用內存,這裏設置爲了2g;

HADOOP_CONF_DIR:指定的是咱們原來的Hadoop集羣的配置文件的目錄;

 

保存退出。

接下來配置Spark的conf下的slaves文件,把Worker節點都添加進去:

打開後文件的內容:

咱們須要把內容修改成:

能夠看出咱們把三臺機器都設置爲了Worker節點,也就是咱們的主節點便是Master又是Worker節點。

保存退出。

上述就是Master上的Spark的安裝。

啓動並查看集羣的情況

第一步:啓動Hadoop集羣,這個在第二講中講解的很是細緻,在此再也不贅述:

啓動以後在Master這臺機器上使用jps命令,能夠看到以下進程信息:

在Slave1 和Slave2上使用jps會看到以下進程信息:

第二步:啓動Spark集羣

 在Hadoop集羣成功啓動的基礎上,啓動Spark集羣須要使用Spark的sbin目錄下「start-all.sh」:

接下來使用「start-all.sh」來啓動Spark集羣!

讀者必須注意的是此時必須寫成「./start-all.sh」來代表是當前目錄下的「start-all.sh」,由於咱們在配置Hadoop的bin目錄中也有一個「start-all.sh」文件!

 此時使用jps發現咱們在主節點正如預期同樣出現了「Master」和「Worker」兩個新進程!

此時的Slave1和Slave2會出現新的進程「Worker」:

此時,咱們能夠進入Spark集羣的Web頁面,訪問「http://Master:8080」: 以下所示:

從頁面上咱們能夠看到咱們有三個Worker節點及這三個節點的信息。

此時,咱們進入Spark的bin目錄,使用「spark-shell」控制檯:

此時咱們進入了Spark的shell世界,根據輸出的提示信息,咱們能夠經過「http://Master:4040」 從Web的角度看一下SparkUI的狀況,以下圖所示:

固然,你也能夠查看一些其它的信息,例如Environment:

同時,咱們也能夠看一下Executors:

能夠看到對於咱們的shell而言,Driver是Master:50777.

 

至此,咱們 的Spark集羣搭建成功,Congratulations!

第一步:經過Spark的shell測試Spark的工做

 

Step1:啓動Spark集羣,這一點在第三講講的極爲細緻,啓動後的WebUI以下:

Step2:啓動Spark Shell:

此時能夠經過以下Web控制檯查看shell的狀況:

Step3:把Spark安裝目錄「README.md」拷貝到HDFS系統上

在Master節點上新啓動一個命令終端,並進入到Spark安裝目錄下:

咱們把文件拷貝到HDFS的root文件夾下:

此時,咱們觀察一下Web控制檯,會發現該文件已經成功上傳到HDFS上:

 

Step4:在Spark shell之下操做編寫代碼,操做咱們上傳的「README.md」:

首先,咱們看一下在Shell環境下的「sc」這個自動幫助咱們生產的環境變量:

能夠看出sc就是SparkContext的實例,這是在啓動Spark Shell的時候系統幫助咱們自動生成的,SparkContext是把代碼提交到集羣或者本地的通道,咱們編寫Spark代碼,不管是要運行本地仍是集羣都必須有SparkContext的實例。

接下來,咱們讀取「README.md」這個文件:

咱們把讀取的內容保存給了file這個變量,其實file是一個MappedRDD,在Spark的代碼編寫中,一切都是基於RDD操做的;

 

再接下來,咱們從讀取的文件中過濾出全部的「Spark」這個詞

此時生成了一個FilteredRDD;

再接下來,咱們統計一下「Spark」一共出現了多少次:

從執行結果中咱們發現「Spark」這個詞一共出現了15次。

此時,咱們查看Spark Shell的Web控制檯:

發現控制檯中顯示咱們提交了一個任務併成功完成,點擊任務能夠看到其執行詳情:

那咱們如何驗證Spark Shell對README.md這個文件中的「Spark」出現的15次是正確的呢?其實方法很簡單,咱們可使用Ubuntu自帶的wc命令來統計,以下所示:

發現此時的執行結果也是15次,和Spark Shell的計數是同樣同樣的。

第二步:使用Spark的cache機制觀察一下效率的提高

 

基於上面的內容,咱們在執行一下如下語句:

發現一樣計算結果是15.

此時咱們在進入Web控制檯:

發現控制檯中清晰展現咱們執行了兩次「count」操做。

如今咱們把「sparks」這個變量執行一下「cache」操做:

此時在執行count操做,查看Web控制檯:

此時發現咱們先後執行的三次count操做耗時分別是0.7s、0.3s、0.5s。

此時咱們 第四次執行count操做,看一下Web控制檯的效果:

控制檯上清晰的第四次操做僅僅花費了17ms,比前三次的操做速度大約快了30倍的樣子。這就是緩存帶來的巨大速度提高,而基於緩存是Spark的計算的核心之一!

 

第三步:構建Spark的IDE開發環境

 

Step 1:目前世界上Spark首選的InteIIiJ IDE開發工具是IDEA,咱們下載InteIIiJ IDEA:

這裏下載是最新版本Version 13.1.4:

關於版本的選擇,官方給出了以下選擇依據:

咱們在這裏選擇Linux系統下的」Community Edition FREE」這個版本,這能徹底知足咱們任意複雜程度的Scala開發需求。

家林下載完成後保存在本地的以下位置:

Step 2:安裝IDEA並配置IDEA系統環境變量

建立「/usr/local/idea」目錄:

把咱們下載的idea壓縮包解壓到該目錄下:

安裝完成後,爲了方便使用其bin目錄下的命令,咱們把它配置在「~/.bashrc」:

【Spark亞太研究院系列叢書】Spark實戰高手之路-第一章 構建Spark集羣(第四步)(3)

配置完成後保存退出並執行source命令使配置文件生效。

Step 3:運行IDEA並安裝和配置IDEA的Scala開發插件:

官方文檔指出:

咱們進入IDEA的bin目錄:

此時,運行「idea.sh」出現以下界面:

此時須要選擇「Configure」進入IDEA的配置頁面:

選擇「Plugins」,進入插件安裝界面:

此時點擊左下角的「Install JetBrains plugin」選項進入以下頁面:

在左上方的輸入框中輸入「scala」來查找scala插件:

此時點擊右側的「Install plugin」:

選擇「Yes」便可開啓Scala插件在IDEA中的自動安裝過程。

此時大約須要花費2分鐘去下載安裝,固然,網速不一樣下載的耗時也會有所不一樣:

此時重啓IDEA:

此時重啓IDEA:

重啓後進入以下界面:

Step 4:在IDEA中編寫Scala代碼:

 

首先在進入在咱們前一步的進入界面中選擇「Create New Project」:

此時選在左側列表中的「Scala」選項:

爲了方便之後的開發工做,咱們選擇右側的「SBT」選項:

點擊「Next」進入下一步,設置Scala工程的名稱和目錄:

點擊「Finish」完成工程的建立:

因爲咱們在前面選擇了「SBT」選擇,因此IDEA此時智能的幫助咱們構建SBT工具:

咱們點擊工程名稱「HelloScala」:

 

IDEA自動完成SBT工具的安裝須要一段時間,家林這裏花了大約5分鐘的時間,SBT好後SBT會自動幫咱們創建好一些目錄:

此時右擊src下的main下的scala在彈出的「New」下選擇「Scala  Class」

輸入文件名稱:

把Kinde選擇爲「Object」:

點擊「OK」完成:

【Spark亞太研究院系列叢書】Spark實戰高手之路-第一章 構建Spark集羣(第四步)(5)

此時把咱們的「firstScalaApp」的源代碼修改成以下內容:

此時咱們點擊「firstScalaApp」的右鍵選擇「Run Scala Console」出現以下提示:

這是因爲咱們尚未設置Java的JDK路徑,點擊「OK」,進入以下視圖:

此時咱們選擇最左側的「Project」選項:

此時咱們選擇「No SDK」的「New」初選以下視圖:

點擊「JDK」選項:

選擇咱們在前面安裝的JDK的目錄:

點擊「OK」

點擊確認按鈕:

此時直接點擊代碼區出現以下視圖:

咱們選擇「Run ‘firstScalaApp’」來運行程序:

第一運行Scala會有些緩慢,運行結果以下圖所示:

此時成功打印出「Hello Scala!」這個字符串。

此時代表程序運行成功。

 

Step 5:若是咱們要用很酷的黑色背景,能夠

File -> Settings -> Appearance -> Theme選擇Darcula:

 

 

第四步:經過Spark的IDE搭建並測試Spark開發環境

 

Step 1:導入Spark-hadoop對應的包,次選擇「File」–> 「Project Structure」 –> 「Libraries」,選擇「+」,將spark-hadoop 對應的包導入:

點擊「OK」確認:

點擊「OK」:

IDEA工做完成後會發現Spark的jar包導入到了咱們的工程中:

Step 2:開發第一個Spark程序。打開Spark自帶的Examples目錄:

此時發現內部有不少文件,這些都是Spark給我提供的實例。

在咱們的在咱們的第一Scala工程的src下建立一個名稱爲SparkPi的Scala的object:

此時打開Spark自帶的Examples下的SparkPi文件:

咱們把該文的內容直接拷貝到IDEA中建立的SparkPi中:

第五步:測試Spark IDE開發環境

此時咱們直接選擇SparkPi並運行的話會出現以下錯誤提示:

從提示中能夠看出是找不到Spark程序運行的Master機器。

此時須要配置SparkPi的執行環境:

選擇「Edit Configurations」進入配置界面:

咱們在Program arguments中輸入「local」:

此配置說明咱們的程序以local本地的模式運行,配置好後保存。

此時再次運行程序便可。

相關文章
相關標籤/搜索