在VM上安裝centOS7&配置Hadoop環境

主要內容:

1.安裝虛擬機和centOS7。

2.理解Hadoop的體系結構。

3.配置Hadoop集羣

寫在開頭(相關軟件下載link和參考的博客)

VMware軟件的安裝

https://blog.csdn.net/sehejs_a/article/details/80633379
這個博客有VMware正版軟件的下載地址和激活密鑰

centOS7鏡像下載:

https://www.centos.org/download/

安裝教程:

https://blog.csdn.net/xyphf/article/details/82915311

hadoop2.7.7下載安裝配置:

https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.tar.gz
安裝可參考:https://blog.csdn.net/pucao_cug/article/details/71698903

jdk1.8下載安裝:

https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

安裝可參考:https://blog.csdn.net/pucao_cug/article/details/68948639

正文

安裝VMare14

c盤擴容(由於安裝虛擬機需要c盤的存儲空間)

使用diskGenius

安裝centOS7

error:虛擬機上安裝CentOS時出現“此主機支持Inter VT-x,但Inter VT-x處於禁用狀態”的解決方法

在這裏插入圖片描述

root密碼:root

賬戶名:node0

密碼:root
在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

vi /etc/sysconfig/network-scripts/ifcfg-ens33
service network restart //輸入命令,使配置有效  改成上面就能與本地連傳文件,不然只需要將ONBOOT改成yes即可
yum update //更新yum
yum search ifconfig
yum -y install net-tools //安裝工具 yum install net-tools.x86_64 
ifconfig //查看ip
ctrl+c		//終止ping;從>退出
Ctrl + z //暫停ping命令

在這裏插入圖片描述

安裝成功!

關閉防火牆
mkdir xx
查看防火牆狀態
systemctl status firewalld.service
關閉防火牆
systemctl stop firewalld.service
禁用防火牆
systemctl disable firewalld.service

在這裏插入圖片描述

安裝另外兩個虛擬機:node1 node2
hostname node0 //

node 1
在這裏插入圖片描述
node2
在這裏插入圖片描述

192.168.195.128 node0
192.168.195.129 node1
192.168.195.130 node2
修改/etc/hosts文件

vi /etc/hosts

​ 修改這3臺機器的/etc/hosts文件,在文件中添加以下內容:

192.168.195.128 node0
192.168.195.129 node1
192.168.195.130 node2

在這裏插入圖片描述

配置完成後使用ping命令檢查這3個機器是否相互ping得通,以node0爲例,執行命令:

在這裏插入圖片描述

ping得通,說明機器是互聯的,而且hosts配置也正確。

設置免密登錄

給3個機器生成祕鑰文件

以node0爲例,執行命令,生成空字符串的祕鑰(後面要使用公鑰),命令是:

ssh-keygen  -t   rsa   -P  ''

在這裏插入圖片描述

因爲我現在用的是root賬戶,所以祕鑰文件保存到了/root/.ssh/目錄內,可以使用命令查看,命令是:

ls    /root/.ssh/

在這裏插入圖片描述

使用同樣的方法爲node1和node2生成祕鑰(命令完全相同,不用做如何修改)。

在node0上創建authorized_keys文件

​ 接下來要做的事情是在3臺機器的/root/.ssh/目錄下都存入一個內容相同的文件,文件名稱叫authorized_keys,文件內容是我們剛纔爲3臺機器生成的公鑰。爲了方便,我下面的步驟是現在node0上生成authorized_keys文件,然後把3臺機器剛纔生成的公鑰加入到這個node0的authorized_keys文件裏,然後在將這個authorized_keys文件複製到node1和node2上面。

​ 首先使用命令,在node0的/root/.ssh/目錄中生成一個名爲authorized_keys的文件,命令是:

touch  /root/.ssh/authorized_keys

​ 可以使用命令看,是否生成成功,命令是:

ls   /root/.ssh/
    其次將node0上的/root/.ssh/id_rsa.pub文件內容,node1上的/root/.ssh/id_rsa.pub文件內容,node2上的/root/.ssh/id_rsa.pub文件內容複製到這個authorized_keys文件中,複製的方法很多了,可以用cat命令和vim命令結合來弄,也可以直接把這3臺機器上的/root/.ssh/id_rsa.pub文件下載到本地,在本地將authorized_keys文件編輯好在上載到這3臺機器上。
測試使用ssh進行無密碼登錄
ssh  node1
exit

一定要注意的是,每次ssh完成後,都要執行exit,否則你的後續命令是在另外一臺機器上執行的。

在這裏插入圖片描述
在node1,node2上測試

ok!

安裝配置jdk和hadoop

配置jdk1.8.0_221

參考:https://blog.csdn.net/pucao_cug/article/details/68948639

tar    -zxvf    jdk-8u121-linux-x64.tar.gz 
vi /etc/profile

只要在/etc/profile文件中增加如下配置即可,增加的內容是:

export JAVA_HOME=/opt/java/jdk1.8.0_221
export  CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/
export  PATH=$PATH:$JAVA_HOME/bin

執行命令

source    /etc/profile //將文件中保存的命令執行一次
java -version 	//測試是否安裝成功

在這裏插入圖片描述

注意:將配置內容(其實是命令腳本)寫到/etc/profile中目的就是讓任意用戶登錄後,都會自動執行該腳本,這樣這些登錄的用戶就可以直接使用jdk了。如果因爲某個原因該腳本沒有自動執行,自己手動執行以下就可以了(也就是執行命令source /etc/profile)

ok!

安裝hadoop

注意: 3臺機器上都需要重複下面所講的步驟。

在opt目錄下新建一個名爲hadoop的目錄,並將下載得到的hadoop壓縮包上載到該目錄下,

cd   /opt/hadoop
tar  -xvf   file  //解壓
rm -rf dir1	//	刪除 ‘dir1’ 目錄及其子目錄內容
mkdir dir1	//創建 ‘dir1’ 目錄
mkdir dir1 dir2		//同時創建兩個目錄
mkdir -p /tmp/dir1/dir2		//創建一個目錄樹
mv dir1 dir2		//移動/重命名一個目錄
rm -f file1		//刪除 ‘file1’
新建幾個目錄

​ 在/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
修改etc/hadoop中的一系列配置文件

​ 修改/opt/hadoop/hadoop-2.8.0/etc/hadoop目錄內的一系列文件。

1、修改core-site.xml

​ 修改/opt/hadoop/hadoop-2.8.0/etc/hadoop/core-site.xml文件

​ 在節點內加入配置:

 <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://node0:9000</value>

   </property>

</configuration>

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_221

    說明:修改爲自己的JDK路徑
3、修改hdfs-site.xml

​ 修改/opt/hadoop/hadoop-2.8.0/etc/hadoop/hdfs-site.xml文件

​ 在節點內加入配置:

<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。

4、新建並且修改mapred-site.xml

​ 在該版本中,有一個名爲mapred-site.xml.template的文件,複製該文件,然後改名爲mapred-site.xml,命令是:

cp file1 file2	//將file1複製爲file2
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文件,在節點內加入配置:

<property>

   <name>mapred.job.tracker</name>

   <value>node0: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>
5、修改slaves文件

​ 修改/opt/hadoop/hadoop-2.8.0/etc/hadoop/slaves文件,將裏面的localhost刪除,添加如下內容:

node1
node2
6.修改yarn-site.xml文件
<property>

        <name>yarn.resourcemanager.hostname</name>

        <value>node0</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這個的意思是忽略虛擬內存的檢查,如果你是安裝在虛擬機上,這個配置很有用,配上去之後後續操作不容易出問題。如果是實體機上,並且內存夠多,可以將這個配置去掉。

//什麼都沒改 將node0中改的配置文件直接替換了node1和node2中的配置文件

啓動hadoop

因爲node0是namenode,node1和node2都是datanode,所以只需要對node0進行初始化操作,也就是對hdfs進行格式化。

進入到node0這臺機器的/opt/hadoop/hadoop-2.7.7/bin目錄,也就是執行命令:

cd   /opt/hadoop/hadoop-2.8.0/bin

執行初始化腳本,也就是執行命令:

 ./hadoop  namenode  -format

​ 稍等幾秒,不報錯的話,即可執行成功,如圖:
在這裏插入圖片描述

格式化成功後,可以在看到在/root/hadoop/dfs/name/目錄多了一個current目錄,而且該目錄內有一系列文件
在這裏插入圖片描述

在namenode上執行啓動命令
 因爲node0是namenode,node1和node2都是datanode,所以只需要再node0上執行啓動命令即可。

       進入到hserver1這臺機器的/opt/hadoop/hadoop-2.8.0/sbin目錄,也就是執行命令:
       cd    /opt/hadoop/hadoop-2.7.7/sbin



      執行初始化腳本,也就是執行命令:
       ./start-all.sh

第一次執行上面的啓動命令,會需要我們進行交互操作,在問答界面上輸入yes回車

在這裏插入圖片描述

測試hadoop

haddoop啓動了,需要測試一下hadoop是否正常。

​ 確定已關閉防火牆。

node0是我們的namanode,該機器的IP是192.168.195.128,在本地電腦訪問如下地址:

http://192.168.195.128:50070/

​ 自動跳轉到了overview頁面

在這裏插入圖片描述

在這裏插入圖片描述

在本地瀏覽器裏訪問如下地址:

http://192.168.195.128:8088/

​ 自動跳轉到了cluster頁面

問題:不能跳轉???????????

問題:修改yarn-site.xml文件時裏面沒有改成node0

修改之後 jps
在這裏插入圖片描述
在這裏插入圖片描述

ok!

但是這個時候發現50070LiveNode變爲了0

將/etc/hosts中修改 (127.0.0.1的刪掉) ---------不行

重新生成------------不行

直接對每個機器,把dfs目錄和tmp目錄全部刪掉,然後對每個機器進行格式化。----------------ok!

結果:

在這裏插入圖片描述
在這裏插入圖片描述

//關閉:
./stop-dfs.sh
./stop-all.sh
jps //查看啓動進程

在這裏插入圖片描述

三、心得總結:

​ 本來準備直接在服務器上centos下配置hadoop框架的。看了下還挺麻煩的,尤其需要配置主節點和數據節點。還是老老實實安裝虛擬機,老老實實C盤擴了一下容,配置的整個過程肯定是遇到了很多問題,在實驗步驟中也有一些體現。在最後啓動和測試的時候也發現了很多細節問題。有一種感覺,這一個月配了各種環境,所以在配置hadoop的整個過程中心態也與前段時間不同,直覺與熟練程度很明顯不一樣。在環境配置好之後,再看hadoop架構,也有了新的理解。

Hadoop是用於在計算機集羣上進行分佈式計算和超大型數據集存儲的框架。

三個核心組件:

HDFS, MapReduce, YARN

HDFS:

分佈式文件系統,提供高吞吐量的應用程序數據訪問,對外部客戶機而言,HDFS 就像一個傳統的分級文件系統。可以創建、刪除、移動或重命名文件,等等。但是 HDFS 的架構是基於一組特定的節點構建的。

NameNode:主節點(一個)

​ 提供元數據服務;

​ 客戶端的主控和代理訪問文件的角色;

DataNode:數據節點

保存數據塊;它爲 HDFS 提供存儲塊。由於僅存在一個 NameNode,存儲在 HDFS 中的文件被分成塊,然後將這些塊複製到多個計算機中(DataNode)。

MapReduce

一個分佈式海量數據處理的軟件框架集計算集羣。

MapReduce主要由Map階段和Reduce階段構成。Map階段實現的是映射,主要用來把一組鍵值對映射成一組新的鍵值對,Reduce階段實現的是歸納,用來保證所有映射的鍵值對中的每一個共享相同的鍵值對。

YARN

ResourceManager(每個集羣一個)

是全局的,負責對於系統中的所有資源有最高的支配權。

它主要由兩個組件構成:調度器(Scheduler)和應用程序管理器(Applications Manager,ASM)。

調度器根據容量、隊列等限制條件(如每個隊列分配一定的資源,最多執行一定數量的作業等),將系統中的資源分配給各個正在運行的應用程序。

應用程序管理器負責管理整個系統中所有應用程序,

ApplicationMaster(每個應用程序一個)

每一個job有一個ApplicationMaster

主要功能包括:

與RM調度器協商以獲取資源(用Container表示);

將得到的任務進一步分配給內部的任務;

與NM通信以啓動/停止任務;

監控所有任務運行狀態,並在任務運行失敗時重新爲任務申請資源以重啓任務。

NodeManager(每個節點一個)

NM是每個節點上的資源和任務管理。

一方面,它會定時地向RM彙報本節點上的資源使用情況和各個Container的運行狀態;

另一方面,它接收並處理來自AM的Container啓動/停止等各種請求。

一個分佈式海量數據處理的軟件框架集計算集羣。

MapReduce主要由Map階段和Reduce階段構成。Map階段實現的是映射,主要用來把一組鍵值對映射成一組新的鍵值對,Reduce階段實現的是歸納,用來保證所有映射的鍵值對中的每一個共享相同的鍵值對。

YARN

ResourceManager(每個集羣一個)

是全局的,負責對於系統中的所有資源有最高的支配權。

它主要由兩個組件構成:調度器(Scheduler)和應用程序管理器(Applications Manager,ASM)。

調度器根據容量、隊列等限制條件(如每個隊列分配一定的資源,最多執行一定數量的作業等),將系統中的資源分配給各個正在運行的應用程序。

應用程序管理器負責管理整個系統中所有應用程序,

ApplicationMaster(每個應用程序一個)

每一個job有一個ApplicationMaster

主要功能包括:

與RM調度器協商以獲取資源(用Container表示);

將得到的任務進一步分配給內部的任務;

與NM通信以啓動/停止任務;

監控所有任務運行狀態,並在任務運行失敗時重新爲任務申請資源以重啓任務。

NodeManager(每個節點一個)

NM是每個節點上的資源和任務管理。

一方面,它會定時地向RM彙報本節點上的資源使用情況和各個Container的運行狀態;

另一方面,它接收並處理來自AM的Container啓動/停止等各種請求。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章