Hadoop實戰:Hadoop分佈式集羣部署(一)

1、系統參數優化配置

1.1 系統內核參數優化配置html

修改文件/etc/sysctl.conf,使用sysctl -p命令即時生效。java

1.2 修改Linux最大限制node

追加到文件/etc/security/limits.conf便可。linux

1.3 磁盤I/O優化調整git

Linux磁盤I/O調度器對磁盤的訪問支持不一樣的策略,默認的爲CFQ,GP建議設置爲deadline。web

我這裏是sda磁盤,因此直接對sda磁盤更改IO調度策略(你須要根據你的磁盤進行設置),以下設置:shell

若是想永久生效,加入到/etc/rc.local便可。apache

PS:都配置完畢後,重啓生效便可。vim

2、安裝前環境配置(全部節點)

2.1 測試環境清單centos

角色 主機名 地址 系統 硬件
namenode,resourcemanager,datanode,nodemanager,secondarynamenode hadoop-nn 10.10.0.186 CentOS 7.2 8核8G
datanode,nodemanager hadoop-snn 10.10.0.187 CentOS 7.2 8核8G
datanode,nodemanager hadoop-dn-01 10.10.0.188 CentOS 7.2 8核8G

2.2 設置主機名

2.3 關閉防火牆

若是想開啓防火牆,就須要瞭解Greenplum全部的端口信息便可。

2.4 關閉SELinux

2.5 添加全部節點到/etc/hosts

2.6 NTP時間同步

在Hadoop namenode節點安裝ntp服務器,而後其餘各個節點都同步namenode節點的時間。

而後在其餘節點同步ntp時間。

添加一個計劃任務,Hadoop須要各個節點時間的時間都是一致的,切記。

3、開始部署Hadoop

3.1 在全部主機安裝JAVA

查看java版本,確保此命令沒有問題

另外openjdk安裝後,不會默許設置JAVA_HOME環境變量,要查看安裝後的目錄,能夠用命令。

默認jre目錄爲:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.131-3.b12.el7_3.x86_64/jre

設置環境變量,可用編輯/etc/profile.d/java.sh

完成這項操做以後,須要從新登陸,或source一下profile文件,以便環境變量生效,固然也能夠手工運行一下,以即時生效。

3.2 在全部主機建立專門hadoop用戶

設置密碼,爲簡單起見,3臺機器上的hadoop密碼最好設置成同樣,好比123456。爲了方便,建議將hadoop加入root用戶組,操做方法:

執行完後hadoop即歸屬於root組了,能夠再輸入id hadoop查看輸出驗證一下,若是看到相似下面的輸出:

3.3 在NameNode節點建立祕鑰

建立RSA祕鑰對

在NameNode節點複製公鑰到全部節點Hadoop用戶目錄下,包括本身:

3.4 在全部主機解壓Hadoop二進制包並設置環境變量

Hadoop二進制包下載自行去國內源或者官網搞定。

編輯環境配置文件/etc/profile.d/hadoop.sh,定義相似以下環境變量,設定Hadoop的運行環境。

建立數據和日誌目錄

然後,在Hadoop的安裝目錄中建立logs目錄,並修改Hadoop全部文件的屬主和屬組。

 

4、配置全部Hadoop節點

4.1 hadoop-nn節點

須要配置如下幾個文件。

core-site.xml

core-size.xml文件包含了NameNode主機地址以及其監聽RPC端口等信息(NameNode默認使用的RPC端口爲8020),對於分佈式環境,每一個節點都須要設置NameNode主機地址,其簡要的配置內容以下所示:

 

hdfs-site.xml

hdfs-site.xml主要用於配置HDFS相關的屬性,列如複製因子(即數據塊的副本數)、NN和DN用於存儲數據的目錄等。數據塊的副本數對於分佈式的Hadoop應該爲3,這裏我設置爲2,爲了減小磁盤使用。而NN和DN用於村粗的數據的目錄爲前面的步驟中專門爲其建立的路徑。另外,前面的步驟中也爲SNN建立了相關的目錄,這裏也一併配置爲啓用狀態。

 

注意,若是須要其它用戶對hdfs有寫入權限,還須要在hdfs-site.xml添加一項屬性定義:

mapred-site.xml

mapred-site.xml文件用於配置集羣的MapReduce framework,此處應該指定使用yarn,另外的可用值還有local和classic。mapred-site.xml默認不存在,但有模塊文件mapred-site.xml.template,只須要將其複製爲mapred-site.xml便可。

 

yarn-site.xml

yarn-site.yml用於配置YARN進程及YARN的相關屬性,首先須要指定ResourceManager守護進程的主機和監聽的端口(這裏ResourceManager準備安裝在NameNode節點);其次須要指定ResourceMnager使用的scheduler,以及NodeManager的輔助服務。一個簡要的配置示例以下所示:

hadoop-env.sh和yarn-env.sh

Hadoop的個各守護進程依賴於JAVA_HOME環境變量,若是有相似於前面步驟中經過/etc/profile.d/java.sh全局配置定義的JAVA_HOME變量便可正常使用。不過,若是想爲Hadoop定義依賴到特定JAVA環境,也能夠編輯這兩個腳本文件,爲其JAVA_HOME取消註釋並配置合適的值便可。此外,Hadoop大多數守護進程默認使用的堆大小爲1GB,但現實應用中,可能須要對其各種進程的堆內存大小作出調整,這隻須要編輯此二者文件中相關環境變量值便可,列如HADOOP_HEAPSIZE、HADOOP_JOB_HISTORY_HEADPSIZE、JAVA_HEAP_SIZE和YARN_HEAP_SIZE等。

slaves文件

slaves文件存儲於了當前集羣的全部slave節點的列表,默認值爲localhost。這裏我打算在三個節點都安裝DataNode,因此都添加進去便可。

到目前爲止,第一個節點(Master)已經配置好了。在hadoop集羣中,全部節點的配置都應該是同樣的,前面咱們也爲slaves節點建立了Hadoop用戶、數據目錄以及日誌目錄等配置。

接下來就是把Master節點的配置文件都同步到全部Slaves便可。

 

5、格式化HDFS

在HDFS的NameNode啓動以前須要先初始化其用於存儲數據的目錄,若是hdfs-site.xml中dfs.namenode.name.dir屬性指定的目錄不存在,格式化命令會自動建立之;若是事先存在,請確保其權限設置正確,此時格式操做會清除其內部的全部數據並從新創建一個新的文件系統。須要以hdfs用戶的身份執行以下命令。

其輸出會有大量的信息輸出,若是顯示出相似」17/06/13 05:56:18 INFO common.Storage: Storage directory /data/hadoop/hdfs/nn has been successfully formatted.「的結果表示格式化操做已然完成。

6、啓動Hadoop集羣

啓動Hadood集羣的方法有兩種:一是在各節點分別啓動須要啓動的服務,二是在NameNode節點啓動整個集羣(推薦方法)。

第一種:分別啓動方式

Master節點須要啓動HDFS的NameNode、SecondaryName、nodeDataNode服務,以及YARN的ResourceManager服務。

各Slave節點須要啓動HDFS的DataNode服務,以及YARN的NodeManager服務。

第二種:集羣啓動方式

集羣規模較大時,分別啓動各節點的各服務過於繁瑣和低效,爲此,Hadoop專門提供了start-dfs.sh和stop-dfs.sh來啓動及中止整個hdfs集羣,以及start-yarn.sh和stop-yarn.sh來啓動及中止整個yarn集羣。

較早版本的Hadoop會提供start-all.sh和stop-all.sh腳原本統一控制hdfs和mapreduce,但Hadoop 2.0及以後的版本不建議再使用此種方式。

我這裏都使用集羣啓動方式。

6.1 啓動HDFS集羣

HDFS集羣啓動完成後,可在各節點以jps命令等驗證各進程是否正常運行,也能夠經過Web UI來檢查集羣的運行狀態。

查看NameNode節點啓動的進程:

查看DataNode節點啓動進程:

 

經過JPS命令和開啓的端口基本能夠看出,NameNode、SecondaryNameNode、DataNode進程各自開啓的對應端口。另外,能夠看到DataNode都正常鏈接到了NameNode的8020端口。若是相關節點起不來,多是權限不對,或者相關目錄沒有建立,具體能夠看相關節點的日誌:/usr/local/hadoop/logs/*.log。

經過NameNode節點的http://hadoop-nn:50070訪問Web UI界面:

Hadoop實戰:Hadoop分佈式集羣部署(一)能夠看到3個DataNode節點都運行正常。

此時其實HDFS集羣已經好了,就能夠往裏面存儲數據了,下面簡單使用HDFS命令演示一下:

而後咱們再看一下Hadoop Web UI界面:

Hadoop實戰:Hadoop分佈式集羣部署(一)

能夠看到Blocks字段,在Hadoop-dn和hadoop-nn節點各自佔用一個塊,HDFS默認未64M一個塊大小。因爲咱們上傳的文件過小,因此也沒有作切割,咱們再啓動集羣時設置的是2個副本,因此這裏就至關於存儲了兩份。

HDFS集羣管理命令

6.2 啓動YARN集羣

YARN集羣啓動完成後,可在各節點以jps命令等驗證各進程是否正常運行。

經過JPS命令和開啓的端口基本能夠看出ResourceManager、NodeManager進程都各自啓動。另外,NodeManager會在對應的DataNode節點都啓動。

經過ResourceManager節點的http://hadoop-nn:8088訪問Web UI界面:

Hadoop實戰:Hadoop分佈式集羣部署(一)

YARN集羣管理命令

YARN命令有許多子命令,大致可分爲用戶命令和管理命令兩類。直接運行yarn命令,可顯示其簡單使用語法及各子命令的簡單介紹:

這些命令中,jar、application、node、logs、classpath和version是經常使用的用戶命令,而resourcemanager、nodemanager、proxyserver、rmadmin和daemonlog是較爲經常使用的管理類命令。

8、運行YARN應用程序

YARN應用程序(Application)能夠是一個簡單的shell腳本、MapReduce做業或其它任意類型的做業。須要運行應用程序時,客戶端須要事先生成一個ApplicationMaster,然後客戶端把application context提交給ResourceManager,隨後RM向AM分配內存及運行應用程序的容器。大致來講,此過程分爲六個階段。

  • Application初始化及提交;
  • 分配內存並啓動AM;
  • AM註冊及資源分配;
  • 啓動並監控容器;
  • Application進度報告;
  • Application運行完成;

下面咱們來利用搭建好的Hadoop平臺處理一個任務,看一下這個流程是怎樣的。Hadoop安裝包默認提供了一下運行示例,以下操做:

咱們找一個比較好理解的wordcount進行測試,還記得咱們剛開始提供一個funcations文件到了HDFS集羣中,下面咱們就把funcations這個文件進行單詞統計處理,示例以下:

咱們把統計結果放到HDFS集羣的/test/wc目錄下。另外,注意當輸出目錄存在時執行任務會報錯。

任務運行時,你能夠去Hadoop管理平臺(8088端口)看一下會有以下相似的輸出信息,包括這次應用名稱,運行用戶、任務名稱、應用類型、執行時間、執行狀態、以及處理進度。

Hadoop實戰:Hadoop分佈式集羣部署(一)

而後咱們能夠看一下/test/wc目錄下有什麼:

看一下單詞統計結果:

 

9、開啓歷史服務

當運行過Yarn任務以後,在Web UI界面能夠查看其狀態信息。可是當ResourceManager重啓以後,這些任務就不可見了。因此能夠經過開啓Hadoop歷史服務來查看歷史任務信息。

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

 

JobHistoryServer開啓後,能夠經過Web頁面查看歷史服務器:

Hadoop實戰:Hadoop分佈式集羣部署(一)

歷史服務器的Web端口默認是19888,能夠查看Web界面。你能夠多執行幾回Yarn任務,能夠經過History點擊跳到歷史頁面,查看其任務詳情。

Hadoop實戰:Hadoop分佈式集羣部署(一)

Hadoop實戰:Hadoop分佈式集羣部署(一)

可是在上面所顯示的某一個Job任務頁面的最下面,Map和Reduce個數的連接上,點擊進入Map的詳細信息頁面,再查看某一個Map或者Reduce的詳細日誌是看不到的,是由於沒有開啓日誌彙集服務。

10、開啓日誌彙集

MapReduce是在各個機器上運行的,在運行過程當中產生的日誌存在於各個機器上,爲了可以統一查看各個機器的運行日誌,將日誌集中存放在HDFS上,這個過程就是日誌彙集。

配置日誌彙集功能,Hadoop默認是不啓用日誌彙集的,在yarn-site.xml文件裏配置啓用日誌彙集。

yarn.log-aggregation-enable:是否啓用日誌彙集功能。

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

將配置文件分發到其餘節點:

重啓Yarn進程:

重啓HistoryServer進程:

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

運行Job後,就能夠在歷史服務器Web頁面查看各個Map和Reduce的日誌了。

11、內存調整

 

Ambari——大數據平臺的搭建利器:https://www.ibm.com/developerworks/cn/opensource/os-cn-bigdata-ambari/index.html

相關文章
相關標籤/搜索