本文做者:foochanehtml
本文連接:foochane.cn/article/201…java
軟件 | 版本 | 下載地址 |
---|---|---|
linux | Ubuntu Server 18.04.2 LTS | www.ubuntu.com/download/se… |
hadoop | hadoop-2.7.1 | archive.apache.org/dist/hadoop… |
java | jdk-8u211-linux-x64 | www.oracle.com/technetwork… |
名稱 | ip | hostname |
---|---|---|
主節點 | 192.168.233.200 | Master |
子節點1 | 192.168.233.201 | Slave01 |
子節點2 | 192.168.233.202 | Slave02 |
全部的節點均建立一個名爲hadoop
的用戶,並添加管理員權限。 注意:這裏這是單純爲了方便管理,建立的用戶名,也可使用其餘用戶名,或者使用系統以前的用戶,主要有管理員權限便可node
$ sudo useradd -m hadoop -s /bin/bash #建立用戶
$ sudo passwd hadoop #修改密碼
$ sudo adduser hadoop sudo #添加管理員權限
複製代碼
修改 /etc/hostname
文件,每一個節點都要修改。linux
注意:若是是ubuntu18.04桌面版直接修改/etc/hostname
文件便可,ubuntu18.04服務器版還須要修改/etc/cloud/cloud.cfg
文件,修改以下:web
# This will cause the set+update hostname module to not operate (if true)
preserve_hostname: true #這裏是將false改爲true
複製代碼
在/etc/hosts
文件裏添加以下內容(每一個節點都要修改,根據實際狀況修改ip)apache
192.168.233.200 Master
192.168.233.201 Slave01
192.168.233.202 Slave02
複製代碼
檢查各個節點是否能相互ping通。ubuntu
讓Master可以經過SSH無密碼登陸各個Slave節點瀏覽器
若是修改過主機名,須要從新生成的新的公鑰。bash
在Master上執行以下命令:服務器
$ cd ~/.ssh # 若是沒有該目錄,先執行一次ssh localhost
$ rm ./id_rsa* # 刪除以前生成的公匙(若是已經存在)
$ ssh-keygen -t rsa # 執行該命令後,遇到提示信息,一直按回車就能夠
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
複製代碼
接着將Master中的id_rsa.pub文件複製到各個Slave節點中
$ scp ~/.ssh/id_rsa.pub hadoop@Slave01:/home/hadoop/
$ scp ~/.ssh/id_rsa.pub hadoop@Slave02:/home/hadoop/
複製代碼
在各個Slave節點中執行以下命令:
$ mkdir ~/.ssh # 若是不存在該文件夾需先建立
$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
$ rm ~/id_rsa.pub # 用完之後就能夠刪掉
複製代碼
在Master中驗證是否能夠無密碼登陸,各個Slave節點。
如:
$ ssh Slave01 #若是成功登陸,則配置完成
$ ssh Slave02 #若是成功登陸,則配置完成
複製代碼
每一個節點都要安裝,步驟相同 爲了方便操做每一個節點,默認在/usr/local/
下新建一個名爲bigdata
的文件夾,存放全部的大數據相關的軟件。
$ sudo mkdir /usr/local/bigdata
$ sudo chown -R hadoop:hadoop /usr/local/bigdata/
複製代碼
$ sudo mkdir /usr/local/bigdata/java
$ sudo tar -zxvf jdk-8u211-linux-x64.tar.gz -C /usr/local/bigdata/java/
複製代碼
在~/.bashrc
文件中添加以下內容,並執行$ source ~/.bashrc
命令使其生效
#java
export JAVA_HOME=/usr/local/bigdata/java/jdk1.8.0_211
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
複製代碼
下載hadoop-2.7.1.tar.gz
文件,並解壓到/usr/local/bigdata/
文件夾下
$ sudo tar -zxvf hadoop-2.7.1.tar.gz -C /usr/local/bigdata
複製代碼
須要修改6個文件,文件位於/usr/local/bigdata/hadoop-2.7.1/etc/hadoop/
下
將文件中原來的 localhost
刪除,添加內容:
Slave01
Slave02
複製代碼
內容修改成:
<configuration>
<!-- 指定HADOOP所使用的文件系統schema(URI)-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://Master:9000</value>
</property>
<!-- 指定hadoop運行時產生文件的存儲目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/bigdata/hadoop-2.7.1/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
</configuration>
複製代碼
Hadoop的分佈式文件系統HDFS通常採用冗餘存儲,一份文件一般保存3份副本,因此dfs.replication的值仍是設置爲3。 具體內容以下:
<configuration>
<property>
<!-- 指定SecondaryNamenode所在地址 -->
<name>dfs.namenode.secondary.http-address</name>
<value>Master:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/bigdata/hadoop-2.7.1/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/bigdata/hadoop-2.7.1/tmp/dfs/data</value>
</property>
</configuration>
複製代碼
修改內容以下:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>Master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>Master:19888</value>
</property>
</configuration>
複製代碼
內容以下:
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>Master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
複製代碼
修改以下內容:
export JAVA_HOME=/usr/local/bigdata/java/jdk1.8.0_211
# 能夠不用
export HADOOP_HOME=/usr/local/hadoop-2.7.1
複製代碼
每一個節點都要設置 在~/.bashrc
文件中添加以下內容,並$ source ~/.bashrc
使其生效
export PATH=$PATH:/usr/local/bigdata/hadoop-2.7.1/bin:/usr/local/bigdata/hadoop-2.7.1/sbin
複製代碼
slave節點只需將master節點上/usr/local/
下的bigdata
文件夾和~/.bashrc
文件,放到slave節點便可 注意切換到對應機器執行$ source ~/.bashrc
使環境變量生效。
後續的軟件都可使用此方式配置。
在master節點:
$ sudo rm -r /usr/local/bigdata/hadoop-2.7.1/tmp # 刪除 Hadoop 臨時文件,若是以前有啓動過
$ sudo rm -r /usr/local/bigdata/hadoop-2.7.1/logs/* # 刪除日誌文件,若是以前有啓動過
$ tar -zcvf ~/bigdata.tar.gz /usr/local/bigdata/ # 先壓縮再複製
$ scp ~/bigdata.tar.gz Slave01:/home/hadoop
$ scp ~/bigdata.tar.gz Slave02:/home/hadoop
$ scp ~/bashrc Slave01:/home/hadoop
$ scp ~/bashrc Slave02:/home/hadoop
複製代碼
在各個slave節點上
$ sudo mkdir /usr/local/bigdata
$ sudo chown -R hadoop:hadoop /usr/local/bigdata
$ tar -zxvf ~/bigdata.tar.gz -C /usr/local/bigdata
$ sudo source ~/.bashrc
複製代碼
在Master上執行 首次運行須要,執行
$ hdfs namenode -format
複製代碼
格式化名稱節點,而後就能夠啓動hadoop了。
啓動hadoop:
$ start-dfs.sh
$ start-yarn.sh
$ mr-jobhistory-daemon.sh start historyserver
複製代碼
使用jps查看啓動的各個節點,缺乏任何進程,都表示出錯。
$ jps
3585 JobHistoryServer
2938 NameNode
3148 SecondaryNameNode
3308 ResourceManager
3629 Jps
複製代碼
瀏覽器查看:http://192.168.233.200:50070/
查看相關信息:$ hdfs dfsadmin -report
關閉hadoop:
$ stop-yarn.sh
$ stop-dfs.sh
$ mr-jobhistory-daemon.sh stop historyserver
複製代碼
若是有問題,重複以下命令:
$ stop-dfs.sh # 關閉
$ rm -r /usr/local/bigdata/hadoop-2.7.1/tmp # 刪除 tmp 文件,注意這會刪除 HDFS中原有的全部數據
$ hdfs namenode -format # 從新格式化名稱節點
$ start-dfs.sh # 重啓
複製代碼