1. 程式人生 > >Hadoop單機/偽分散式叢集搭建(新手向)

Hadoop單機/偽分散式叢集搭建(新手向)


此文已由作者朱笑笑授權網易雲社群釋出。

歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。



本文主要參照官網的安裝步驟實現了Hadoop偽分散式叢集的搭建,希望能夠為初識Hadoop的小夥伴帶來借鑑意義。

環境:

(1)系統環境:CentOS 7.3.1611 64位

(2)Java版本:OpenJDK 1.8.0

配置Hadoop單節點叢集前準備

1、建立hadoop使用者:

 新建使用者用於hadoop使用:

(1)開啟終端,輸入命令su,回車,輸入root的密碼以root使用者登入,並建立名為hadoop的新使用者:

  • useradd -m Hadoop -s /bin/bash


(2)修改使用者密碼:

  • passwd hadoop


(3)為使用方便,給hadoop使用者提升許可權,否則hadoop使用者在使用sudo命令時會報出:hadoop不在sudoers檔案中。此事將被報告;

a. 切換到root使用者,檢視/etc/sudoers檔案許可權,預設許可權為只讀

       04685699-bc57-491a-83c1-d41bebce7267


b. 修改/etc/sudoers檔案許可權為讀寫許可權:chmod 777 /etc/sudoers


 c. 修改/etc/sudoers檔案內容,執行visudo或者vim /etc/sudoers


如下圖,在 root ALL=(ALL) ALL 這行下面增加一行內容:hadoop ALL=(ALL) ALL (當中的間隔為tab,說明:格式為{使用者名稱 網路中的主機=(執行命令的目標使用者) 執行的命令範圍}),如下圖所示:

     c6b08aee-5fb5-46ae-8e41-8df5f6c61329


若要在執行sudo命令時免輸入密碼,可以將上述新增的內容改為:hadoop ALL=(ALL) NOPASSWD:ALL。

d. 儲存退出,恢復/etc/sudoers檔案的訪問許可權為440;

(4)切換至hadoop使用者;

2、安裝SSH及配置免密碼登入

 叢集和單節點模式都需要使用SSH登陸,一般情況下,CentOS中預設安裝了SSH client、SSH server,可以通過以下命令進行檢驗:

  • rpm -qa | grep ssh


若已經安裝,則返回如下內容,說明已經包含了SSH client和SSH server,無需再安裝:

       a4628f5b-99e7-4043-ae5a-7993fa0e9a43


 若沒有安裝SSH client、SSH server,則可以通過yum進行安裝:

  • sudo yum install openssh-clients

  • sudo yum install openssh-server


測試SSH是否可用,可輸入如下命令:

  • ssh localhost


首次登陸出現如下提示(圖中為使用root使用者登入,hadoop使用者同理),輸入yes即可,在使用者的主資料夾(/home/使用者名稱)下會生成.ssh目錄。然後根據提示輸入hadoop使用者密碼,登陸本機:

      f0a0368c-ead8-4f4f-94b0-80c0b91141b2


我們發現每一次使用ssh登入都需要輸入密碼,為方便起見,配置ssh為免密碼登入:

(1)切換為hadoop使用者;

(2)利用ssh-keygen生成金鑰,並將金鑰加入到授權中,修改授權檔案許可權:

  • cd ~/.ssh/

  • ssh-keygen -t rsa

  • cat id_rsa.pub >>authorized_keys

  • chmod 600 ./authorized_keys


 此時,使用ssh localhost無需密碼便可登陸。

3、安裝Java環境

Java環境可以選擇Oracle的JDK,或者OpenJDK。按照https://wiki.apache.org/hadoop/HadoopJavaVersions中所說,hadoop 2.7版本及以後的版本至少要求Java 7。CentOS 7.3下預設安裝了OpenJDK 1.8,但只是Java JRE,不是JDK,為便於開發,建議安裝JDK。

建議使用yum進行安裝,預設安裝路徑為/usr/lib/jvm/java-1.8.0-openjdk:

        1cacdc13-8886-46c9-8df5-41c423e4906a


安裝成功後配置JAVA_HOME環境變數:

  • vim ~/.bashrc


在最後一行新增變數:

        df1fd700-2caa-41aa-a96a-ebc857c82a0a


使環境變數生效:

  • source ~/.bashrc


設定好後檢驗一下是否正確,輸出一下內容則設定正確:

        2788c2d2-6489-4ca9-afa5-b77c2ef8a34f

安裝Hadoop

通過http://www.apache.org/dyn/closer.cgi/hadoop/common/下載Hadoop,這裡選擇了Hadoop 2.7.3版本,下載時選擇hadoop-2.7.3.tar.gz格式,其中src格式的為Hadoop的原始碼,需要進行編譯後才可使用。

     安裝Hadoop至/usr/local/中(也可選擇別的路徑),Hadoop解壓後即可使用:

  • sudo tar -zxf ~/Download/hadoop-2.7.3.tar.gz -C /usr/local

  • cd /usr/local/

  • sudo mv ./hadoop-2.7.3/ ./hadoop 

  • sudo chown -R hadoop:hadoop ./hadoop

     檢查Hadoop是否可用:

  • cd /usr/local/hadoop

  • ./bin/hadoop version

說明:若未進行Java的環境變數配置,想要./bin/hadoop執行成功,則需要修改hadoop的etc/hadoop/hadoop-env.sh檔案中的JAVA_HOME變數,指定為java路徑,如圖:

        28b9c4a2-39b3-4ce3-a6fe-1426616d4917

至此,Hadoop預設模式即本地模式(單機模式)已經配置成功。

Hadoop偽分散式配置

Hadoop可以在單節點上以偽分散式的方式執行,Hadoop程序以分離的Java進行來執行,節點既作為Namenode也作為DataNode,同時,讀取的是Hdfs中的檔案。

偽分散式需要修改2個配置檔案core-site.xml和hdfs-site.xml,配置檔案位於hadoop的/etc/hadoop資料夾下。

修改core-site.xml為:

        cf0a4206-166f-4d15-a195-e47c43e9dd4f


 修改hdfs-site.xml為:

        b6d5f379-9462-4a6e-999c-53e8bb479f53


 修改配置檔案成功後,通過ssh登陸:

        6f514bf5-a259-4a61-84d1-bd129ed65267


 執行NameNode的格式化:

        e0fcfbc2-65b8-43e7-a1d9-4b434e7f85f9


出現如圖情況,表示成功,若“Exitting with status 1”則是出錯:

        6f142493-30d1-4ba5-ab47-553593844c2f



 接下去開啟NameNode和DataNode守護程序:

        9a370ca2-51ea-463a-bd56-262fe9563721


若出現SSH的提示,輸入yes即可:

        3a3ff816-2028-439c-b28b-794bdbf7ad1a


啟動完成後,通過jsp來判斷是否成功啟動,若成功啟動則會列出如下程序,如果沒有NameNode或DataNode,則表明配置不成功,需要檢查上述步驟或通過啟動日誌排查,日誌記錄在hadoop的logs資料夾中:

        6d57dbad-242a-4485-9dc7-2a67b502e52b


成功啟動後,可以訪問http://localhost:50070來檢視NameNode和Datanode資訊及HDFS中檔案:

        fc13e94f-c16d-4ee1-aacf-ad2756a463c9


執行Hadoop偽分散式例項

單機模式grep讀取的是本地資料,偽分散式讀取的則是Hdfs上的資料。

 執行MR任務需要在Hdfs上建立使用者目錄,這裡<username>為hadoop:

        26bdd807-5620-47f4-b094-ee426070bbd9


在Hdfs上建立input資料夾作為輸入內容存放的檔案目錄,將hadoop中etc/hadoop資料夾中的檔案複製到Hdfs中:

        ad0fdcd1-12b1-422b-8723-31ca66e9dda7


執行grep任務,偽分散式的MR任務執行方式與單機模式相同,區別在於偽分散式讀取的是HDFS中的檔案,單機模式是讀取本地檔案:

        9087e180-0052-44cf-a6c5-5c3ef1f1c4d4


檢視執行結果,即Hdfs中output結果:


        39eb8b71-3c73-4bbe-8bba-0c5b8204bae5

        a2427e82-d2bd-430d-8f08-108f39c3e051


        Hadoop執行程式時,輸出目錄不能存在,若要再次執行作業,則需要先刪除輸出資料夾:

  • ./bin/hdfs dfs -rm -r output

        關閉程序:

        1f84e562-30d9-4f32-b9e4-f7a003d72544


注意:下次啟動Hadoop時,則無需再次進行NameNode的初始化,只需要執行./sbin/start-dfs.sh即可。

啟動YARN

YARN(Yet Another Resource Negotiator)是新的MapReduce框架,從MapReduce中分離出來,負責資源管理與任務排程。YARN運行於MapReduce之上,提供了高可用性、高擴充套件性。上述的啟動Hadoop僅僅是啟動了MapReduce的環境。

啟動YARN來進行資源管理和任務排程需要修改幾個配置:

 修改配置mapred-site.xml,首先將etc/hadoop/mapred-site.xml.template重名,然後修改配置:


        b861d6b0-8c15-4c37-a152-63df9ac4df4c 


修改yarn-site.xml配置:

        33f73b18-ae3d-4118-ad97-81d50884d0c6


     配置完成後可以啟動YARN,通過執行hadoop中./sbin/start-yarn.sh指令碼來啟動(執行前先執行./sbin/start-dfs.sh):

        09755305-7155-4413-936c-9889cd161cb2


啟動後通過jps檢視,可以看到多了NodeManager和ResourceManager兩個後臺進行,如圖:

        7f03a9ce-c3a0-4fc8-9479-0cb9195db69f


開啟歷史伺服器,便於在Web中檢視任務執行情況:

     da5f5867-faea-4ba2-8435-6d5eddbbe04f


啟動YARN後,執行例項方法與上述一樣。觀察日誌資訊可以發現,不啟動YARN時,是“mapred.LocalJobRunner”在跑任務,啟用YARN之後,是“mapred.YARNRunner”在跑任務。啟動YARN可以通過Web介面檢視任務的執行情況:http://localhost:8088/cluster,如圖:


     35f7181d-8a18-40a5-b767-1e9d11a47170?imageView&thumbnail=980x0

     237394b2-111b-4ca8-8b5e-22b3f1703028?imageView&thumbnail=980x0


關閉YARN和歷史伺服器:

  8cb9eac5-4a56-4783-936d-7dddef20dc64


注意:若不想啟動YARN,需要將mapred-site.xml重新命名,改回mapred-site.xml.template.

Hadoop環境變數配置

上述內容中,我們都是通過先進入到/usr/local/hadoop目錄中,再執行./sbin/[執行指令碼]或./bin/[執行指令碼],為便於平時的操作方便,我們可以配置Path環境變數來簡化我們的操作,配置如下,完成後便可直接執行hadoop中./sbin和./bin目錄下的指令碼:

 8de57abc-2d32-4445-a1be-9d847623112e


網易雲免費體驗館,0成本體驗20+款雲產品! 

更多網易技術、產品、運營經驗分享請點選

相關文章:
【推薦】 NOS服務監控實踐
【推薦】 如何準確又通俗易懂地解釋大資料及其應用價值?
【推薦】 MongoDB的正確使用姿勢