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檔案,在檔案中新增以下內容:
- 192.168.119.128 hserver1
- 192.168.119.129 hserver2
-
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臺機器剛才生成的公鑰加入到這個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內容是:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD8fTIVorOxgDo81yCEgcJTstUcyfOBecL+NZ/OLXCEzaBMw5pLV0UNRX6SZnaAgu/erazkz4sw74zfRIMzEeKKCeNcZ6W78cg+ZNxDcj8+FGeYqY5+nc0YPhXFVI7AwFmfr7fH5hoIT14ClKfGklPgpEgUjDth0PeRwnUTvUy9A1x76npjAZrknQsnoLYle7cVJZ/zO3eGxS75YEdTYDMv+UMiwtcJg7UxOqR+9UT3TO+xLk0yOl8GIISXzMhdCZkmyAH+DmW56ejzsd+JWwCMm177DtOZULl7Osq+OGOtpbloj4HCfstpoiG58SM6Nba8WUXWLnbgqZuHPBag/[email protected]
hserver2機器上我的/root/.ssh/id_rsa.pub內容是:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC29kPkYz4c3bd9Qa1TV8kCR0bUNs4f7/dDcR1NKwrgIiecN7zPEWJpjILtlm3niNNx1j5R49QLTLBKKo8PE8mid47POvNypkVRGDeN2IVCivoAQ1T7S8bTJ4zDECGydFYyKQfS2nOAifAWECdgFFtIp52d+dLIAg1JC37pfER9f32rd7anhTHYKwnLwR/NDVGAw3tMkXOnFuFKUMdOJ3GSoVOZf3QHKykGIC2fz/lsXZHaCcQWvOU/Ecd9e0263Tvqh7zGWpF5WYEGjkLlY8v2sioeZxgzog1LWycUTMTqaO+fSdbvKqVj6W0qdy3Io8bJ29Q3S/[email protected]
hserver2機器上我的/root/.ssh/id_rsa.pub內容是:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC1a2o10ttv2570GpuUZy7g9o7lIkkeed7ba25VvFEBcUroQIZ+NIAiVIMGPRiOqm7X4bTLWj5EOz5JXG2l8rwA6CFnWfW3U+ttD1COLOrv2tHTiJ1PhQy1jJR/LpC1iX3sNIDDs+I0txZFGTCTRMLmrbHVTl8j5Yy/CTYLuC7reIZjzpHP7aaS2ev0dlbQzeB08ncjA5Jh4X72qQMOGPUUc2C9oa/CeCvI0SJbt8mkHwqFanZz/IfhLJIKhupjtYsqwQMmzLIjHxbLRwUGoWU6X4e76OkUz/[email protected]er3
合併之後,我的hserver1機器上的/root/.ssh/authorized_keys檔案內容是:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD8fTIVorOxgDo81yCEgcJTstUcyfOBecL+NZ/OLXCEzaBMw5pLV0UNRX6SZnaAgu/erazkz4sw74zfRIMzEeKKCeNcZ6W78cg+ZNxDcj8+FGeYqY5+nc0YPhXFVI7AwFmfr7fH5hoIT14ClKfGklPgpEgUjDth0PeRwnUTvUy9A1x76npjAZrknQsnoLYle7cVJZ/zO3eGxS75YEdTYDMv+UMiwtcJg7UxOqR+9UT3TO+xLk0yOl8GIISXzMhdCZkmyAH+DmW56ejzsd+JWwCMm177DtOZULl7Osq+OGOtpbloj4HCfstpoiG58SM6Nba8WUXWLnbgqZuHPBag/[email protected]
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC29kPkYz4c3bd9Qa1TV8kCR0bUNs4f7/dDcR1NKwrgIiecN7zPEWJpjILtlm3niNNx1j5R49QLTLBKKo8PE8mid47POvNypkVRGDeN2IVCivoAQ1T7S8bTJ4zDECGydFYyKQfS2nOAifAWECdgFFtIp52d+dLIAg1JC37pfER9f32rd7anhTHYKwnLwR/NDVGAw3tMkXOnFuFKUMdOJ3GSoVOZf3QHKykGIC2fz/lsXZHaCcQWvOU/Ecd9e0263Tvqh7zGWpF5WYEGjkLlY8v2sioeZxgzog1LWycUTMTqaO+fSdbvKqVj6W0qdy3Io8bJ29Q3S/[email protected]
- 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目錄下新建幾個目錄,複製貼上執行下面的命令:
- mkdir /root/hadoop
- mkdir /root/hadoop/tmp
- mkdir /root/hadoop/var
- mkdir /root/hadoop/dfs
- mkdir /root/hadoop/dfs/name
- 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,命令是:
- 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刪除,新增如下內容:
- hserver2
- 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,該機器的IP是192.168.119.128,在本地電腦訪問如下地址:
自動跳轉到了overview頁面
如圖:
在本地瀏覽器裡訪問如下地址:
自動跳轉到了cluster頁面
如圖: