Linux上安裝Hadoop集群(CentOS7+hadoop-2.8.3)


https://blog.csdn.net/pucao_cug/article/details/71698903

 

1下載hadoop

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

        2.1安裝3個機器

        2.2檢查機器名稱

        2.3修改/etc/hosts文件

        2.4 給3個機器生成秘鑰文件

        2.5 在hserver1上創建authorized_keys文件

        2.6將authorized_keys文件復制到其他機器

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

                   2.7.1在hserver1上進行測試

                   2.7.2在hserver2上進行測試

                   2.7.3在hserver3上進行測試

3安裝jdk和hadoop

         3.1安裝JDK

         3.2安裝hadoop

                  3.2.1上載文件並解壓縮

                  3.2.2新建幾個目錄

                  3.2.3修改etc/hadoop中的一系列配置文件

                              3.2.3.1修改core-site.xml

                              3.2.3.2修改hadoop-env.sh

                              3.2.3.3修改hdfs-site.xml

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

                              3.2.3.5修改slaves文件

                              3.2.3.6修改yarn-site.xml文件

4啟動hadoop

              4.1在namenode上執行初始化

              4.2在namenode上執行啟動命令

5測試hadoop

 

  關鍵字:Linux  CentOS  Hadoop  Java

  版本:  CentOS7  Hadoop2.8.0  JDK1.8

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

1下載hadoop

     本博文使用的hadoop是2.8.0

    打開下載地址選擇頁面:

http://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.8.0/hadoop-2.8.0.tar.gz

    如圖:

 

我使用的地址是:

       http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.8.0/hadoop-2.8.0.tar.gz 

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

2.1安裝3個機器

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

        http://blog.csdn.net/pucao_cug/article/details/71229416

        安裝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文件,在文件中添加以下內容:

 

[plain]  view plain  copy
 
  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用戶免密碼登錄成功,我改成了ssh-keygen然后多次回車生成)

如圖:

     

 

         因為我現在用的是root賬戶,所以秘鑰文件保存到了/root/.ssh/目錄內,可以使用命令查看,命令是:

ls    /root/.ssh/

如圖:

   

 

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

2.5在hserver1上創建authorized_keys文件

          接下來要做的事情是在3台機器的/root/.ssh/目錄下都存入一個內容相同的文件,文件名稱叫authorized_keys,文件內容是我們剛才為3台機器生成的公鑰。為了方便,我下面的步驟是現在hserver1上生成authorized_keys文件,然后把3台機器剛才生成的公鑰加入到這個hserver1的authorized_keys文件里,然后在將這個authorized_keys文件復制到hserver2和hserver3上面。

       首先使用命令,在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內容是:

 

[plain]  view plain  copy
 
  1. ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD8fTIVorOxgDo81yCEgcJTstUcyfOBecL+NZ/OLXCEzaBMw5pLV0UNRX6SZnaAgu/erazkz4sw74zfRIMzEeKKCeNcZ6W78cg+ZNxDcj8+FGeYqY5+nc0YPhXFVI7AwFmfr7fH5hoIT14ClKfGklPgpEgUjDth0PeRwnUTvUy9A1x76npjAZrknQsnoLYle7cVJZ/zO3eGxS75YEdTYDMv+UMiwtcJg7UxOqR+9UT3TO+xLk0yOl8GIISXzMhdCZkmyAH+DmW56ejzsd+JWwCMm177DtOZULl7Osq+OGOtpbloj4HCfstpoiG58SM6Nba8WUXWLnbgqZuHPBag/Kqjroot@hserver1  

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

 

[plain]  view plain  copy
 
  1. ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC29kPkYz4c3bd9Qa1TV8kCR0bUNs4f7/dDcR1NKwrgIiecN7zPEWJpjILtlm3niNNx1j5R49QLTLBKKo8PE8mid47POvNypkVRGDeN2IVCivoAQ1T7S8bTJ4zDECGydFYyKQfS2nOAifAWECdgFFtIp52d+dLIAg1JC37pfER9f32rd7anhTHYKwnLwR/NDVGAw3tMkXOnFuFKUMdOJ3GSoVOZf3QHKykGIC2fz/lsXZHaCcQWvOU/Ecd9e0263Tvqh7zGWpF5WYEGjkLlY8v2sioeZxgzog1LWycUTMTqaO+fSdbvKqVj6W0qdy3Io8bJ29Q3S/6MxLa6xvFcBJEXroot@hserver2  

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

 

[plain]  view plain  copy
 
  1. ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC1a2o10ttv2570GpuUZy7g9o7lIkkeed7ba25VvFEBcUroQIZ+NIAiVIMGPRiOqm7X4bTLWj5EOz5JXG2l8rwA6CFnWfW3U+ttD1COLOrv2tHTiJ1PhQy1jJR/LpC1iX3sNIDDs+I0txZFGTCTRMLmrbHVTl8j5Yy/CTYLuC7reIZjzpHP7aaS2ev0dlbQzeB08ncjA5Jh4X72qQMOGPUUc2C9oa/CeCvI0SJbt8mkHwqFanZz/IfhLJIKhupjtYsqwQMmzLIjHxbLRwUGoWU6X4e76OkUz/xyyHlzBg1Vu2F9hjoXPW80VmupIRSXFDliDBJ8NlXXQN47wwYBG28broot@hserver3  

合並之后,我的hserver1機器上的/root/.ssh/authorized_keys文件內容是:

 

[plain]  view plain  copy
 
  1. ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD8fTIVorOxgDo81yCEgcJTstUcyfOBecL+NZ/OLXCEzaBMw5pLV0UNRX6SZnaAgu/erazkz4sw74zfRIMzEeKKCeNcZ6W78cg+ZNxDcj8+FGeYqY5+nc0YPhXFVI7AwFmfr7fH5hoIT14ClKfGklPgpEgUjDth0PeRwnUTvUy9A1x76npjAZrknQsnoLYle7cVJZ/zO3eGxS75YEdTYDMv+UMiwtcJg7UxOqR+9UT3TO+xLk0yOl8GIISXzMhdCZkmyAH+DmW56ejzsd+JWwCMm177DtOZULl7Osq+OGOtpbloj4HCfstpoiG58SM6Nba8WUXWLnbgqZuHPBag/Kqjroot@hserver1  
  2. ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC29kPkYz4c3bd9Qa1TV8kCR0bUNs4f7/dDcR1NKwrgIiecN7zPEWJpjILtlm3niNNx1j5R49QLTLBKKo8PE8mid47POvNypkVRGDeN2IVCivoAQ1T7S8bTJ4zDECGydFYyKQfS2nOAifAWECdgFFtIp52d+dLIAg1JC37pfER9f32rd7anhTHYKwnLwR/NDVGAw3tMkXOnFuFKUMdOJ3GSoVOZf3QHKykGIC2fz/lsXZHaCcQWvOU/Ecd9e0263Tvqh7zGWpF5WYEGjkLlY8v2sioeZxgzog1LWycUTMTqaO+fSdbvKqVj6W0qdy3Io8bJ29Q3S/6MxLa6xvFcBJEXroot@hserver2  
  3. ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC1a2o10ttv2570GpuUZy7g9o7lIkkeed7ba25VvFEBcUroQIZ+NIAiVIMGPRiOqm7X4bTLWj5EOz5JXG2l8rwA6CFnWfW3U+ttD1COLOrv2tHTiJ1PhQy1jJR/LpC1iX3sNIDDs+I0txZFGTCTRMLmrbHVTl8j5Yy/CTYLuC7reIZjzpHP7aaS2ev0dlbQzeB08ncjA5Jh4X72qQMOGPUUc2C9oa/CeCvI0SJbt8mkHwqFanZz/IfhLJIKhupjtYsqwQMmzLIjHxbLRwUGoWU6X4e76OkUz/xyyHlzBg1Vu2F9hjoXPW80VmupIRSXFDliDBJ8NlXXQN47wwYBG28broot@hserver3  

 

如圖:

    

 

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,否則你的后續命令是在另外一台機器上執行的。

 

我按照上面方法配置root免密碼不成功,后來百度了一下發現還有以下問題需要注意:

 

我安裝博文這個命令執行最后無法root用戶免密碼登錄成功,我改成了ssh-keygen然后多次回車生成 

 

authorized_keys:存放遠程免密登錄的公鑰,主要通過這個文件記錄多台機器的公鑰 
id_rsa : 生成的私鑰文件 
id_rsa.pub : 生成的公鑰文件 
know_hosts : 已知的主機公鑰清單 


如果希望ssh公鑰生效需滿足至少下面兩個條件: 
1) .ssh目錄的權限必須是700 
2) .ssh/authorized_keys文件權限必須是600

[root@master ~]# chmod 700 /root/.ssh
[root@master ~]# chmod 600 /root/.ssh/*


還需要檢查每台機器的~/.ssh/known_hosts文件是否含有四個主機的信息,如下圖所示:

 
known_hosts文件內容.png

如果沒有的話,比如master沒有,則需要在該機器上重新執行一下ssh master命令,讓其生成以上信息即可。

 
ssh連接主機可生成known_hosts文件內容.png

查看/etc/ssh/sshd_config文件[vi /etc/ssh/sshd_config],開啟ssh證書登錄,即找到注釋配置[#PubkeyAuthentication yes],把前面的“#"號去掉,如:

PubkeyAuthentication yes

# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
# but this is overridden so installations will only check .ssh/authorized_keys
AuthorizedKeysFile      .ssh/authorized_keys
還有生成authorized_keys內容的時候可以先在hserver1上執行cat id_rsa.pub >> authorized_keys
然后在hserver2上
scp id_rsa.pub root@hserver1:/root/.ssh/111
在hserver3上
scp id_rsa.pub root@hserver1:/root/.ssh/222
然后在hserver1上
cat 111 >> authorized_keys
cat 222 >> authorized_keys
然后在hserver1上執行
scp authorized_keys root@hserver2:/root/.ssh/authorized_keys
scp authorized_keys root@hserver3:/root/.ssh/authorized_keys
 
 

 

3安裝jdk和hadoop

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

3.1 安裝JDK

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

http://blog.csdn.net/pucao_cug/article/details/68948639

3.2  安裝hadoop

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

3.2.1 上載文件並解壓縮

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

 

    

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

cd   /opt/hadoop

           執行解壓命令:

 tar  -xvf   hadoop-2.8.3.tar.gz

            先在hserver1上把后續的各個配置文件配置好了,然后打包傳到hserver2和hserver3的/opt/hadoop/相同目錄下就行了

3.2.2新建幾個目錄

           在/root目錄下新建幾個目錄,復制粘貼執行下面的命令:

 

[plain]  view plain  copy
 
  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.3/etc/hadoop目錄內的一系列文件。

3.2.3.1 修改core-site.xml

            修改/opt/hadoop/hadoop-2.8.3/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.defaultFS</name>
<value>hdfs://hserver1:9000</value>
</property>

        

3.2.3.2 修改hadoop-env.sh

         修改/opt/hadoop/hadoop-2.8.3/etc/hadoop/hadoop-env.sh文件

         將export   JAVA_HOME=${JAVA_HOME}

         修改為:

         export JAVA_HOME=/root/jdk1.8.0_131

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

3.2.3.3 修改hdfs-site.xml

          修改/opt/hadoop/hadoop-2.8.0/etc/hadoop/hdfs-site.xml文件

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

 

<property>

<name>dfs.namenode.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.datanode.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.enabled</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,命令是:

 

[plain]  view plain  copy
 
  1. cp   /opt/hadoop/hadoop-2.8.3/etc/hadoop/mapred-site.xml.template     /opt/hadoop/hadoop-2.8.3/etc/hadoop/mapred-site.xml  

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

 

<property>

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

<value>yarn</value>

</property>

<property>

<name>mapreduce.jobhistory.address</name>

<value>hserver1:10020</value>

</property>

<property>

<name>mapreduce.jobhistory.webapp.address</name>

<value>hserver1:19888</value>

</property>

 

3.2.3.5 修改slaves文件

         修改/opt/hadoop/hadoop-2.8.3/etc/hadoop/slaves文件,將里面的localhost刪除,添加如下內容:

 

[plain]  view plain  copy
 
  1. hserver2  
  2. hserver3  

3.2.3.6 修改yarn-site.xml文件

         修改/opt/hadoop/hadoop-2.8.3/etc/hadoop/yarn-site.xml文件,

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

 

<property>
<name>yarn.resourcemanager.hostname</name>
<value>hserver1</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>hserver1:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>hserver1:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>hserver1:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>hserver1:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>hserver1:8088</value>
</property>

 

 

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

4啟動hadoop

4.1在namenode上執行初始化

        hserver1的各個配置文件配置好后,打包scp傳給hserver2和hserver3就可以了 

 

        檢查一下centos7的防火牆是否關閉了

      

        firewall-cmd --state

       systemctl stop firewalld.service

      systemctl disable firewalld.service

 

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

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

cd   /opt/hadoop/hadoop-2.8.3/bin

           執行初始化腳本,也就是執行命令:

 ./hdfs  namenode  -format

如圖:

         

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

 

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

          如圖:

 

 

4.2在namenode上執行啟動命令

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

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

cd    /opt/hadoop/hadoop-2.8.3/sbin

          執行初始化腳本,也就是執行命令:

 ./start-all.sh

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

如圖:

5測試hadoop

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

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

          systemctl   stop   firewalld.service

         如圖:

         

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

             http://192.168.0.168:50070/

             自動跳轉到了overview頁面

         如圖:

   

 

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

            http://192.168.0.168:8088/

           自動跳轉到了cluster頁面

           如圖:

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM