1. 程式人生 > >Linux上安裝Hadoop叢集(CentOS7+hadoop-2.8.0)

Linux上安裝Hadoop叢集(CentOS7+hadoop-2.8.0)

 關鍵字:Linux  CentOS  Hadoop  Java

 版本:  CentOS7  Hadoop2.8.0  JDK1.8

 說明:Hadoop從版本2開始加入了Yarn這個資源管理器,Yarn並不需要單獨安裝。只要在機器上安裝了JDK就可以直接安裝Hadoop,單純安裝Hadoop並不依賴Zookeeper之類的其他東西。

1下載hadoop

    本博文使用的hadoop是2.8.0

   開啟下載地址選擇頁面:

 如圖:

我使用的地址是:

2安裝3個虛擬機器並實現ssh免密碼登入

2.1安裝3個機器

     這裡用的Linux系統是CentOS7(其實Ubuntu也很好,但是這裡用的是CentOS7演示),安裝方法就不多說了,如有需要請參考該博文:

        安裝3個機器,機器名稱分別叫hserver1、hserver2、hserver3(說明機器名不這麼叫可以,待會用hostname命令修改也行)。

如圖:

   

說明:為了免去後面一系列授權的麻煩,這裡直接使用root賬戶登入和操作了。

          使用ifconfig命令,檢視這3個機器的IP。我的機器名和ip的對應關係是:

192.168.119.128   hserver1

192.168.119.129   hserver2

192.168.119.130   hserver3

2.2檢查機器名稱

  為了後續操作方便,確保機器的hostname是我們想要的。拿192.168.119.128這臺機器為例,用root賬戶登入,然後使用hostname

命令檢視機器名稱

如圖:

    

  發現,這個機器名稱不是我們想要的。不過這個好辦, 我給它改個名稱,命令是:

hostname   hserver1

如圖:

   

執行完成後,在檢檢視,是否修改了,敲入hostname命令

 如圖:

      

 類似的,將其他兩個機器,分別改名為hserver2和hserver3。

2.3 修改/etc/hosts檔案

 修改這3臺機器的/etc/hosts檔案,在檔案中新增以下內容:

  1. 192.168.119.128   hserver1  
  2. 192.168.119.129   hserver2  
  3. 192.168.119.130   hserver3  

如圖:

     

          說明:IP地址沒必要和我的一樣,這裡只是做一個對映,只要對映是對的就可以,至於修改方法,可以用vim命令,也可以在你的本地機器上把hosts檔案內容寫好後,拿到Linux機器上去覆蓋。

配置完成後使用ping命令檢查這3個機器是否相互ping得通,以hserver1為例,在什麼執行命令:

 ping  -c 3  hserver2

如圖:

     

       執行命令:

ping  -c  3  hserver3

如圖:

     

        ping得通,說明機器是互聯的,而且hosts配置也正確。

2.4給3個機器生成祕鑰檔案

         以hserve1為例,執行命令,生成空字串的祕鑰(後面要使用公鑰),命令是:

ssh-keygen  -t   rsa   -P  ''

如圖:

     

         因為我現在用的是root賬戶,所以祕鑰檔案儲存到了/root/.ssh/目錄內,可以使用命令檢視,命令是:

ls    /root/.ssh/

如圖:

   

       使用同樣的方法為hserver2和hserver3生成祕鑰(命令完全相同,不用做如何修改)。

2.5在hserver1上建立authorized_keys檔案

          接下來要做的事情是在3臺機器的/root/.ssh/目錄下都存入一個內容相同的檔案,檔名稱叫authorized_keys,檔案內容是我們剛才為3臺機器生成的公鑰。為了方便,我下面的步驟是現在hserver1上生成authorized_keys檔案,然後把3臺機器剛才生成的公鑰加入到這個hserver1authorized_keys檔案裡,然後在將這個authorized_keys檔案複製到hserver2hserver3上面。

       首先使用命令,在hserver1的/root/.ssh/目錄中生成一個名為authorized_keys的檔案,命令是:

touch  /root/.ssh/authorized_keys

如圖:

    

      可以使用命令看,是否生成成功,命令是:

ls   /root/.ssh/

如圖:

    

          其次將hserver1上的/root/.ssh/id_rsa.pub檔案內容,hserver2上的/root/.ssh/id_rsa.pub檔案內容,hserver3上的/root/.ssh/id_rsa.pub檔案內容複製到這個authorized_keys檔案中,複製的方法很多了,可以用cat命令和vim命令結合來弄,也可以直接把這3臺機器上的/root/.ssh/id_rsa.pub檔案下載到本地,在本地將authorized_keys檔案編輯好在上載到這3臺機器上。

hserver1機器上我的/root/.ssh/id_rsa.pub內容是:

  1. ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD8fTIVorOxgDo81yCEgcJTstUcyfOBecL+NZ/OLXCEzaBMw5pLV0UNRX6SZnaAgu/erazkz4sw74zfRIMzEeKKCeNcZ6W78cg+ZNxDcj8+FGeYqY5+nc0YPhXFVI7AwFmfr7fH5hoIT14ClKfGklPgpEgUjDth0PeRwnUTvUy9A1x76npjAZrknQsnoLYle7cVJZ/zO3eGxS75YEdTYDMv+UMiwtcJg7UxOqR+9UT3TO+xLk0yOl8GIISXzMhdCZkmyAH+DmW56ejzsd+JWwCMm177DtOZULl7Osq+OGOtpbloj4HCfstpoiG58SM6Nba8WUXWLnbgqZuHPBag/[email protected]  

hserver2機器上我的/root/.ssh/id_rsa.pub內容是:

  1. ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC29kPkYz4c3bd9Qa1TV8kCR0bUNs4f7/dDcR1NKwrgIiecN7zPEWJpjILtlm3niNNx1j5R49QLTLBKKo8PE8mid47POvNypkVRGDeN2IVCivoAQ1T7S8bTJ4zDECGydFYyKQfS2nOAifAWECdgFFtIp52d+dLIAg1JC37pfER9f32rd7anhTHYKwnLwR/NDVGAw3tMkXOnFuFKUMdOJ3GSoVOZf3QHKykGIC2fz/lsXZHaCcQWvOU/Ecd9e0263Tvqh7zGWpF5WYEGjkLlY8v2sioeZxgzog1LWycUTMTqaO+fSdbvKqVj6W0qdy3Io8bJ29Q3S/[email protected]  

hserver2機器上我的/root/.ssh/id_rsa.pub內容是:

  1. ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC1a2o10ttv2570GpuUZy7g9o7lIkkeed7ba25VvFEBcUroQIZ+NIAiVIMGPRiOqm7X4bTLWj5EOz5JXG2l8rwA6CFnWfW3U+ttD1COLOrv2tHTiJ1PhQy1jJR/LpC1iX3sNIDDs+I0txZFGTCTRMLmrbHVTl8j5Yy/CTYLuC7reIZjzpHP7aaS2ev0dlbQzeB08ncjA5Jh4X72qQMOGPUUc2C9oa/CeCvI0SJbt8mkHwqFanZz/IfhLJIKhupjtYsqwQMmzLIjHxbLRwUGoWU6X4e76OkUz/[email protected]er3  

合併之後,我的hserver1機器上的/root/.ssh/authorized_keys檔案內容是:

  1. ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD8fTIVorOxgDo81yCEgcJTstUcyfOBecL+NZ/OLXCEzaBMw5pLV0UNRX6SZnaAgu/erazkz4sw74zfRIMzEeKKCeNcZ6W78cg+ZNxDcj8+FGeYqY5+nc0YPhXFVI7AwFmfr7fH5hoIT14ClKfGklPgpEgUjDth0PeRwnUTvUy9A1x76npjAZrknQsnoLYle7cVJZ/zO3eGxS75YEdTYDMv+UMiwtcJg7UxOqR+9UT3TO+xLk0yOl8GIISXzMhdCZkmyAH+DmW56ejzsd+JWwCMm177DtOZULl7Osq+OGOtpbloj4HCfstpoiG58SM6Nba8WUXWLnbgqZuHPBag/[email protected]  
  2. ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC29kPkYz4c3bd9Qa1TV8kCR0bUNs4f7/dDcR1NKwrgIiecN7zPEWJpjILtlm3niNNx1j5R49QLTLBKKo8PE8mid47POvNypkVRGDeN2IVCivoAQ1T7S8bTJ4zDECGydFYyKQfS2nOAifAWECdgFFtIp52d+dLIAg1JC37pfER9f32rd7anhTHYKwnLwR/NDVGAw3tMkXOnFuFKUMdOJ3GSoVOZf3QHKykGIC2fz/lsXZHaCcQWvOU/Ecd9e0263Tvqh7zGWpF5WYEGjkLlY8v2sioeZxgzog1LWycUTMTqaO+fSdbvKqVj6W0qdy3Io8bJ29Q3S/[email protected]  
  3. ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC1a2o10ttv2570GpuUZy7g9o7lIkkeed7ba25VvFEBcUroQIZ+NIAiVIMGPRiOqm7X4bTLWj5EOz5JXG2l8rwA6CFnWfW3U+ttD1COLOrv2tHTiJ1PhQy1jJR/LpC1iX3sNIDDs+I0txZFGTCTRMLmrbHVTl8j5Yy/CTYLuC7reIZjzpHP7aaS2ev0dlbQzeB08ncjA5Jh4X72qQMOGPUUc2C9oa/CeCvI0SJbt8mkHwqFanZz/IfhLJIKhupjtYsqwQMmzLIjHxbLRwUGoWU6X4e76OkUz/[email protected]er3  

如圖:

    

2.6將authorized_keys檔案複製到其他機器

hserver1機器的/root/.ssh/目錄下已經有authorized_keys這個檔案了,該檔案的內容也已經OK了,接下來要將該檔案複製到hserver2的/root/.ssh/和hserver3的/root/.ssh/。

       複製的方法有很多,最簡單的就是用SecureFX視覺化工具操作吧。

       複製完成後,可以看到三臺機器的/root/.ssh目錄下都有了這樣的檔案

       如圖:

       

        上圖已經說得很清楚了,三臺機器的/root/.ssh都有同名的檔案,但是隻有authorized_keys檔案的內容是相同的。

2.7測試使用ssh進行無密碼登入

2.7.1在hserver1上進行測試

       輸入命令:

ssh   hserver2

如圖:

  

輸入命令:

 exit回車

如圖:

   

輸入命令:

ssh   hserver3

如圖:

   

輸入命令:

 exit回車

如圖:

    

2.7.2 在hserver2上進行測試

        方法類似2.7.1,只不過命令變成了ssh  hserver1和ssh  hserver3,但是一定要注意的是,每次ssh完成後,都要執行exit,否則你的後續命令是在另外一臺機器上執行的。

2.7.3 在hserver3上進行測試

      方法類似2.7.1,只不過命令變成了ssh  hserver1和ssh  hserver2,但是一定要注意的是,每次ssh完成後,都要執行exit,否則你的後續命令是在另外一臺機器上執行的。

3安裝jdk和hadoop 

         說明,為了省去一系列獲取管理員許可權,授權等繁瑣操作,精簡教程,這裡都是使用root賬戶登入並且使用root許可權進行操作。

3.1 安裝JDK

        安裝jdk在這裡不在細數,如果有需要可以參考該博文(雖然那篇博文用的是ubuntu,但是jdk安裝在CentOS下也一樣):

3.2  安裝hadoop

        注意: 3臺機器上都需要重複下面所講的步驟。

3.2.1 上載檔案並解壓縮

        在opt目錄下新建一個名為hadoop的目錄,並將下載得到的hadoop-2.8.0.tar上載到該目錄下,如圖:

    

         進入到該目錄,執行命令:

cd   /opt/hadoop

           執行解壓命令:

 tar  -xvf   hadoop-2.8.0.tar.gz

            說明:3臺機器都要進行上述操作,解壓縮後得到一個名為hadoop-2.8.0的目錄。

3.2.2新建幾個目錄

           在/root目錄下新建幾個目錄,複製貼上執行下面的命令:

  1. mkdir  /root/hadoop  
  2. mkdir  /root/hadoop/tmp  
  3. mkdir  /root/hadoop/var  
  4. mkdir  /root/hadoop/dfs  
  5. mkdir  /root/hadoop/dfs/name  
  6. mkdir  /root/hadoop/dfs/data  

3.2.3 修改etc/hadoop中的一系列配置檔案

          修改/opt/hadoop/hadoop-2.8.0/etc/hadoop目錄內的一系列檔案。

3.2.3.1 修改core-site.xml

            修改/opt/hadoop/hadoop-2.8.0/etc/hadoop/core-site.xml檔案

          在<configuration>節點內加入配置:

 <property>

        <name>hadoop.tmp.dir</name>

        <value>/root/hadoop/tmp</value>

        <description>Abase for other temporary directories.</description>

   </property>

   <property>

        <name>fs.default.name</name>

        <value>hdfs://hserver1:9000</value>

   </property>

</configuration>

3.2.3.2 修改hadoop-env.sh

 修改/opt/hadoop/hadoop-2.8.0/etc/hadoop/hadoop-env.sh檔案

         將export   JAVA_HOME=${JAVA_HOME}

         修改為:

         export   JAVA_HOME=/opt/java/jdk1.8.0_121

        說明:修改為自己的JDK路徑

3.2.3.3 修改hdfs-site.xml

 修改/opt/hadoop/hadoop-2.8.0/etc/hadoop/hdfs-site.xml檔案

          在<configuration>節點內加入配置:

<property>

   <name>dfs.name.dir</name>

   <value>/root/hadoop/dfs/name</value>

   <description>Path on the local filesystem where theNameNode stores the namespace and transactions logs persistently.</description>

</property>

<property>

   <name>dfs.data.dir</name>

   <value>/root/hadoop/dfs/data</value>

   <description>Comma separated list of paths on the localfilesystem of a DataNode where it should store its blocks.</description>

</property>

<property>

   <name>dfs.replication</name>

   <value>2</value>

</property>

<property>

      <name>dfs.permissions</name>

      <value>false</value>

      <description>need not permissions</description>

</property>

          說明:dfs.permissions配置為false後,可以允許不要檢查許可權就生成dfs上的檔案,方便倒是方便了,但是你需要防止誤刪除,請將它設定為true,或者直接將該property節點刪除,因為預設就是true。

3.2.3.4 新建並且修改mapred-site.xml

   在該版本中,有一個名為mapred-site.xml.template的檔案,複製該檔案,然後改名為mapred-site.xml,命令是:

  1. cp   /opt/hadoop/hadoop-2.8.0/etc/hadoop/mapred-site.xml.template     /opt/hadoop/hadoop-2.8.0/etc/hadoop/mapred-site.xml  

 修改這個新建的mapred-site.xml檔案,在<configuration>節點內加入配置:

 <property>

   <name>mapred.job.tracker</name>

   <value>hserver1:49001</value>

</property>

<property>

      <name>mapred.local.dir</name>

       <value>/root/hadoop/var</value>

</property>

<property>

<name>mapreduce.framework.name</name>

<value>yarn</value>

</property>

3.2.3.5 修改slaves檔案

 修改/opt/hadoop/hadoop-2.8.0/etc/hadoop/slaves檔案,將裡面的localhost刪除,新增如下內容:

  1. hserver2  
  2. hserver3  

3.2.3.6 修改yarn-site.xml檔案

 修改/opt/hadoop/hadoop-2.8.0/etc/hadoop/yarn-site.xml檔案,

         在<configuration>節點內加入配置(注意了,記憶體根據機器配置越大越好,我這裡只配2個G是因為機器不行):

<property>

        <name>yarn.resourcemanager.hostname</name>

        <value>hserver1</value>

   </property>

   <property>

        <description>The address of the applications manager interface in the RM.</description>

        <name>yarn.resourcemanager.address</name>

        <value>${yarn.resourcemanager.hostname}:8032</value>

   </property>

   <property>

        <description>The address of the scheduler interface.</description>

        <name>yarn.resourcemanager.scheduler.address</name>

        <value>${yarn.resourcemanager.hostname}:8030</value>

   </property>

   <property>

        <description>The http address of the RM web application.</description>

        <name>yarn.resourcemanager.webapp.address</name>

        <value>${yarn.resourcemanager.hostname}:8088</value>

   </property>

   <property>

        <description>The https adddress of the RM web application.</description>

        <name>yarn.resourcemanager.webapp.https.address</name>

        <value>${yarn.resourcemanager.hostname}:8090</value>

   </property>

   <property>

        <name>yarn.resourcemanager.resource-tracker.address</name>

        <value>${yarn.resourcemanager.hostname}:8031</value>

   </property>

   <property>

        <description>The address of the RM admin interface.</description>

        <name>yarn.resourcemanager.admin.address</name>

        <value>${yarn.resourcemanager.hostname}:8033</value>

   </property>

   <property>

        <name>yarn.nodemanager.aux-services</name>

        <value>mapreduce_shuffle</value>

   </property>

   <property>

        <name>yarn.scheduler.maximum-allocation-mb</name>

        <value>2048</value>

        <discription>每個節點可用記憶體,單位MB,預設8182MB</discription>

   </property>

   <property>

        <name>yarn.nodemanager.vmem-pmem-ratio</name>

        <value>2.1</value>

   </property>

   <property>

        <name>yarn.nodemanager.resource.memory-mb</name>

        <value>2048</value>

</property>

   <property>

<name>yarn.nodemanager.vmem-check-enabled</name>

<value>false</value>

</property>

 說明:yarn.nodemanager.vmem-check-enabled這個的意思是忽略虛擬記憶體的檢查,如果你是安裝在虛擬機器上,這個配置很有用,配上去之後後續操作不容易出問題。如果是實體機上,並且記憶體夠多,可以將這個配置去掉。

4啟動hadoop

4.1在namenode上執行初始化

           因為hserver1是namenode,hserver2和hserver3都是datanode,所以只需要對hserver1進行初始化操作,也就是對hdfs進行格式化。

          進入到hserver1這臺機器的/opt/hadoop/hadoop-2.8.0/bin目錄,也就是執行命令:

cd   /opt/hadoop/hadoop-2.8.0/bin

執行初始化指令碼,也就是執行命令:

 ./hadoop  namenode  -format

如圖:

         

      稍等幾秒,不報錯的話,即可執行成功,如圖:

          格式化成功後,可以在看到在/root/hadoop/dfs/name/目錄多了一個current目錄,而且該目錄內有一系列檔案

          如圖:

 

4.2在namenode上執行啟動命令

           因為hserver1是namenode,hserver2和hserver3都是datanode,所以只需要再hserver1上執行啟動命令即可。

           進入到hserver1這臺機器的/opt/hadoop/hadoop-2.8.0/sbin目錄,也就是執行命令:

cd    /opt/hadoop/hadoop-2.8.0/sbin

執行初始化指令碼,也就是執行命令:

 ./start-all.sh

         第一次執行上面的啟動命令,會需要我們進行互動操作,在問答介面上輸入yes回車

如圖:

5測試hadoop

           haddoop啟動了,需要測試一下hadoop是否正常。

          執行命令,關閉防火牆,CentOS7下,命令是:

         systemctl   stop   firewalld.service

如圖:

         

 hserver1是我們的namanode,該機器的IP192.168.119.128,在本地電腦訪問如下地址:

             自動跳轉到了overview頁面

         如圖:

   

            在本地瀏覽器裡訪問如下地址:

           自動跳轉到了cluster頁面

           如圖: