因為課程學習需要,加上本機電腦的不便利性,筆者採用的是三臺騰訊雲的租用伺服器(學生款價效比挺高的),由於在安裝以及環境搭建過程中出現了許多問題,查詢了相當多的資料,歷經幾番波折,於是在此分享一下自己較為全面的操作過程,希望能夠幫到各位解決問題。
騰訊雲伺服器系統 CentOs
三臺伺服器分別名稱代號為:master slave1 slave2
Tips:機器已為Linux系統
在master機器節點(自行決定哪臺機器作為master節點)進行操作:
wget https://repo.huaweicloud.com/java/jdk/8u151-b12/jdk-8u151-linux-x64.tar.gz
mkdir /usr/java
解壓jdk檔案至剛剛建立的資料夾
tar -zxvf +jdk的名字(可從下載操作處檢視到) -C +解壓路徑(本文為/usr/java)
下述程式碼為本文執行程式碼(如果你完全按照本文操作可直接執行該程式碼)
tar -zxvf jdk-8u151-linux-x64.tar.gz -C /usr/java
vim /etc/profile
2.修改組態檔(隨便找個位置加入以下內容)
注:Linux下檔案內容修改:鍵入i之後即可編輯檔案內容,編輯完成之後按esc,輸入符號:加入末行模式,然後輸入wq儲存退出
export JAVA_HOME=/usr/java/jdk1.8.0_151
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
3.使環境變數生效
source /etc/profile
4.結果測試
java -version
如果能夠返回java版本號則jdk安裝成功(如下圖)
sudo systemctl stop firewalld.service
sudo systemctl disable firewalld.service
在前言中末尾提到過筆者的叢集為三臺機器,所以筆者的hosts檔案中ip對映有三行自己新增的程式碼,大家可以根據自己實際情況適當修改,但是此處ip對映關係一定不能出錯!!
對於master結點,需要在檔案末尾新增的內容為:
master結點的內網ip master
另一個機器1的公網ip slave1
另一個機器2的公網ip slave2
對於slave1結點,需要在檔案末尾新增的內容為:
master結點的公網ip master
slave1結點的內網ip slave1
另一個機器2的公網ip slave2
對於slave2結點,需要在檔案末尾新增的內容為:
master結點的公網ip master
slave1結點的公網ip slave1
slave2結點的內網ip slave2
總而言之,對於自己機器上的ip對映就填自己的內網ip,自己機器上對其他ip的對映就是他們的公網ip
由於非root使用者可能涉及許可權問題,於是本文直接使用root使用者進行後續操作
由於hadoop必須機器之間免密登入,所以我們必須採取ssh金鑰認證方式去保證機器登入。
ssh-keygen
跳轉至~/.ssh資料夾下
cd ~/.ssh
檢視檔案內容
ls
ssh-copy-id localhost
檢查是否成功
ssh localhost
第一次登入時需要輸入一次本機root使用者登入密碼,輸入進去即可,然後再次鍵入程式碼:
ssh localhost
如果不需要輸入密碼即出現了日期資訊,則傳遞至localhost成功
傳遞時需要輸入一次 slave1結點上的 root使用者的登入密碼
ssh-copy-id slave1
檢查是否成功
ssh slave1
如果不需要輸入密碼即出現了日期資訊,則傳遞至slave1成功
傳遞時需要輸入一次 slave2結點上的 root使用者的登入密碼
ssh-copy-id slave2
檢查是否成功
ssh slave2
如果不需要輸入密碼即出現了日期資訊,則傳遞至slave2成功
cd
此處推薦使用清華映象的下載連結(縱享絲滑+1了):
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.1.3/hadoop-3.1.3.tar.gz
mkdir /usr/hadoop
解壓hadoop檔案至剛剛建立的資料夾
tar -zxvf +下載檔案的名字(可從下載操作處檢視到) -C +解壓路徑(本文為/usr/hadoop)
下述程式碼為本文執行程式碼(如果你完全按照本文操作可直接執行該程式碼)
tar -zxvf hadoop-3.1.3.tar.gz -C /usr/hadoop
vim /etc/profile
將之前設定jdk時候的內容替換為:
export JAVA_HOME=/usr/java/jdk1.8.0_151
export HADOOP_HOME=/usr/hadoop/hadoop-3.1.3
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$PATH
export PATH=$PATH:$HADOOP_HOME/sbin
export HADOOP_LOG_DIR=/usr/hadoop/hadoop-3.1.3/logs
export YARN_LOG_DIR=$HADOOP_LOG_DIR
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
source /etc/profile
hadoop version
如果出現如下版本號資訊則安裝成功
mkdir /usr/hadoop/hadoop-3.1.3/tmp
mkdir /usr/hadoop/hadoop-3.1.3/hdfs
mkdir /usr/hadoop/hadoop-3.1.3/hdfs/name
mkdir /usr/hadoop/hadoop-3.1.3/hdfs/data
cd /usr/hadoop/hadoop-3.1.3/etc/hadoop/
<!--設定hdfs檔案系統的名稱空間-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value> <!--master處為主機名,9000為埠號-->
</property>
<!-- 設定操作hdfs的存衝大小 -->
<property>
<name>io.file.buffer.size</name>
<value>4096</value>
</property>
<!-- 設定臨時資料儲存目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/hadoop/hadoop-3.1.3/tmp</value>
</property>
<!--設定副本數-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!--hdfs的後設資料儲存位置-->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/hadoop/hadoop-3.1.3/hdfs/name</value>
</property>
<!--hdfs的資料儲存位置-->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/hadoop/hadoop-3.1.3/hdfs/data</value>
</property>
<!--hdfs的namenode的web ui 地址-->
<property>
<name>dfs.http.address</name>
<value>master:50070</value>
</property>
<!--hdfs的snn的web ui 地址-->
<property>
<name>dfs.secondary.http.address</name>
<value>0.0.0.0:50090</value>
</property>
<!--是否開啟web操作hdfs-->
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<!--是否啟用hdfs許可權(acl)-->
<property>
<name>dfs.permissions</name>
<value>false</value> </property>
<!--指定mapreduce執行框架-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value> </property>
<!--歷史服務的通訊地址-->
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<!--歷史服務的web ui地址-->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
<!--指定resourcemanager所啟動的伺服器主機名-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<!--指定mapreduce的shuffle-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--指定resourcemanager的內部通訊地址-->
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<!--指定scheduler的內部通訊地址-->
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<!--指定resource-tracker的內部通訊地址-->
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<!--指定resourcemanager.admin的內部通訊地址-->
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<!--指定resourcemanager.webapp的ui監控地址-->
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
直接將檔案內容替換為
master
slave1
slave2
export JAVA_HOME=/usr/java/jdk1.8.0_151
例如(僅做格式參考例子):
scp hadoop-3.1.3.tar.gz root@slave1:/usr/hadoop
傳送完成之後在對應機器上執行對應適當解壓命令即可(至指定正確資料夾)
cd /usr/hadoop/hadoop-3.1.3/sbin
hdfs namenode -format
如果出現了SHUTDOWN_MSG: Shutting down NameNode at xxx資訊也不要慌張,向上尋找資訊,如果能找到 INFO common.Storage:Storage directory ******省略 has been successfully formatted資訊,則格式化成功了,忽略後面的SHUTDOWN_MSG即可
start-all.sh
跳轉目錄
cd /usr/hadoop/hadoop-3.1.3/sbin
修改start-dfs.sh和stop-dfs.sh檔案,新增如下內容:
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
修改start-yarn.sh和stop-yarn.sh檔案,新增如下內容:
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
重新執行程式碼
start-all.sh
jps
應該能看到六行資訊包括如下內容:
NodeManager ResourceManager NameNode Jps DataNode SecondaryNameNode
http://master伺服器的公網ip:50070/