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

首先咱們來認識一下HDFS, HDFS(Hadoop Distributed File System )Hadoop分佈式文件系統。它實際上是將一個大文件分紅若干塊保存在不一樣服務器的多個節點中。經過聯網讓用戶感受像是在本地同樣查看文件,爲了下降文件丟失形成的錯誤,它會爲每一個小文件複製多個副本(默認爲三個),以此來實現多機器上的多用戶分享文件和存儲空間。html

Hadoop主要包含三個模塊:java

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

本節將會介紹Hadoop集羣的配置,目標主機咱們能夠選擇虛擬機中的多臺主機或者多臺阿里雲服務器。node

注意:如下全部操做都是在root用戶下執行的,所以基本不會出現權限錯誤問題。linux

1、Vmware安裝

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

  • 橋接:選擇橋接模式的話虛擬機和宿主機在網絡上就是平級的關係,至關於鏈接在同一交換機上;算法

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

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

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

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

2、CentOS安裝

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

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

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

二、配置主機名

vi  /etc/sysconfig/network

三、配置Host

vi /etc/hosts

 

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

四、關閉防火牆和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主機上。僞分佈式模式能夠看做是徹底分佈式,可是跑在一個節點上,全部的進程都配置在一個節點上,擁有分佈式文件系統,只不過這個系統只有一個節點。

一、下載並解壓

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環境變量

vim /etc/profile

追加配置:

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

使配置生效:

. /etc/profile

三、驗證HADOOP_HOME參數

echo $HADOOP_HOME

四、 配置 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

五、配置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

六、配置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。

七、格式化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應該一致,代表是一個集羣。

八、啓動NameNode

hadoop-daemon.sh start namenode

 

 九、啓動DataNode

hadoop-daemon.sh start datanode

 

十、 啓動SecondaryNameNode

hadoop-daemon.sh start secondarynamenode

 

十一、JPS命令查看是否已經啓動成功,有結果就是啓動成功了

jps

 

十二、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

1三、配置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>

1四、配置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>

1五、啓動Resourcemanager

yarn-daemon.sh start resourcemanager

1六、 啓動nodemanager

yarn-daemon.sh start nodemanager

1七、查看是否啓動成功

能夠看到ResourceManager、NodeManager已經啓動成功了。

1八、YARN的Web頁面

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

注意:因爲使用到了8088端口。須要在阿里雲中配置入規則,具體能夠參考阿里雲官方收藏:同一個地域、不一樣帳號下的實例實現內網互通 

1九、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

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

 2一、中止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

2二、開啓歷史服務

Hadoop開啓歷史服務能夠在web頁面上查看Yarn上執行job狀況的詳細信息。能夠經過歷史服務器查看已經運行完的Mapreduce做業記錄,好比用了多少個Map、用了多少個Reduce、做業提交時間、做業啓動時間、做業完成時間等信息。

mr-jobhistory-daemon.sh start historyserver

開啓後,能夠經過Web頁面查看歷史服務器:http://106.15.74.155:19888/

2三、開啓日誌彙集

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的克隆功能建立zy二、zy3主機,而後你須要按照第二節的步驟,配置網絡、主機名、Host、這裏就不過多介紹了。

下面咱們以阿里雲的三臺主機zy一、zy二、zy3爲例,搭建徹底分佈式。

一、服務器功能規劃

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,而後再分發到其餘兩臺機器上的方式來安裝集羣。

二、解壓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

三、配置 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

四、配置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節點須要在阿里雲中配置入規則,具體能夠參考阿里雲官方收藏:同一個地域、不一樣帳號下的實例實現內網互通 

五、配置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)

六、配置masters、slaves

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

masters修改成:

slavers:

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

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

七、配置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頁面地址和端口號。

八、配置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上最多保存多長時間;

九、設置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

設置zy二、zy3到其餘機器的無密鑰登陸:一樣的在zy二、zy3上生成公鑰和私鑰後,將公鑰分發到三臺機器上。

十、分發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

十一、格式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,不一致時會報錯。

十二、啓動HDFS

在zy1節點運行如下命令:

start-dfs.sh

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

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

能夠看到已經將集羣ID寫入DataNode的VERSION之中:

1三、啓動YARN

start-yarn.sh

在zy2上啓動ResourceManager:

yarn-daemon.sh start resourcemanager

1四、啓動日誌服務器

 由於咱們規劃的是在zy1服務器上運行MapReduce日誌服務,因此要在zy1上啓動:

mr-jobhistory-daemon.sh start historyserver

如今來查看如下每一個節點下的日誌文件:

1五、查看HDFS Web頁面

hdfs的Web客戶端端口號是50070,經過http://106.15.74.155:50070/能夠查看。

1六、查看YARN Web 頁面

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

1七、測試Job

測試部分能夠參考僞分佈式測試內容http://www.javashuo.com/article/p-hsmxgagy-by.html

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

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

此外,咱們還須要在阿里雲安全組規則入規則開放每一個節點的803一、803二、50020等等。每一個節點具體須要開放什麼端口,咱們能夠經過查看日誌得到,以節點zy2,爲例:

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

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

經過如下命令,能夠查看該節點監聽的端口:

netstat -ant

若是實在不知道須要在阿里雲安全組規則中配置哪些端口,那就打開所有端口,可是這樣可能並不安全:

1八、hadoop配置信息

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

更多Hadoop的參數配置能夠慘開:hadoop 參數配置

1九、關閉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的命令。

2一、錯誤排查

若是hadoop啓動出現出錯,要學會查看日誌,日誌位於hadoop安裝路徑下的logs目錄下。

外網沒法方位HDFS能夠參考:外網沒法訪問雲主機HDFS文件系統

參考文章

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

[2]阿里雲hadoop安裝教程_徹底分佈式_Hadoop 2.7.4/CentOS 7.4

[3]hadoop 阿里雲僞分佈式配置

相關文章
相關標籤/搜索