Flink集羣部署詳細步驟

1.下載Flink壓縮包

下載地址:http://flink.apache.org/downloads.html

我集羣環境是hadoop2.6,Scala2.11版本的,所以下載的是:

flink-1.3.1-bin-hadoop26-scala_2.11.tgz。

2.解壓

上傳至五個節點的相同目錄,執行如下命令解壓:

tar xzf flink-1.3.1-bin-hadoop26-scala_2.11.tgz

3.配置master節點

選擇一個 master節點(JobManager)然後在conf/flink-conf.yaml中設置jobmanager.rpc.address 配置項爲該節點的IP 或者主機名。確保所有節點有有一樣的jobmanager.rpc.address 配置。

4.配置slaves

將所有的 worker 節點 (TaskManager)的IP 或者主機名(一行一個)填入conf/slaves 文件中。

5.啓動flink集羣

bin/start-cluster.sh

6.注意

問https://ci.apache.org/projects/flink/flink-docs-release-1.0/setup/config.html查看更多可用的配置項。爲了使Flink 更高效的運行,還需要設置一些配置項。

以下都是非常重要的配置項:

1、TaskManager總共能使用的內存大小(taskmanager.heap.mb)

2、每一臺機器上能使用的 CPU 個數(taskmanager.numberOfTaskSlots)

3、集羣中的總 CPU個數(parallelism.default)

4、臨時目錄(taskmanager.tmp.dirs)

7.示例

下面的例子闡述了三個節點的集羣部署(IP地址從10.0.0.1 到10.0.0.3,主機名分別爲master, worker1, worker2)。並且展示了配置文件,以及所有機器上一致的可訪問的安裝路徑。 

8.Flink On Yarn配置

你可以很方便地將 Flink部署在現有的YARN集羣上,操作如下:

1、下載 Flink Hadoop2包: Flink with Hadoop 2

2、確保你的 HADOOP_HOME (或YARN_CONF_DIR 或HADOOP_CONF_DIR) __環境變量__設置成你的YARN 和HDFS 配置。

3、運行 YARN客戶端:./bin/yarn-session.sh。你可以帶參數運行客戶端 -n 10 -tm 8192表示分配 10個 TaskManager,每個擁有8 GB 的內存。

 

 

flink集羣安裝部署

yarn集羣模式

 

  • 快速開始
  1. 在yarn上啓動一個一直運行的flink集羣
  2. 在yarn上運行一個flink job
  • flink yarn session
  1. 啓動flink session
  2. 提交任務到flink
  • 在yarn上運行一個獨立的flink job
  1. 用戶依賴jar包和classpath
  • flink on yarn的故障恢復
  • 調試一個失敗的yarn session
  1. 日誌文件
  2. yarn client控制檯和web界面
  • 針對指定的hadoop版本構建yarn client
  • 在yarn上運行flink使用防火牆
  • flink on yarn 內部實現

快速開始

在yarn上啓動一個一直運行的flink集羣

啓動一個yarn session使用4個taskmanager(每個節點4GB內存)
注意:如果自己的虛擬機沒有這麼大內存的話,可以吧-n設置小一點,對應的後面的內存-jm -tm也設置小一點,否則,如果內存不夠用,會導致啓動失敗。


 
  1. tar xvzf flink-1.4.2-bin-hadoop2.tgz

  2. cd flink-1.4.2/

  3. ./bin/yarn-session.sh -n 4 -jm 1024 -tm 4096

通過-s參數指定每一個taskmanager分配多少個slots(處理進程)。我們建議設置爲每個機器的CPU核數。

一旦session創建成功,你可以使用./bin/flink工具向集羣提交任務。

在yarn上運行一個flink job


 
  1. tar xvzf flink-1.4.2-bin-hadoop2.tgz

  2. cd flink-1.4.2/

  3. ./bin/flink run -m yarn-cluster -yn 4 -yjm 1024 -ytm 4096 ./examples/batch/WordCount.jar

 

flink yarn session

yarn是一個集羣資源管理框架。它運行在集羣之上運行各種分佈式應用程序。flink像其他程序一樣,也可以在yarn上運行。用戶不需要設置或者安裝任何東西,如果已經有一個安裝配置好的yarn。

必須的依賴

 

  • 至少是hadoop2.2
  • hdfs(或者是其它支持hadoop的分佈式文件系統)

如果你在使用flink yarn client的時候有什麼問題,可以到這裏查找答案

啓動flink session

按照下面的步驟來學習如何在yarn集羣上啓動一個flink session

一個session將會包含所有必須的flink 服務(jobmanager和taskmanager),這樣你就可以向這個集羣提交程序了。注意:每個session會話你可以運行多個程序。

下載flink

下載hadoop2對應的flink安裝包,點此下載。它包含了必須的文件。

使用下面命令解壓:


 
  1. tar xvzf flink-1.4.2-bin-hadoop2.tgz

  2. cd flink-1.4.2/

啓動一個session

使用下面命令啓動一個session

./bin/yarn-session.sh

這個命令將會輸出下面內容:


 
  1. 用法:

  2. 必選

  3. -n,--container <arg> 分配多少個yarn容器 (=taskmanager的數量)

  4. 可選

  5. -D <arg> 動態屬性

  6. -d,--detached 獨立運行

  7. -jm,--jobManagerMemory <arg> JobManager的內存 [in MB]

  8. -nm,--name 在YARN上爲一個自定義的應用設置一個名字

  9. -q,--query 顯示yarn中可用的資源 (內存, cpu核數)

  10. -qu,--queue <arg> 指定YARN隊列.

  11. -s,--slots <arg> 每個TaskManager使用的slots數量

  12. -tm,--taskManagerMemory <arg> 每個TaskManager的內存 [in MB]

  13. -z,--zookeeperNamespace <arg> 針對HA模式在zookeeper上創建NameSpace

請注意:client必須要設置YARN_CONF_DIR或者HADOOP_CONF_DIR環境變量,通過這個環境變量來讀取YARN和HDFS的配置信息,否則啓動會失敗。

經試驗發現,其實如果配置的有HADOOP_HOME環境變量的話也是可以的。HADOOP_HOME ,YARN_CONF_DIR,HADOOP_CONF_DIR 只要配置的有任何一個即可。

例子:下面的命令會申請10個taskmanager,每個8G內存和32個solt

./bin/yarn-session.sh -n 10 -tm 8192 -s 32

該系統默認會使用這個配置文件:conf/flink-conf.yaml。如果你想修改一些參數,請查看我們的配置指南

 

flink on yarn模式將會覆蓋一些配置文件 jobmanager.rpc.address(因爲jobmanager總是分配在不同的機器),taskmanager.tmp.dirs(我們使用yarn提供的臨時目錄)和parallelism.default 如果solts的數量已經被指定。

如果你不想修改配置文件去改變參數,有一個選擇是通過動態的參數-D 來指定。所以你可以傳遞參數:-Dfs.overwrite-files=true -Dtaskmanager.network.memory.min=536346624

上面的例子將會啓動11個容器(即使僅請求10個容器),因爲有一個額外的容器來啓動ApplicationMaster 和 job manager

一旦flink在你的yarn集羣上部署,它將會顯示job manager的連接詳細信息。

停止yarn session通過停止unix進程(使用CTRL+C)或者在client中輸入stop。

Flink on yarn只會啓動請求的資源,如果集羣資源充足。大多數yarn調度器請求容器的內存,一些也會請求cpu。默認,cpu的核數等於slots的數量,通過-s參數指定。這個參數yarn.containers.vcores的值允許使用一個自定義值來進行覆蓋。

 

後臺 yarn session

如果你不希望flink yarn client一直運行,也可以啓動一個後臺運行的yarn session。使用這個參數:-d 或者 --detached

在這種情況下,flink yarn client將會只提交任務到集羣然後關閉自己。注意:在這種情況下,無法使用flink停止yarn session。

使用yarn 工具 來停止yarn session

yarn application -kill <applicationId>

附着到一個已存在的session

使用下面命令啓動一個session

./bin/yarn-session.sh

執行這個命令將會顯示下面內容:


 
  1. 用法:

  2. 必須

  3. -id,--applicationId <yarnAppId> YARN集羣上的任務id

正如前面提到的,YARN_CONF_DIR或者HADOOP_CONF_DIR環境變量必須是可以讀取到YARN和HDFS配置的。

例如:發出下面命令可以附着到一個運行中的flink yarn session

./bin/yarn-session.sh -id application_1463870264508_0029

附着到一個運行的session使用yarn resourcemanager來確定job Manager 的RPC端口。

停止yarn session通過停止unix進程(使用CTRL+C)或者在client中輸入stop

 

提交任務到flink

使用下面的命令提交一個flink程序到yarn集羣

./bin/flink

請參考客戶端命令行操作文檔

 

這個命令將會向你展示一個這樣一個幫助菜單

"run" 參數可以編譯和運行一個程序


 
  1. 用法: run [OPTIONS] <jar-file> <arguments>

  2. "run" 操作參數:

  3. -c,--class <classname> 如果沒有在jar包中指定入口類,則需要在這裏通過這個參數指定

  4.  
  5. -m,--jobmanager <host:port> 指定需要連接的jobmanager(主節點)地址

  6. 使用這個參數可以指定一個不同於配置文件中的jobmanager

  7.  
  8. -p,--parallelism <parallelism> 指定程序的並行度。可以覆蓋配置文件中的默認值。

使用run 命令向yarn集羣提交一個job。客戶端可以確定jobmanager的地址。當然,你也可以通過-m參數指定jobmanager。jobmanager的地址在yarn控制檯上可以看到。

例子:【注意:下面的命令官網文檔提供的有問題,執行失敗】


 
  1. wget -O LICENSE-2.0.txt http://www.apache.org/licenses/LICENSE-2.0.txt

  2. hadoop fs -copyFromLocal LICENSE-2.0.txt hdfs:/// ...

  3. 【注意:下面的命令官網文檔提供的有問題,執行失敗】

  4. ./bin/flink run ./examples/batch/WordCount.jar \

  5.         hdfs:///..../LICENSE-2.0.txt hdfs:///.../wordcount-result.txt

  6. 查看flink源碼發現,wordCount.jar可以不提供參數,或者提供參數,提供參數的時候需要使用input和output參數指定:

  7. 上面的命令需要修改爲如下格式才能正常執行[傳遞的兩個參數需要使用-input和 -output來指定]

  8. ./bin/flink run ./examples/batch/WordCount.jar -input hdfs://hostname:port/LICENSE-2.0.txt -output hdfs://hostname:port/wordcount-result.txt

  9.  
  10.  

如果有以下錯誤,確保所有taskmanager是否已經啓動:


 
  1. Exception in thread "main" org.apache.flink.compiler.CompilerException:

  2. Available instances could not be determined from job manager: Connection timed out.

你可以在jobmanager的web界面上檢查taskmanager的數量。這個web界面的地址會打印在yarn session的控制檯上。

如果沒有發現taskmanager,你應該通過日誌文件來檢查問題。

 

在yarn上運行一個獨立的flink job

這個文檔描述瞭如何在一個hadoop yarn環境中啓動flink集羣。也可以在yarn中啓動只執行單個任務的flink。

請注意:client期望設置-yn 參數(taskmanager的數量)

例子:

./bin/flink run -m yarn-cluster -yn 2 ./examples/batch/WordCount.jar

yarn session命令行的選項也可以使用./bin/flink 工具獲得。它們都有一個y或者yarn的前綴

注意:通過爲每個任務設置不同的環境變量 FLINK_CONF_DIR,可以爲每個任務使用不同的配置目錄。從 Flink 分發包中複製 conf 目錄,然後修改配置,例如,每個任務不同的日誌設置

 

用戶依賴jar包和classpath

默認情況下,當運行一個獨立的job的時候,這個flink job將包含用戶依賴的jar包。可以通過參數yarn.per-job-cluster.include-user-jar來控制。

當設置爲 DISABLED ,flink將會包含用戶classpath下面的jar包。

用戶jar包在類路徑中的位置可以通過下面參數來控制:


 
  1. * ORDER: (默認) 添加jar包到系統類路徑下面,按照字典順序.

  2. * FIRST: 將jar添加到類路徑的前面.

  3. * LAST: 將jar添加到類路徑的最後.

 

flink on yarn的故障恢復

flink 的 yarn 客戶端通過下面的配置參數來控制容器的故障恢復。這些參數可以通過conf/flink-conf.yaml 或者在啓動yarn session的時候通過-D參數來指定。

 

  • yarn.reallocate-failed:這個參數控制了flink是否應該重新分配失敗的taskmanager容器。默認是true。
  • yarn.maximum-failed-containers:applicationMaster可以接受的容器最大失敗次數,達到這個參數,就會認爲yarn session失敗。默認這個次數和初始化請求的taskmanager數量相等(-n 參數指定的)。
  • yarn.application-attempts:applicationMaster重試的次數。如果這個值被設置爲1(默認就是1),當application master失敗的時候,yarn session也會失敗。設置一個比較大的值的話,yarn會嘗試重啓applicationMaster。

 

調試一個失敗的yarn session

一個flink yarn session部署失敗可能會有很多原因。一個錯誤的hadoop配置(hdfs 權限,yarn配置),版本不兼容(使用cdh中的hadoop運行flink),或者其他的錯誤。

日誌文件

在某種情況下,flink yarn session 部署失敗是由於它自身的原因,用戶必須依賴於yarn的日誌來進行分析。最有用的就是yarn log aggregation 。啓動它,用戶必須在yarn-site.xml文件中設置yarn.log-aggregation-enable 屬性爲true。一旦啓用了,用戶可以通過下面的命令來查看一個失敗的yarn session的所有詳細日誌。

yarn logs -applicationId <application ID>

yarn client控制檯和web界面

flink yarn client也會打印一些錯誤信息在控制檯上,如果錯誤發生在運行時(例如如果一個taskmanager停止工作了一段時間)

除此之外,yarn resource manager的web界面(默認端口是8088)。resource manager的端口是通過yarn.resourcemanager.webapp.address參數來配置的。

它運行在yarn 程序運行的時候查看日誌和程序失敗的時候查看日誌用戶查找問題。

 

針對指定的hadoop版本構建yarn client

用戶可以使用hadoop發行版。例如,hortonworks,CDH或者MapR等版本去構建 flink。請參考構建指南獲取詳細信息

 

在yarn上運行flink使用防火牆

一些yarn 集羣使用防火牆來控制集羣的網絡和其他網絡的通信。在這種設置下,flink只能通過集羣的網絡來提交任務到yarn session。針對生產環境下使用是不可行的,flink允許配置所有相關服務的端口範圍,通過這些端口範圍的配置,用戶也可以透過防火牆來提交flink job。

目前,兩個服務都需要提交任務:

  • jobmanager(yarn中的applicationMaster)
  • jobmanager內部運行的blobserver

當向flink提交一個任務的時候,blobserver將會把用戶的代碼分發到所有工作節點(taskManagers)。jobmanager接收任務本身,並觸發執行。

以下兩個配置參數可以指定端口:

 

  • yarn.application-master.port
  • blob.server.port

這兩個配置選項接收單一的端口(例如:"50010"),區間("50000-50025"),或者同時指定多個("50010,50011,50020-50025,50050-50075")。

(hadoop也使用的是類似的機制,例如:yarn.app.mapreduce.am.job.client.port-range)

 

flink on yarn 內部實現

本節主要描述flink和yarn是如何交互的

YARN 客戶端需要訪問 Hadoop 配置,從而連接 YARN 資源管理器和 HDFS。可以使用下面的策略來決定 Hadoop 配置:

 

  • 測試 YARN_CONF_DIR, HADOOP_CONF_DIR 或 HADOOP_CONF_PATH 環境變量是否設置了(按該順序測試)。如果它們中有一個被設置了,那麼它們就會用來讀取配置。
  • 如果上面的策略失敗了(如果正確安裝了 YARN 的話,這不應該會發生),客戶端會使用 HADOOP_HOME 環境變量。如果該變量設置了,客戶端會嘗試訪問 $HADOOP_HOME/etc/hadoop (Hadoop 2) 和 $HADOOP_HOME/conf(Hadoop 1)。

當啓動一個新的 Flink YARN Client會話,客戶端首先會檢查所請求的資源(容器和內存)是否可用。之後,它會上傳包含了 Flink 配置和 jar文件到 HDFS(步驟 1)。

客戶端的下一步是請求(步驟 2)一個 YARN 容器啓動 ApplicationMaster (步驟 3)。因爲客戶端將配置和jar 文件作爲容器的資源註冊了,所以運行在特定機器上的 YARN 的 NodeManager 會負責準備容器(例如,下載文件)。一旦這些完成了,ApplicationMaster (AM) 就啓動了。

JobManager 和 AM 運行在同一個容器中。一旦它們成功地啓動了,AM 知道 JobManager 的地址(它自己)。它會爲 TaskManager 生成一個新的 Flink 配置文件(這樣它們才能連上 JobManager)。該文件也同樣會上傳到 HDFS。另外,AM 容器同時提供了 Flink 的 Web 界面服務。Flink 用來提供服務的端口是由用戶 + 應用程序 id 作爲偏移配置的。這使得用戶能夠並行執行多個 Flink YARN 會話。

之後,AM 開始爲 Flink 的 TaskManager 分配容器,這會從 HDFS 下載 jar 文件和修改過的配置文件。一旦這些步驟完成了,Flink 就安裝完成並準備接受任務了。

 

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