https://blog.csdn.net/pucao_cug/article/details/71698903
2.5 在hserver1上創建authorized_keys文件
關鍵字: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文件,在文件中添加以下內容:
- 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用戶免密碼登錄成功,我改成了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內容是:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD8fTIVorOxgDo81yCEgcJTstUcyfOBecL+NZ/OLXCEzaBMw5pLV0UNRX6SZnaAgu/erazkz4sw74zfRIMzEeKKCeNcZ6W78cg+ZNxDcj8+FGeYqY5+nc0YPhXFVI7AwFmfr7fH5hoIT14ClKfGklPgpEgUjDth0PeRwnUTvUy9A1x76npjAZrknQsnoLYle7cVJZ/zO3eGxS75YEdTYDMv+UMiwtcJg7UxOqR+9UT3TO+xLk0yOl8GIISXzMhdCZkmyAH+DmW56ejzsd+JWwCMm177DtOZULl7Osq+OGOtpbloj4HCfstpoiG58SM6Nba8WUXWLnbgqZuHPBag/Kqjroot@hserver1
hserver2機器上我的/root/.ssh/id_rsa.pub內容是:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC29kPkYz4c3bd9Qa1TV8kCR0bUNs4f7/dDcR1NKwrgIiecN7zPEWJpjILtlm3niNNx1j5R49QLTLBKKo8PE8mid47POvNypkVRGDeN2IVCivoAQ1T7S8bTJ4zDECGydFYyKQfS2nOAifAWECdgFFtIp52d+dLIAg1JC37pfER9f32rd7anhTHYKwnLwR/NDVGAw3tMkXOnFuFKUMdOJ3GSoVOZf3QHKykGIC2fz/lsXZHaCcQWvOU/Ecd9e0263Tvqh7zGWpF5WYEGjkLlY8v2sioeZxgzog1LWycUTMTqaO+fSdbvKqVj6W0qdy3Io8bJ29Q3S/6MxLa6xvFcBJEXroot@hserver2
hserver2機器上我的/root/.ssh/id_rsa.pub內容是:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC1a2o10ttv2570GpuUZy7g9o7lIkkeed7ba25VvFEBcUroQIZ+NIAiVIMGPRiOqm7X4bTLWj5EOz5JXG2l8rwA6CFnWfW3U+ttD1COLOrv2tHTiJ1PhQy1jJR/LpC1iX3sNIDDs+I0txZFGTCTRMLmrbHVTl8j5Yy/CTYLuC7reIZjzpHP7aaS2ev0dlbQzeB08ncjA5Jh4X72qQMOGPUUc2C9oa/CeCvI0SJbt8mkHwqFanZz/IfhLJIKhupjtYsqwQMmzLIjHxbLRwUGoWU6X4e76OkUz/xyyHlzBg1Vu2F9hjoXPW80VmupIRSXFDliDBJ8NlXXQN47wwYBG28broot@hserver3
合並之后,我的hserver1機器上的/root/.ssh/authorized_keys文件內容是:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD8fTIVorOxgDo81yCEgcJTstUcyfOBecL+NZ/OLXCEzaBMw5pLV0UNRX6SZnaAgu/erazkz4sw74zfRIMzEeKKCeNcZ6W78cg+ZNxDcj8+FGeYqY5+nc0YPhXFVI7AwFmfr7fH5hoIT14ClKfGklPgpEgUjDth0PeRwnUTvUy9A1x76npjAZrknQsnoLYle7cVJZ/zO3eGxS75YEdTYDMv+UMiwtcJg7UxOqR+9UT3TO+xLk0yOl8GIISXzMhdCZkmyAH+DmW56ejzsd+JWwCMm177DtOZULl7Osq+OGOtpbloj4HCfstpoiG58SM6Nba8WUXWLnbgqZuHPBag/Kqjroot@hserver1
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC29kPkYz4c3bd9Qa1TV8kCR0bUNs4f7/dDcR1NKwrgIiecN7zPEWJpjILtlm3niNNx1j5R49QLTLBKKo8PE8mid47POvNypkVRGDeN2IVCivoAQ1T7S8bTJ4zDECGydFYyKQfS2nOAifAWECdgFFtIp52d+dLIAg1JC37pfER9f32rd7anhTHYKwnLwR/NDVGAw3tMkXOnFuFKUMdOJ3GSoVOZf3QHKykGIC2fz/lsXZHaCcQWvOU/Ecd9e0263Tvqh7zGWpF5WYEGjkLlY8v2sioeZxgzog1LWycUTMTqaO+fSdbvKqVj6W0qdy3Io8bJ29Q3S/6MxLa6xvFcBJEXroot@hserver2
- 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文件是否含有四個主機的信息,如下圖所示:

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

查看/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
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目錄下新建幾個目錄,復制粘貼執行下面的命令:
- 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.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,命令是:
- 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刪除,添加如下內容:
- hserver2
- 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,在本地電腦訪問如下地址:
自動跳轉到了overview頁面
如圖:
在本地瀏覽器里訪問如下地址:
自動跳轉到了cluster頁面
如圖: