大數據 -- Hadoop集群環境搭建


首先我們來認識一下HDFS, HDFS(Hadoop Distributed File System )Hadoop分布式文件系統。它其實是將一個大文件分成若干塊保存在不同服務器的多個節點中。通過聯網讓用戶感覺像是在本地一樣查看文件,為了降低文件丟失造成的錯誤,它會為每個小文件復制多個副本(默認為三個),以此來實現多機器上的多用戶分享文件和存儲空間。

Hadoop主要包含三個模塊:

  • HDFS模塊:HDFS負責大數據的存儲,通過將大文件分塊后進行分布式存儲方式,突破了服務器硬盤大小的限制,解決了單台機器無法存儲大文件的問題,HDFS是個相對獨立的模塊,可以為YARN提供服務,也可以為HBase等其他模塊提供服務。
  • YARN模塊:YARN是一個通用的資源協同和任務調度框架,是為了解決Hadoop中MapReduce里NameNode負載太大和其他問題而創建的一個框架。YARN是個通用框架,不止可以運行MapReduce,還可以運行Spark、Storm等其他計算框架。
  • MapReduce模塊:MapReduce是一個計算框架,它給出了一種數據處理的方式,即通過Map階段、Reduce階段來分布式地流式處理數據。它只適用於大數據的離線處理,對實時性要求很高的應用不適用。多相關信息可以參考博客:初識HDFS(10分鍾了解HDFS、NameNode和DataNode)

本節將會介紹Hadoop集群的配置,目標主機我們可以選擇虛擬機中的多台主機或者多台阿里雲服務器。

注意:以下所有操作都是在root用戶下執行的,因此基本不會出現權限錯誤問題。

一、Vmware安裝

VMware虛擬機有三種網絡模式,分別是Bridged(橋接模式)、NAT(網絡地址轉換模式)、Host-only(主機模式):

  • 橋接:選擇橋接模式的話虛擬機和宿主機在網絡上就是平級的關系,相當於連接在同一交換機上;

  • NAT:NAT模式就是虛擬機要聯網得先通過宿主機才能和外面進行通信;

  • 僅主機:虛擬機與宿主機直接連起來。

具體區別可以參考博客:Vmware虛擬機下三種網絡模式配置

VMware Workstation Pro 15中文破解版下載地址:http://www.zdfans.com/html/16025.html,參考安裝破解教程進行安裝。

二、CentOS安裝

CentOS7下載地址;http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1810.iso

在Vmware中安裝CentOS7的步驟可以參考博客:VMware安裝Centos7超詳細過程(圖文)(包含克隆模式)。

1、網絡模式配置為橋接模式,CentOS7網絡IP配置參考博客:Centos7虛擬機橋接模式設置靜態ip

2、配置主機名

vi  /etc/sysconfig/network

3、配置Host

 vi /etc/hosts

 

192.168.1.100為CentOS7網絡IP配置中設置的本機的靜態IP地址。

4、關閉防火牆和selinux

service iptables stop
vim /etc/sysconfig/selinux

三 阿里雲服務器環境搭建

如果可以申請到阿里雲服務器推薦使用阿里雲服務器,這里申請的時CentOS 7.2,相關步驟可以參考博客:大數據 -- zookeeper和kafka集群環境搭建第一節。

查看防火牆狀態:

systemctl status firewalld

如果是開啟,需要利用命令將防火牆關閉:

systemctl stop firewalld
systemctl disable firewalld

 

四 安裝JDK

JDK安裝可以參考博客大數據 -- zookeeper和kafka集群環境搭建第二節。

五 偽分布式安裝

Hadoop部署模式主要有:本地模式、偽分布模式、完全分布式模式、HA完全分布式模式。

區分的依據是NameNode、DataNode、ResourceManager、NodeManager等模塊運行在幾個JVM進程、幾個機器。

模式名稱 各個模塊占用的JVM進程數 各個模塊運行在幾個機器數上
本地模式 1個 1個
偽分布式模式 N個 1個
完全分布式模式 N個 N個
HA完全分布式 N個 N個

下面我選擇將Hadoop偽分布式模式安裝在阿里雲服務器zy1主機上。偽分布式模式可以看作是完全分布式,但是跑在一個節點上,所有的進程都配置在一個節點上,擁有分布式文件系統,只不過這個系統只有一個節點。

1、下載並解壓

wget http://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.8.5/hadoop-2.8.5.tar.gz
tar -zxvf hadoop-2.8.5.tar.gz -C /opt/bigdata

重新命名:

mv hadoop-2.8.5 hadoop

2、 配置Hadoop環境變量

vim /etc/profile

追加配置:

export HADOOP_HOME=/opt/bigdata/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

使配置生效:

. /etc/profile

3、驗證HADOOP_HOME參數

echo $HADOOP_HOME

4、 配置 hadoop-env.sh JAVA_HOME參數

修改hadoop-env.sh:

vim  ${HADOOP_HOME}/etc/hadoop/hadoop-env.sh

修改JAVA_HOME參數為:

export JAVA_HOME=/usr/lib/jvm/java

5、配置core-site.xml

vim ${HADOOP_HOME}/etc/hadoop/core-site.xml

添加內容如下:

<configuration>
    <property>
       <name>fs.defaultFS</name>
       <value>hdfs://zy1:9000</value>
    </property>
    <property>
       <name>hadoop.tmp.dir</name>
      <value>/opt/bigdata/data/hadoop</value>
    </property>
</configuration>  
  • fs.defaultFS:配置的是HDFS的目錄;
  • hadoop.tmp.dir:配置的是Hadoop臨時目錄,比如HDFS的NameNode數據默認都存放這個目錄下,查看*-default.xml等默認配置文件,就可以看到很多依賴${hadoop.tmp.dir}的配置。默認的hadoop.tmp.dir是/tmp/hadoop-${user.name},此時有個問題就是NameNode會將HDFS的元數據存儲在這個/tmp目錄下,如果操作系統重啟了,系統會清空/tmp目錄下的東西,導致NameNode元數據丟失,是個非常嚴重的問題,所有我們應該修改這個路徑。

創建臨時目錄:

mkdir -p /opt/bigdata/data/hadoop

6、配置hdfs-site.xml:

vim ${HADOOP_HOME}/etc/hadoop/hdfs-site.xml

添加內容如下:

<configuration>
 <property>
       <name>dfs.replication</name>
       <value>1</value>
    </property>
</configuration>

dfs.replication配置的是HDFS存儲時的備份數量,因為這里是偽分布式環境只有一個節點,所以這里設置為1。

7、格式化HDFS:

hdfs namenode -format

注意:如果格式化成功了,不可以再繼續格式化,如果想繼續格式化可以參考Hadoop1重新格式化HDFS。如果沒有格式化成功,需要一直格式化。

格式化后,查看core-site.xml里hadoop.tmp.dir(本例是/opt/bigdata/data/hadoop目錄)指定的目錄下是否有了dfs目錄,如果有,說明格式化成功。

ll /opt/bigdata/data/hadoop

 

 其中/opt/bigdata/data/hadoop/dfs/name/current下文件如下:

  • fsimage是NameNode元數據在內存滿了后,持久化保存到的文件;
  • fsimage*.md5 是校驗文件,用於校驗fsimage的完整性;
  • seen_txid 是hadoop的版本;
  • vession文件里保存:namespaceID:是文件系統命名空間的唯一標識符,是在NameNode首次格式化時創建的。clusterID:集群ID,對於聯邦HDFS非常重要,這里一個集群由多個命名空間組成,且每個命名空間由一個NameNode管理。blockpoolID是數據塊池的唯一標識符,數據塊池包含了由一個NameNode管理的命名空間中的所有文件。NameNode和DataNode的集群ID應該一致,表明是一個集群。

8、啟動NameNode

hadoop-daemon.sh start namenode

 

 9、啟動DataNode

hadoop-daemon.sh start datanode

 

10、 啟動SecondaryNameNode

hadoop-daemon.sh start secondarynamenode

 

11、JPS命令查看是否已經啟動成功,有結果就是啟動成功了

jps

 

12、HDFS上測試創建目錄、上傳、下載文件

HDFS上創建目錄:

hdfs dfs -mkdir /demo1

 上傳本地文件到HDFS上:

hdfs dfs -put  ${HADOOP_HOME}/etc/hadoop/core-site.xml /demo1

讀取HDFS上的文件內容:

hdfs dfs -cat /demo1/core-site.xml

從HDFS上下載文件到本地: 

hdfs dfs -get /demo1/core-site.xml

 

更多hdfs文件系統的命令可以查看:

hdfs  dfs

13、配置mapred-site.xml

默認沒有mapred-site.xml文件,但是有個mapred-site.xml.template配置模板文件。復制模板生成mapred-site.xml:

cd /opt/bigdata/hadoop/
cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml

添加配置

vim etc/hadoop/mapred-site.xml

指定mapreduce運行在yarn框架上。

<configuration>
  <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
  </property>
</configuration>

14、配置yarn-site.xml

vim etc/hadoop/yarn-site.xml

yarn.nodemanager.aux-services配置了yarn的默認混洗方式,選擇為mapreduce的默認混洗算法。

yarn.resourcemanager.hostname指定了Resourcemanager運行在哪個節點上。

<configuration>

<!-- Site specific YARN configuration properties -->
 <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
   </property>
   <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>zy1</value>
   </property>
</configuration>

15、啟動Resourcemanager

yarn-daemon.sh start resourcemanager

16、 啟動nodemanager

yarn-daemon.sh start nodemanager

17、查看是否啟動成功

可以看到ResourceManager、NodeManager已經啟動成功了。

18、YARN的Web頁面

YARN的Web客戶端端口號是8088,通過http://106.15.74.155:8088/可以查看當前執行的job。

注意:由於使用到了8088端口。需要在阿里雲中配置入規則,具體可以參考阿里雲官方收藏:同一個地域、不同賬號下的實例實現內網互通 

19、hdfs的web頁面

hdfs的Web客戶端端口號是50070,通過http://106.15.74.155:50070/可以查看。

20、運行MapReduce Job

在Hadoop的share目錄里,自帶了一些jar包,里面帶有一些mapreduce實例小例子,位置在share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.5.jar,可以運行這些例子體驗剛搭建好的Hadoop平台,我們這里來運行最經典的WordCount實例。

在hdfs文件系統上創建測試用的Input文件:

hdfs dfs -mkdir -p /wordcountdemo/input

創建原始文件:

在本地/opt/bigdata/data/hadoop目錄創建一個文件wc.input,vim /opt/bigdata/data/hadoop/wc.input內容如下:

doop mapreduce hive
hbase spark storm
sqoop hadoop hive
spark hadoop

將wc.input文件上傳到HDFS的/wordcountdemo/input目錄中:

hdfs dfs -put /opt/bigdata/data/hadoop/wc.input /wordcountdemo/input

運行WordCount MapReduce Job:

cd /opt/bigdata/hadoop
yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.5.jar wordcount /wordcountdemo/input  /wordcountdemo/output

注意:如果執行一直卡在map 0% reduce 0%,可能是由於硬件配置較低的原因:

更多錯誤可以查看日志:$HADOOP_HOME/logs:

 more $HADOOP_HOME/logs/yarn-root-nodemanager-zy1.log 
 more $HADOOP_HOME/logs/yarn-root-resourcemanager-zy1.log

如果運行成功,查看輸出結果目錄:

hdfs dfs -ls /wordcountdemo/output

output目錄中有兩個文件:

  • _SUCCESS文件是空文件,有這個文件說明Job執行成功。
  • part-r-00000文件是結果文件,其中-r-說明這個文件是Reduce階段產生的結果,mapreduce程序執行時,可以沒有reduce階段,但是肯定會有map階段,如果沒有reduce階段這個地方有是-m-。一個reduce會產生一個part-r-開頭的文件。

查看輸出文件內容:

hdfs dfs -cat /wordcountdemo/output/part-r-00000

結果是按照鍵值排好序的。

 21、停止Hadoop

hadoop-daemon.sh stop namenode 
hadoop-daemon.sh stop datanode 
hadoop-daemon.sh stop secondarynamenode 
yarn-daemon.sh stop resourcemanager 
yarn-daemon.sh stop nodemanager

22、開啟歷史服務

Hadoop開啟歷史服務可以在web頁面上查看Yarn上執行job情況的詳細信息。可以通過歷史服務器查看已經運行完的Mapreduce作業記錄,比如用了多少個Map、用了多少個Reduce、作業提交時間、作業啟動時間、作業完成時間等信息。

mr-jobhistory-daemon.sh start historyserver

開啟后,可以通過Web頁面查看歷史服務器:http://106.15.74.155:19888/

23、開啟日志聚集

MapReduce是在各個機器上運行的,在運行過程中產生的日志存在於各個機器上,為了能夠統一查看各個機器的運行日志,將日志集中存放在HDFS上,這個過程就是日志聚集。

Hadoop默認是不啟用日志聚集的。在yarn-site.xml文件里配置啟用日志聚集。

<property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
 </property>
<property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>106800</value>
 </property>  

yarn.log-aggregation-enable:是否啟用日志聚集功能。

yarn.log-aggregation.retain-seconds:設置日志保留時間,單位是秒。

重啟Yarn進程:

stop-yarn.sh
start-yarn.sh

重啟HistoryServer進程:

mr-jobhistory-daemon.sh stop historyserver
mr-jobhistory-daemon.sh start historyserver

測試日志聚集:運行一個demo MapReduce,使之產生日志:

yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.5.jar wordcount /wordcountdemo/input  /wordcountdemo/output

運行Job后,就可以在歷史服務器Web頁面查看各個Map和Reduce的日志了。 

六 完全分布式安裝

完全分部式是真正利用多台Linux主機來進行部署Hadoop,對Linux機器集群進行規划,使得Hadoop各個模塊分別部署在不同的多台機器上。

如果之前你是在虛擬機上創建了zy1主機,那么你可以利用Vmware的克隆功能創建zy2、zy3主機,然后你需要按照第二節的步驟,配置網絡、主機名、Host、這里就不過多介紹了。

下面我們以阿里雲的三台主機zy1、zy2、zy3為例,搭建完全分布式。

1、服務器功能規划

zy1 zy2 zy3
NameNode ResourceManage  
DataNode DataNode DataNode
NodeManager NodeManager NodeManager
HistoryServer   SecondaryNameNode

在zy1節點安裝新的Hadoop:

為了和之前zy1機器上安裝偽分布式Hadoop區分開來,我們將zy1上的Hadoop服務都停止掉,將偽分布式hadoop的安裝目錄改為hadoop-wei,修改配置core-site.xml,中的hadoop.tmp.dir為/opt/bigdata/data/hadoop-wei,然后/opt/bigdata/下安裝另外一個Hadoop。 

hadoop-daemon.sh stop namenode 
hadoop-daemon.sh stop datanode 
hadoop-daemon.sh stop secondarynamenode 
yarn-daemon.sh stop resourcemanager 
yarn-daemon.sh stop nodemanager
cd /opt/bigdata
mv hadoop hadoop-wei
vim hadoop-wei/etc/hadoop/core-site.xml #修改hadoop.tmp.dir
mv /opt/bigdata/data/hadoop /opt/bigdata/data/hadoop-wei

我們采用先在第一台機器上解壓、配置Hadoop,然后再分發到其他兩台機器上的方式來安裝集群。

2、解壓Hadoop目錄

wget http://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.8.5/hadoop-2.8.5.tar.gz
tar -zxvf hadoop-2.8.5.tar.gz -C /opt/bigdata
mv hadoop-2.8.5 hadoop

由於在偽分布式安裝時,我們已經配置了hadoop的環境變量,這里就不需要再重復配置了。我們可以通過以下命令驗證:

echo $HADOOP_HOME

3、配置 hadoop-env.sh、mapred-env.sh   yarn-env.sh JAVA_HOME參數

比如修改hadoop-env.sh:

vim  ${HADOOP_HOME}/etc/hadoop/hadoop-env.sh

修改JAVA_HOME參數為:

export JAVA_HOME=/usr/lib/jvm/java

4、配置core-site.xml

vim ${HADOOP_HOME}/etc/hadoop/core-site.xml

添加內容如下:

<configuration>
    <property>
       <name>fs.defaultFS</name>
       <value>hdfs://zy1:9000</value>
    </property>
    <property>
       <name>hadoop.tmp.dir</name>
      <value>/opt/bigdata/data/hadoop</value>
    </property>
<property> <name>dfs.namenode.name.dir</name> <value>file://${hadoop.tmp.dir}/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file://${hadoop.tmp.dir}/dfs/data</value> </property> </configuration>
  • fs.defaultFS為NameNode的地址。
  • hadoop.tmp.dir:為hadoop臨時目錄的地址,默認情況下,NameNode和DataNode的數據文件都會存在這個目錄下的對應子目錄下(但是上面我們通過dfs.datanode.data.dir,和dfs.namenode.data.dir指定了)。應該保證此目錄是存在的,如果不存在,先創建;
  • dfs.namenode.name.dir:指定目錄來供namenode存儲永久性的文件系統元數據(如果指定多個路徑,使用","隔開)。這些元數據文件會同時備份在所有指定的目錄上,通常情況下,通過配置dfs.namenode.data.dir可以將namenode元數據寫到一兩個本地磁盤和一個遠程磁盤(例如NFS掛載目錄)之中。這樣的話,即使本地磁盤發生故障,甚至整個namenode發生故障,都可以恢復數據文件並重新構成新的namenode(輔助namenode只是定期保存namenode的檢查點,不維護namenode的最新備份);
  • dfs.datanode.data.dir:可以設定datanode存儲數據塊的目錄列表,上面提到dfs.namenode.name.dir描述一系列目錄,其目的是為了支持namenode進行冗余備份。雖然dfs.datanode.data.dir也描述了一系列目錄,但是其目的是使datanode循環的在各個目錄中寫數據。因此,為了提高性能,最好分別為各個本地磁盤指定一個存儲目錄,這樣一來,數據塊跨磁盤分布,針對不同的數據塊的讀操作可以並發執行,從而提高讀取速度。
mkdir /opt/bigdata/data/hadoop

注意:NameNode使用到了9000端口,用於建立與datanode節點的通信。因此namenode節點需要在阿里雲中配置入規則,具體可以參考阿里雲官方收藏:同一個地域、不同賬號下的實例實現內網互通 

5、配置hdfs-site.xml

vim ${HADOOP_HOME}/etc/hadoop/hdfs-site.xml

添加以下內容:

<configuration>
 <property>
   <name>dfs.namenode.secondary.http-address</name>
   <value>zy3:50090</value>
 </property>
 <property>
       <name>dfs.replication</name>
       <value>2</value>
  </property>
  <property>
        <name>dfs.client.use.datanode.hostname</name>
        <value>true</value>
    </property>
  <property>
        <name>dfs.datanode.use.datanode.hostname</name>
        <value>true</value>
    </property>
</configuration>
  • dfs.namenode.secondary.http-address:是指定secondaryNameNode的http訪問地址和端口號,因為在規划中,我們將zy3規划為SecondaryNameNode服務器。所以這里設置為:zy3:50090。
  • dfs.replication配置的是HDFS存儲時的備份數量,這里設置為2;
  • fs.client.use.datanode.hostname:是否客戶端應該使用DN的HostName,在連接DN時,默認是使用IP;(必須設置為true)

  • dfs.datanode.use.datanode.hostname:是否DN應該使用HostName連接其它DN,在數據傳輸時。默認是是IP。(必須設置為true)

6、配置masters、slaves

cd hadoop
vim etc/hadoop/masters
vim etc/hadoop/slaves

masters修改為:

slavers:

masters文件是指定HDFS的主節點。

slaves文件是指定HDFS上有哪些DataNode節點。

7、配置mapred-site.xml

默認沒有mapred-site.xml文件,但是有個mapred-site.xml.template配置模板文件。復制模板生成mapred-site.xml:

cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml

添加配置:

vim etc/hadoop/mapred-site.xml
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>zy1:10020</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>zy1:19888</value>
    </property>
</configuration>
  • mapreduce.framework.name設置mapreduce任務運行在yarn上;
  • mapreduce.jobhistory.address是設置mapreduce的歷史服務器安裝在zy1機器上;
  • mapreduce.jobhistory.webapp.address是設置歷史服務器的web頁面地址和端口號。

8、配置yarn-site.xml

vim etc/hadoop/yarn-site.xml
<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>zy2</value>
    </property>
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>106800</value>
    </property>
</configuration>     
  • yarn.nodemanager.aux-services配置了yarn的默認混洗方式,選擇為mapreduce的默認混洗算法;
  • yarn.resourcemanager.hostname指定了Resourcemanager運行在zy2節點上;
  • yarn.log-aggregation-enable是配置是否啟用日志聚集功能;
  • yarn.log-aggregation.retain-seconds是配置聚集的日志在HDFS上最多保存多長時間;

9、設置SSH無密碼登錄

Hadoop集群中的各個機器間會相互地通過SSH訪問,每次訪問都輸入密碼是不現實的,所以要配置各個機器間的SSH是無密碼登錄的。

在zy1上生成公鑰:

ssh-keygen -t rsa

一路回車,都設置為默認值,然后再當前用戶的Home目錄下的.ssh目錄中會生成公鑰文件(id_rsa.pub)和私鑰文件(id_rsa)

 分發公鑰:

ssh-copy-id zy1
ssh-copy-id zy2
ssh-copy-id zy3

設置zy2、zy3到其他機器的無密鑰登錄:同樣的在zy2、zy3上生成公鑰和私鑰后,將公鑰分發到三台機器上。

10、分發Hadoop文件

通過Scp分發:Hadoop根目錄下的share/doc目錄是存放的hadoop的文檔,文件相當大,建議在分發之前將這個目錄刪除掉,可以節省硬盤空間並能提高分發的速度。

cd /opt/bigdata
rm -rf hadoop/share/doc
scp -r /opt/bigdata/hadoop/ zy2:/opt/bigdata
scp -r /opt/bigdata/hadoop/ zy3:/opt/bigdata

在每個節點下執行:

mkdir /opt/bigdata/data/hadoop

11、格式NameNode

在使用hadoop之前,全新的HDFS安裝需要進行格式化。通過創建存儲目錄和初始化版本的namenode持久數據結構,格式化將創建一個空的文件系統。

在NameNode機器上(節點zy1)執行格式化:

hdfs namenode -format

注意:如果需要重新格式化NameNode,需要先將原來NameNode和DataNode下的文件全部刪除,不然會報錯,NameNode和DataNode所在目錄是在core-site.xml中hadoop.tmp.dir、dfs.namenode.name.dir、dfs.datanode.data.dir屬性配置的。

<configuration>
<property>
       <name>fs.defaultFS</name>
       <value>hdfs://zy1:9000</value>
    </property>
    <property>
       <name>hadoop.tmp.dir</name>
      <value>/opt/bigdata/data/hadoop</value>
    </property>
    <property>
       <name>dfs.namenode.name.dir</name>
       <value>file://${hadoop.tmp.dir}/dfs/name</value>
    </property>
    <property>
       <name>dfs.datanode.data.dir</name>
       <value>file://${hadoop.tmp.dir}/dfs/data</value>
    </property>
</configuration>

每次格式化,默認是創建一個集群ID,並寫入NameNode的VERSION文件中(VERSION文件所在目錄為dfs/name/current )。

此時並沒有將集群ID寫入DataNode的VERSION之中,由於namenode管理所有的文件系統的元數據,datanode可以動態的加入或離開集群,所以初始的格式化過程不涉及datanode

只有在啟動HDFS時,才會將ID寫入DataNode的VERSION之中。如果我們重新格式化HDFS,重新格式化時,默認會生成一個新的集群ID,如果不刪除原來的數據目錄,會導致namenode中的VERSION文件中是新的集群ID,而DataNode中是舊的集群ID,不一致時會報錯。

12、啟動HDFS

在zy1節點運行以下命令:

start-dfs.sh

zy3中的QuorumPeerMain進程不用管,這個是zookeeper進程。

我們來查看以下各個節點的NameNode和DataNode目錄:

可以看到已經將集群ID寫入DataNode的VERSION之中:

13、啟動YARN

start-yarn.sh

在zy2上啟動ResourceManager:

yarn-daemon.sh start resourcemanager

14、啟動日志服務器

 因為我們規划的是在zy1服務器上運行MapReduce日志服務,所以要在zy1上啟動:

mr-jobhistory-daemon.sh start historyserver

現在來查看以下每個節點下的日志文件:

15、查看HDFS Web頁面

hdfs的Web客戶端端口號是50070,通過http://106.15.74.155:50070/可以查看。

16、查看YARN Web 頁面

YARN的Web客戶端端口號是8088,由於ResourceManager設置在zy2節點上,因此通過http://47.103.134.70:8088/查看當前執行的job。

17、測試Job

測試部分可以參考偽分布式測試內容https://www.cnblogs.com/zyly/p/11209286.html#_label4_16

 在測試時會出現如下錯誤:

我們需要配置阿里雲的入規則,開放三個節點的50010端口:

此外,我們還需要在阿里雲安全組規則入規則開放每個節點的8031、8032、50020等等。每個節點具體需要開放什么端口,我們可以通過查看日志獲得,以節點zy2,為例:

 cat logs/hadoop-root-datanode-zy2.log

 cat logs/yarn-root-nodemanager-zy2.log

通過以下命令,可以查看該節點監聽的端口:

netstat -ant

如果實在不知道需要在阿里雲安全組規則中配置哪些端口,那就打開全部端口,但是這樣可能並不安全:

18、hadoop配置信息

Hadoop更多端口相關的配置參考:hadoop端口號配置信息ResourceManager相關配置參數

更多Hadoop的參數配置可以慘開:hadoop 參數配置

19、關閉hadoop

在各個節點下運行如下命令:

cd /opt/bigdata/hadoop
sbin/stop-all.sh 

 20、重新格式化和啟動

在每個節點運行如下命令:

cd /opt/bigdata/hadoop
sbin/stop-all.sh
rm -rf  logs/*
rm -rf ../data/hadoop/*

在namenode節點(zy1)運行:

hdfs namenode -format

然后在每個節點運行相應啟動hadoop的命令。

21、錯誤排查

如果hadoop啟動出現出錯,要學會查看日志,日志位於hadoop安裝路徑下的logs目錄下。

外網無法方位HDFS可以參考:外網無法訪問雲主機HDFS文件系統

參考文章

[1]史上最詳細的Hadoop環境搭建

[2]阿里雲hadoop安裝教程_完全分布式_Hadoop 2.7.4/CentOS 7.4

[3]hadoop 阿里雲偽分布式配置


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM