flink On Yarn模式

本文介绍如何在Hadoop YARN环境中部署Apache Flink,包括环境准备、Hadoop配置、Flink安装及配置等步骤,并验证部署后的Flink集群运行状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

flink On Yarn模式

一、准备工作

  1. 机器

    10.0.3.149(master)
    10.0.3.147(slave1)
    基本环境准备:
    JDK1.8 以上的版本,同时需要配置环境变量 JAVA_HOME。
    ssh 服务安装并启动  
    
  2. 安装包和依赖包

    1. flink的安装包:flink-1.11.2-bin-scala_2.11.tgz

      https://www.apache.org/dyn/closer.lua/flink/flink-1.11.2/flink-1.11.2-bin-scala_2.11.tgz

    2. 所需要的依赖包:

      https://mvnrepository.com/
      https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.10.0/hadoop-2.10.0.tar.gz

      elasticsearch-6.4.3.jar
      elasticsearch-7.5.1.jar
      elasticsearch-core-7.5.1.jar
      elasticsearch-rest-client-6.4.3.jar
      elasticsearch-rest-high-level-client-6.4.3.jar
      elasticsearch-x-content-7.5.1.jar
      flink-azure-fs-hadoop-1.11.2.jar
      flink-cep_2.11-1.11.2.jar
      flink-cep-scala_2.11-1.11.2.jar
      flink-connector-elasticsearch6_2.11-1.11.2.jar
      flink-connector-elasticsearch7_2.11-1.11.2.jar
      flink-connector-elasticsearch-base_2.11-1.11.2.jar
      flink-connector-filesystem_2.11-1.11.2.jar
      flink-connector-kafka-0.10_2.11-1.11.2.jar
      flink-connector-kafka-0.11_2.11-1.11.2.jar
      flink-connector-kafka-base_2.11-1.11.2.jar
      flink-csv-1.11.2.jar
      flink-dist_2.11-1.11.2.jar
      flink-gelly_2.11-1.11.2.jar
      flink-gelly-scala_2.11-1.11.2.jar
      flink-json-1.11.2.jar
      flink-ml_2.11-1.11.2.jar
      flink-oss-fs-hadoop-1.11.2.jar
      flink-python_2.11-1.11.2.jar
      flink-queryable-state-runtime_2.11-1.11.2.jar
      flink-shaded-hadoop-2-uber-2.6.5-10.0.jar
      flink-shaded-netty-tcnative-dynamic-2.0.25.Final-11.0.jar
      flink-shaded-zookeeper-3.5.6.jar
      flink-sql-client_2.11-1.11.2.jar
      flink-state-processor-api_2.11-1.11.2.jar
      flink-swift-fs-hadoop-1.11.2.jar
      flink-table_2.11-1.11.2.jar
      flink-table-blink_2.11-1.11.2.jar
      hppc-0.8.1.jar
      httpasyncclient-4.1.4.jar
      httpcore-nio-4.4.12.jar
      kafka-clients-0.11.0.2.jar
      lang-mustache-client-7.5.1.jar
      log4j-1.2-api-2.12.1.jar
      log4j-api-2.12.1.jar
      log4j-core-2.12.1.jar
      log4j-slf4j-impl-2.12.1.jar
      lucene-core-7.4.0.jar
      protobuf-java-3.11.4.jar
      rank-eval-client-7.5.1.jar
      

二、Hadoop环境部署

1、安装ssh服务
  1. 检查是否已经安装好ssh服务,进入shell命令,输入如下命令,

    ps -ef | grep ssh

    如果只有一个结果,则没有安装

  2. 若没有,则使用如下命令进行安装:

    sudo apt-get install ssh openssh-server
    
2、配置各节点免密登录
  1. 每个节点上生成ssh密钥 : ssh-keygen -t rsa (root用户默认目录/root/.ssh)

    cd /root/.ssh
    ssh-keygen -t rsa
    出现提示后直接回车即可,会出现三次提示,都直接回车即可。
    查看.ssh 目录下会生成id_rsa、id_rsa.pub两个文件
    将生成的id_rsa.pub同步到本节点authorized_keys中,并同步到其他节点的authorized_keys中
    
  2. 验证免密登录

    ssh -P端口 root@ip

    连接时不会提示输入密码

3、配置hosts

在每个节点的/etc/hosts文件中配置hosts

10.0.3.149 master
10.0.3.147 slave1
4、 配置Hadoop文件

注:以下配置需要在Hadoop每个节点上执行

1. 上传hadoop安装包至服务器/data/app目下

2. 解压并重命名为hadoop-2.10.0
3. 修改配置

​ 此处需修改多个配置文件,均在hadoop-2.10.0/etc/hadoop 目录下

core-site.xml 文件

<configuration>
   <property>
     <name>fs.default.name</name>  
     <value>hdfs://master:9000</value>
  </property> 
  <property>   
      <name>hadoop.tmp.dir</name>   
      <value>/data/app/hadoop-2.10.0/tmp/</value>
  </property>
</configuration>

hdfs-site.xml

<configuration>
<property>
     <name>dfs.replication</name>
     <value>2</value>
  </property>
  <property>
     <name>dfs.namenode.name.dir</name>
     <value>file:/data/app/hadoop-2.10.0/tmp/namenode</value>
  </property>
  <property>
     <name>dfs.datanode.data.dir</name>
     <value>file:/data/app/hadoop-2.10.0/tmp/datanode</value>
  </property>
</configuration>

mapred-site.xml.template 文件

<configuration>
     <property>   
      <name>mapreduce.framework.name</name>   
      <value>yarn</value> 
   </property> 
   <property>   
      <name>mapreduce.jobhistory.address</name>   
      <value>Master:10020</value> 
   </property> 
   <property>   
      <name>mapreduce.jobhistory.webapp.address</name>   
      <value>Master:19888</value> 
   </property>
</configuration>

yarn-site.xml 文件

<configuration>

<!-- Site specific YARN configuration properties -->
  <property>
  <name>yarn.resourcemanager.scheduler.class</name>
  <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
 </property>
 <property>
  <name>yarn.nodemanager.aux-services</name>
  <value>mapreduce_shuffle</value>
</property>
<property>
  <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
  <value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
 <!--配置Hadoop的主节点ip--> 
<property>
      <description>The hostname of the RM.</description>
      <name>yarn.resourcemanager.hostname</name>
      <value>10.0.3.149</value>
</property>
 
<property>
  <name>yarn.resourcemanager.address</name>
  <value>master:8032</value>
</property>
<property>
  <name>yarn.resourcemanager.scheduler.address</name>
  <value>master:8030</value>
</property>
<property>
  <name>yarn.resourcemanager.resource-tracker.address</name>
  <value>master:8031</value>
</property>
<property>
  <name>yarn.resourcemanager.admin.address</name>
  <value>master:8033</value>
</property>
<property>
  <name>yarn.resourcemanager.webapp.address</name>
  <value>0.0.0.0:8088</value>
</property>

<property>
    <name>yarn.nodemanager.vmem-check-enabled</name>
    <value>false</value> 
    <description>是否在任务启动前检查实际资源是否足够</description>
</property>
 <!---测试环境8C16G,资源配置为测试样例,具体情况以实际生产环境为主。--->  
 <!--设置规则参照-->
 <!--
     1. taskmanager数量 = 总slot数 / 每个taskmanager允许的slot数
		 2. jobManager数量 * jobmanger内存设置 + taskmanager数量*taskmanager内存设置 < 任务允许的最大内存
	   3. 总slot数 < 任务允许的最大核数
-->
<property>
        <name>yarn.nodemanager.resource.cpu-vcores</name>
        <value>16</value>
</property>
<property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>10240</value>
</property>

<property>
      	<name>yarn.scheduler.maximum-allocation-vcores</name>
      	<value>4</value>
      	<description>提交一个任务允许申请的最大cpu核数</description>
</property>
  
<property>
    	<name>yarn.scheduler.maximum-allocation-mb</name>
    	<value>2048</value>
    	<description>提交一个任务允许申请的最大内存</description>
</property>

<property>
    <name>yarn.nodemanager.vmem-pmem-ratio</name>
    <value>5</value>
    <description>虚拟内存使用率</description>
</property>
  
</configuration>
3、 添加环境变量 /etc/profile
在文档末尾增加:
export HADOOP_HOME=/data/install/hadoop-2.10.0
export PATH=$JAVA_HOME/bin:$PATH
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop

执行source /etc/profile 让其生效
4、在hadoop主节点启动Hadoop服务
  1. 初始化namenode

    cd /data/app/hadoop-2.10.0
    /bin/hadoop namenode -format
    
  2. 启动Hadoop

    cd /data/app/hadoop-2.10.0/sbin/
    bash start-dfs.sh
    
  3. 启动yarn

    cd /data/app/hadoop-2.10.0/sbin/
    bash start-yarn.sh
    
  4. 注意

    start-all.sh 脚本可以启动Hadoop和yarn两个
    
5、验证Hadoop运行
  1. 验证yarn资源管理是否正常

    http://10.0.3.149:8088/cluster

  2. 验证hdfs各节点是否正常

    http://10.0.3.149:50070/dfshealth.html#tab-overview

url中的ip为Hadoop集群主节点的ip,根据实际环境修改

三、flink安装部署

1、将安装包和依赖包上传至Hadoop集群中任一节点上

​ 1. 解压flink-1.11.2-bin-scala_2.11.tgz安装包,重命名成flink11 ,

​ 2. 将依赖包放置到flink的lib目录下

2、修改flink的conf/flink-conf.yaml配置文件
##集群管理节点的工作端口 
jobmanager.rpc.port: 6123 
##管理节点进程允许使用的最大内存,单位兆 
jobmanager.memory.process.size: 1024m 
##工作节点的进程允许使用的最大内存,单位兆 
taskmanager.memory.process.size: 1024m 
##工作节点提供的最大 slot 数。这个数的配置需要根据业务场景确定。 
##taskmanager数量 = 总slot数 / 每个taskmanager允许的slot数
taskmanager.numberOfTaskSlots: 3 
##集群级别的并行度。优先级最低。如果指定了 session 级别的并行度,此值会被覆盖 
parallelism.default: 1 
##这个是 flink 提供的 web 管理端口 
rest.port: 8081 
##需要通过此配置告诉 flink机器的通讯端口。根据实际环境需改 
env.ssh.opts: -p 36000 
##默认的容错策略 
jobmanager.execution.failover-strategy: region 
##允许通过 web 端口提交任务。
web.submit.enable: true 
3、验证flink
  1. 执行 flink/bin目录下yarn-session.sh
    bash yarn-session.sh
  2. 查看Hadoop页面上是否有此任务

​ http://10.0.3.149:8088/cluster

​ 在任务的 Tracking UI ,点击ApplicationMaster 可跳转至flink web 页

  注:跳转之后的路径如果是hostname的话,可以将hostsname改成对应的ip。
4、启停单节点
./yarn-daemon.sh start  resourcemanager nodemamager

./yarn-daemon.sh stop  resourcemanager nodemamager
<think>嗯,用户想了解如何在YARN上部署Flink,也就是Flink on YARN的部署教程。我需要根据提供的引用内容,整理出一个清晰的步骤指南。首先,我应该先确认用户的需求是什么。他们可能是一个刚开始接触Flink的大数据工程师,或者是想要将现有的Flink任务迁移到YARN上运行。用户可能对YARNFlink的基本概念有一定了解,但需要具体的部署步骤和配置说明。 接下来,我需要查看用户提供的引用内容。引用[1]提到准备工作,比如Hadoop集群、环境变量和依赖包。引用[2]和[3]讨论了Session-Cluster模式,包括如何启动yarn-session和提交任务。引用[4]提到了Application模式,使用run-application命令。引用[5]则涉及Hadoop依赖包的处理,需要用户自己下载并放置到lib目录下。 用户的问题是如何在YARN上部署Flink,所以需要覆盖两种主要的部署模式:Session-Cluster和Application Mode。同时,必须确保每个步骤都正确,特别是关于依赖项和配置的部分。可能需要注意的常见问题包括依赖包缺失、Hadoop配置不正确,或者资源分配的问题。 首先,我应该列出部署前的准备工作,如安装Hadoop、配置环境变量、处理Hadoop依赖。然后分别讲解两种部署模式的具体步骤,包括启动集群和提交任务。可能还需要给出示例命令,这样用户可以直接复制使用。此外,需要注意不同模式下资源管理的区别,比如Session-Cluster是常驻的,而Application Mode是任务级别的。 在引用内容中,引用[5]提到需要用户自行下载Hadoop依赖包,并放到Flink的lib目录下。这一点很重要,否则可能会遇到类找不到的错误。需要详细说明这一步,包括下载地址的位置,可能用户需要访问提供的链接或文档来获取正确的依赖包。 另外,提交任务的命令有所不同,Session-Cluster使用flink run,而Application Mode使用flink run-application,并且需要指定Dyarn.provided.lib.dirs参数,引用HDFS上的Flink分发目录。这部分需要明确说明,避免用户混淆。 可能用户还会遇到资源不足的问题,所以在步骤中可以提醒调整资源参数,比如内存和slot数量。同时,需要检查YARN集群的状态,确保Hadoop服务正常运行,否则部署会失败。 最后,生成相关问题的时候,可以考虑用户可能进一步想知道如何优化部署、处理依赖冲突,或者监控Flink任务在YARN上的运行情况。这些问题有助于用户深入学习和解决问题。 现在需要将以上思路整理成一个结构化的回答,分步骤说明,确保每个部分都引用正确的来源,并在末尾添加相关问题。同时,要保持语言简洁,使用中文,符合用户的要求。</think>### Flink on YARN 部署教程 #### 一、部署前准备 1. **Hadoop集群环境** 确保已部署Hadoop集群(版本需与Flink兼容),并启动YARN服务。可通过`jps`命令检查`ResourceManager`和`NodeManager`是否正常运行[^2]。 2. **Flink环境配置** - 下载与Hadoop兼容的Flink版本,并解压到指定目录。 - 配置环境变量: ```bash export HADOOP_CLASSPATH=`hadoop classpath` # 确保Hadoop依赖正确加载[^5] ``` 3. **Hadoop依赖包处理** - 从Flink官网提供的地址下载与Hadoop版本对应的依赖包(如`flink-shaded-hadoop-3-uber.jar`)[^5]。 - 将依赖包复制到Flink的`lib`目录下,否则无法访问HDFS或YARN资源。 --- #### 二、两种部署模式详解 ##### 1. **Session-Cluster模式(常驻集群)** - **特点**:预先分配固定资源,任务共享集群,适合短时高频任务。 - **启动集群**: ```bash ./bin/yarn-session.sh -n 2 -s 2 -jm 1024 -tm 2048 -nm myFlinkSession ``` - `-n`:TaskManager数量 - `-s`:每个TaskManager的Slots数量 - `-nm`:YARN Application名称 - **提交任务**: ```bash flink run examples/streaming/TopSpeedWindowing.jar # 使用已启动的Session集群[^3] ``` ##### 2. **Application Mode(按需集群)** - **特点**:每个任务独立集群,资源按需分配,避免资源竞争[^4]。 - **提交任务**: ```bash ./bin/flink run-application -t yarn-application \ -Dyarn.provided.lib.dirs="hdfs:///flink/libs" \ hdfs:///jars/my-flink-job.jar ``` - `-Dyarn.provided.lib.dirs`:指定HDFS上的Flink依赖目录(需提前上传)[^4]。 --- #### 三、关键注意事项 1. **依赖包冲突** 若出现Hadoop类冲突,检查`lib`目录中是否仅保留**一个**Hadoop依赖包[^5]。 2. **资源参数调整** - 根据集群资源调整`-jm`(JobManager内存)、`-tm`(TaskManager内存)参数。 - 资源不足会导致YARN任务提交失败。 3. **日志查看** 任务日志可通过YARN Web UI(`http://<ResourceManager>:8088`)或`yarn logs -applicationId <appId>`查看。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值