系統及環境
網絡環境:處於局域網下的部分機器(>=4)
系統版本:win10較新版本,支持子系統
子系統版本:ubuntu18.04
其他軟件:Xshell6,Xftp6
實驗要求:在多臺機器上安裝hadoop,配置完成後,可以在完成官方demo的wordcount功能,實現其他功能
下載安裝wsl(ubuntu)
- 系統要求:win10較新版本
- 修改電腦名(用以在ubuntu中分辨是哪臺電腦,這一步推薦在後面其他節點修改配置裏做):右擊此電腦-屬性-更改設置-計算機描述(ustc+序號)-更改-計算機名(ustc+序號)-稍後重啓
- 關閉防火牆:控制面板-網絡和Internet-網絡和共享中心-wd防火牆(左下角)-啓用或關閉wd防火牆-稍後重啓
- 開啓wsl功能:打開控制面板-程序-啓用或關閉windows功能-勾選適用於Linux的Windows子系統-重啓電腦
- 打開Microsoft Store,搜索ubuntu,選擇18.04下載
- 先創建ustc用戶,密碼也爲ustc(只是爲了好記)
- 創建hadoop用戶
$sudo useradd -m hadoop -s /bin/bash # 創建hadoop用戶,並使用/bin/shell作爲shell
$sudo passwd hadoop #爲hadoop用戶設置密碼
$sudo adduser hadoop sudo #爲hadoop用戶增加管理員權限
$su - hadoop #切換當前用戶爲hadoop
$sudo apt-get update #更新hadoop用戶的apt,方便後面安裝ssh
安裝ssh並設置免密碼登錄
- 安裝ssh,生成公鑰和私鑰
$ sudo apt-get install openssh-server #安裝SSH server
$ cd /home/hadoop # 進入hadoop下
$ ssh-keygen -t rsa #一直回車,會在用戶文件夾下生成.ssh文件夾,文件夾下生成三個文件,不要添加sudo,否在會報錯
$ sudo /etc/init.d/ssh start #啓動ssh服務
若啓動報錯,則將沒有的文件對應生成一下
$ sudo ssh-keygen -t rsa -f /etc/xxx
$ ps -e |grep ssh #查看ssh進程,顯示有ssh服務則爲成功
- 生成密鑰和公鑰並將公鑰複製給其他機器
免密登錄過程簡介:本機生成公鑰id_rsa.pub(上一步已經做好),將生成的公鑰上傳到目標機器上的授權文件authorized_keys,本機即可免密登錄目標機
創建授權文件:將id_rsa.pub的內容給authorized_keys,若沒有auth文件則會自動生成一個
$ cd /home/hadoop/.ssh #進入用戶文件夾下面的.ssh文件夾
$ cat id_rsa.pub>>authorized_keys
給.ssh文件夾和authorized_keys授權,權限如下
$cd /home/hadoop/.ssh #已經在這一步請不用操作
$sudo chmod 600 authorized_keys
$cd ..#回到上一層目錄
$sudo chmod 700 .ssh
$cd ..#回到上一層目錄
$sudo chmod 700 hadoop #將.ssh上級目錄授權爲700
修改配置
$sudo vim /etc/ssh/sshd_config
Port xxx (可以修改成其他統一端口號)
PermitRootLogin yes
將下面配置更改爲yes
PasswordAuthentication yes(不修改會報權限問題)
$ sudo /etc/init.d/ssh restart #重啓ssh服務
將客戶端的公鑰~/.ssh/id_rsa.pub通過ssh-copy-id -i拷貝到服務器(只需要將master節點的公鑰複製給其他datanode節點,其他的可以不用複製)
$ ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected] -p xxxx
user代表Linux用戶,xxx.xxx.xxx.xxx代表遠程主機地址,下面爲例子:
$ ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected] -p xxxx
需要輸入目標機器用戶的密碼,如hadoop用戶的密碼hadoop
如果公鑰拷貝沒有報錯,使用命令即可免密碼登錄另一臺機器
$ ssh -p 6666 [email protected] #-p後面代表的是端口號 就是上一步修改的配置裏面的Port
以上免密爲本機登錄其他機器的操作,並不需要每臺機器都需要進行拷貝操作,只需要一臺作爲主機分發到其他機器即可
安裝Java並配置環境變量
- 安裝xshell和xftp,安裝直接一路確認即可
- 嘗試使用xshell連接自己的機子,以下命令都可以在xshell裏運行,當然原來的界面也是可以的(連接步驟略)
- 安裝java,並配置環境
$ sudo mkdir /usr/local/java#在/usr/local下創建java文件夾
將jdk-8xxxx-linux-x64複製到c盤下,右擊屬性給文件授予全部權限,以便方便上傳到wsl裏面
$ cd /mnt/c #進入win的c盤
$ cp jdk-8xxxx-linux-x64.tar.gz /usr/local/java
進入java文件夾,並進行解壓
$cd java/
$tar -zxvf jdk-8xxxx-linux-x64.tar.gz#解壓
java文件下面會出現jdk1.8xxxx文件夾
如果遇到權限問題或者進不去java文件夾,請將/usr/local的文件夾授予權限
$ sudo chmod 777 /usr/local/java
配置環境變量
$ sudo vim /etc/profile
export JAVA_HOME=/usr/local/java/jdk1.8xxxx
export PATH=${PATH}:${JAVA_HOME}/bin
注意:“=”兩邊不要有空格
使環境變量生效
$ source /etc/profile
注意:請不要加sudo,source是bash的內建命令,那樣會報找不到命令的錯誤
驗證java環境是否配置完成
$ java -version
如果正常命令下來還是找不到,請參考:
告訴Ubuntu Java JDK的位置
$ sudo update-alternatives --install "/usr/bin/java" "java" "/usr/local/java/jdk1.8.0_231/bin/java" 1
$ sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/local/java/jdk1.8.0_231/bin/javac" 1
$ sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk1.8.0_231/bin/javaws" 1
相應的將其設爲默認方式:
$ sudo update-alternatives --set java /usr/local/java/jdk1.8.0_231/bin/java
$ sudo update-alternatives --set javac /usr/local/java/jdk1.8.0_231/bin/javac
$ sudo update-alternatives --set javaws /usr/local/java/jdk1.8.0_231/bin/javaws
參考文章:https://blog.csdn.net/weixin_42001089/article/details/81865101
其他節點配置(重要)
將所有的主機的host都配置一下,添加每臺機器的ip和對應名稱,如
$sudo vim /etc/hosts
192.168.1.100 ustc01
192.168.1.158 ustc02
192.168.1.58 ustc03
192.168.1.75 ustc04
(重要)將其他ip配置關閉,前面全部添加#,只保留上面四個配置,要不然在之後hadoop的監控頁面看不到datanode節點信息。
順便在win系統中hosts添加這幾個信息
192.168.1.100 ustc01
192.168.1.158 ustc02
192.168.1.58 ustc03
192.168.1.75 ustc04
重啓win電腦
如果Java是單獨每個人配置的,以下步驟可以不做
分發hadoop到其他節點
$scp -P 6666 /home/hadoop/hadoop-2.7.7.tar.gz ustc02:/home/hadoop #-P爲大寫,後接端口號。
$scp -P 6666 /home/hadoop/hadoop-2.7.7.tar.gz ustc03:/home/hadoop #-P爲大寫。
$scp -P 6666 /home/hadoop/hadoop-2.7.7.tar.gz ustc04:/home/hadoop #-P爲大寫。
解壓與配置和前面的java是一樣的,參考前面,寫了的話請忽略
主節點安裝hadoop並分發到其他節點
(本配置只需要主要的namenode進行配置即可,其他datanode之後進行分發即可)
-
類似java的上傳,將hadoop壓縮包放到c盤下進行授權,並上傳,本次上傳路徑爲/home/hadoop(命令省略,請參考java配置來)
-
配置hadoop的四個xml文件和一個子節點標識文件(所有節點這幾個信息請保持一致)
-
修改core-site.xml
<configuration> <property> <name>fs.default.name</name> <value>hdfs://ustc01:9000</value> </property> </configuration>
-
修改hdfs-site.xml
<configuration> <property> <name>dfs.replication</name> <value>3</value> <description>副本個數,配置默認是3,應小於datanode機器數量</description> </property> <property> <name>dfs.namenode.dir</name> <value>file:/home/hadoop/hadoop-2.7.7/tmp/dfs/name</value> <description>datanode上數據塊的物理存儲位置</description> </property> <property> <name>dfs.datanode.dir</name> <value>file:/home/hadoop/hadoop-2.7.7/tmp/dfs/data</value> </property> <property> <name>dfs.name.data.registration.ip-hostname-check</name> <value>false</value> </property> </configuration>
-
修改mapred-site.xml,本文件沒有,需要運行以下命令
mv mapred-site.xml.template mapred-site.xml #重命名
#這裏是配置信息 <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapred.job.tracker</name> <value>hdfs://ustc01:9001</value> </property> </configuration>
-
修改yarn-site.xml
<configuration> <!-- Site specific YARN configuration properties --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
-
修改slaves文件
這裏存放datanode節點名,主機節點名稱不要添加,如
ustc02 ustc03 ustc04
-
-
分發到其他節點,並配置
將配置好的文件夾,壓縮打包
$ cd /home/hadoop
$ tar -zcf hadoop-2.7.7.tar.gz hadoop-2.7.7/
$ scp -P 6666 hadoop-2.7.7.tar.gz ustc02:/home/hadoop #分發hadoop,-P爲大寫。
這裏解壓也是類似java解壓配置配置
配置環境變量
$ sudo vim /etc/profile #在剛剛配置的java環境下添加配置成如下格式
export JAVA_HOME=/usr/local/java/jdk1.8.0_231
export HADOOP_HOME=/home/hadoop/hadoop-2.7.7
export PATH=${PATH}:${JAVA_HOME}/bin:{HADOOP_HOME}/bin:{HADOOP_HOME}/sbin:
使環境變量生效
$ source /etc/profile
注意:請不要加sudo,source是bash的內建命令,那樣會報找不到命令的錯誤
驗證hadoop環境是否配置完成
$ hadoop
如果沒有報錯就是成功配置了環境
由於之前我們修改了默認的22端口爲6666,這裏修改Hadoop的相關端口號
在hadoop-2.7.7/etc/hadoop目錄修改 hadoop-env.sh 文件添加如下語句。
$sudo vim /home/hadoop/hadoop-2.7.7/etc/hadoop/hadoop-env.sh
export HADOOP_SSH_OPTS="-p 6666"
將JAVA_HOME等號後面用/usr/local/java/jdk1.8.0_231替換掉
JAVA_HOME=/usr/local/java/jdk1.8.0_231
- 開啓與關閉以及驗證
$ hadoop namenode -format #格式化主節點,本條命令請不要亂輸入,請部署完所有節點之後進行輸入
#開啓與關閉,只需要在namenode節點上輸入,不要都輸入了
$ start-all.sh #開啓全部服務
$ stop-all.sh #關閉全部服務
$ start-dfs.sh #開啓hdfs
$ start-dfs.sh #關閉hdfs
驗證是否已經啓動,在每個節點輸入
$ jps
如果在namenode節點上顯示了namenode,在datenode上顯示了datanode就表示啓動正常
打開win系統的瀏覽器,輸入http://ustc01:50070,如果顯示namenode與datanode節點信息正確即成功
這個網址也是心跳監管系統,展示時需要打開
-
代碼(@TODO 冉哥豪哥ing)
-
文檔(@TODO鋒哥輝哥雷哥林哥ing)
-
剩餘部署(@TODO洋哥鋒哥ing)
2019-11-20
開機演示需要進行的操作:
-
打開wsl
-
運行ssh(可以設置自啓動,這裏懶得設置)
演示時需要每臺機子運行這條命令,開啓ssh命令 $sudo service ssh --full-restart
-
一開機,hosts就變回去了,這個還沒解決(待修復)
$sudo vim /etc/hosts 192.168.1.100 ustc01 192.168.1.158 ustc02 192.168.1.58 ustc03 192.168.1.75 ustc04