Flink on YARN快速入門指南
Apache Flink是一個高效、分散式、基於Java和Scala(主要是由Java實現)實現的通用大資料分析引擎,它具有分散式 MapReduce一類平臺的高效性、靈活性和擴充套件性以及並行資料庫查詢優化方案,它支援批量和基於流的資料分析,且提供了基於Java和Scala的API。
從Flink官方文件可以知道,目前Flink支援三大部署模式:Local、Cluster以及Cloud,如下圖所示:
本文將簡單地介紹如何部署Apache Flink On YARN(也就是如何在YARN上執行Flink作業),本文是基於Apache Flink 1.0.0以及Hadoop 2.2.0。
在YARN上啟動一個Flink主要有兩種方式:(1)、啟動一個YARN session(Start a long-running Flink cluster on YARN);(2)、直接在YARN上提交執行Flink作業(Run a Flink job on YARN)。下面將分別進行介紹。
Flink YARN Session
這種模式下會啟動yarn session,並且會啟動Flink的兩個必要服務:JobManager和TaskManagers,然後你可以向叢集提交作業。同一個Session中可以提交多個Flink作業。需要注意的是,這種模式下Hadoop的版本至少是2.2,而且必須安裝了HDFS(因為啟動YARN session的時候會向HDFS上提交相關的jar檔案和配置檔案)。我們可以通過./bin/yarn-session.sh
[[email protected]
flink]$ . /bin/yarn-session .sh
Usage:
Required
-n,--container
<arg> Number of YARN container to allocate (=Number of Task Managers)
Optional
-D
<arg> Dynamic properties -d,--detached
Start detached
-jm,--jobManagerMemory
<arg> Memory for
JobManager Container [ in
MB]
-nm,--name
<arg> Set a custom name for
the application on YARN
-q,--query
Display available YARN resources (memory, cores)
-qu,--queue
<arg> Specify YARN queue.
-s,--slots
<arg> Number of slots per TaskManager
-st,--streaming
Start Flink in
streaming mode
-tm,--taskManagerMemory
<arg> Memory per TaskManager Container [ in
MB]
|
各個引數的含義裡面已經介紹的很詳細了。在啟動的是可以指定TaskManager的個數以及記憶體(預設是1G),也可以指定JobManager的記憶體,但是JobManager的個數只能是一個。好了,我們開啟動一個YARN session吧:
. /bin/yarn-session .sh
-n 4 -tm 8192 -s 8
|
上面命令啟動了4個TaskManager,每個TaskManager記憶體為8G且佔用了8個核(是每個TaskManager,預設是1個核)。在啟動YARN session的時候會載入conf/flink-config.yaml
配置檔案,我們可以根據自己的需求去修改裡面的相關引數(關於裡面的引數含義請參見Flink官方文件介紹吧)。一切順利的話,我們可以在https://www.iteblog.com:9981/proxy/application_1453101066555_2766724/#/overview
上看到類似於下面的頁面:
啟動了YARN session之後我們如何執行作業呢?很簡單,我們可以使用./bin/flink
指令碼提交作業,同樣我們來看看這個指令碼支援哪些引數:
[iteblog @ www.iteblog.com
flink- 1.0 . 0 ]$
bin/flink
./flink
<ACTION> [OPTIONS] [ARGUMENTS]
The
following actions are available :
Action
"run"
compiles and runs a program.
Syntax :
run [OPTIONS] <jar-file> <arguments>
"run"
action options :
-c,-- class
<classname> Class with
the program entry point
( "main"
method or "getPlan()"
method.
Only
needed if
the JAR file does not
specify
the class
|