在 Windows 搭建 flink 运行环境并模拟流数据处理

news2024/11/17 3:05:28

一、引入

在大数据场景中,开发者追求高效与灵活,Linux 系统以其稳定性成为众多组件的首选,但在资源有限的情况下,在本机搭建一个 Linux 虚拟机集群却显得过于笨重,启动、运行占资源,需要配置网络,无法和windows共享资源,尤其是对只有 8GB 内存的 Windows 系统用户来说,内存压力显而易见。

尽管如此,也挡不住一个学习者的“热情”。
本文介绍怎么在 Windows 本地搭建 Flink 环境,注意这是一个伪分布式的测试环境。

二、下载安装

下载链接:Apache 分发网站、国内清华镜像网站。
Apache 分发网站支持下载各个版本的 Flink,不过下载速度慢,清华镜像网站速度快,但是只支持最近几个大版本下载,当前是支持 1.16 至 1.19 版本的下载。
image.png

下载安装包,比如我下载的是 1.13.1 版本的,只能到 Apache 分发网站下载安装包“flink-1.13.1-bin-scala_2.11.tgz”,下载完解压就行了。
image.png

我把解压好的文件放到 D 盘下,具体路径为:“D:\flink-1.13.1”,bin 目录是“D:\flink-1.13.1\bin”。

三、配置

为了方便访问,可以加下环境变量,不加也可以,每次切换路径到安装路径下执行文件也行。

3.1 如何添加环境变量?

右键此电脑,选择属性>弹窗中单击高级系统设置>弹窗中单击环境变量。
image.png

然后在用户变量新建一个“FLINK_HOME”变量,赋值你的安装路径。
image.png

最后在 path 中添加两个变量值:

%FLINK_HOME%\bin
%FLINK_HOME%
%FLINK_CONF_DIR%

image.png

3.2 新建 bat 文件

添加了环境变了之后,可以直接在命令行输入flink -v查看版本,不过有一个前提,必须先配置下“flink.bat”文件,在“bin”目录下只有“flink.sh”文件,该文件适用于 Linux 系统,在 Windows 系统执行会报错。【具体查看问题:找不到主类。】

早期版本有“bat”文件,但是后面的版本都没有了,不过直接通过网络搜素,可以获取到相关的文件(毕竟Windows用户还是多~)。
通过网友提供两份文件,如下:

  • start-cluster.bat:启动 flink 集群
  • flink.bat:执行 flink 文件
::###############################################################################
::  Licensed to the Apache Software Foundation (ASF) under one
::  or more contributor license agreements.  See the NOTICE file
::  distributed with this work for additional information
::  regarding copyright ownership.  The ASF licenses this file
::  to you under the Apache License, Version 2.0 (the
::  "License"); you may not use this file except in compliance
::  with the License.  You may obtain a copy of the License at
::
::      http://www.apache.org/licenses/LICENSE-2.0
::
::  Unless required by applicable law or agreed to in writing, software
::  distributed under the License is distributed on an "AS IS" BASIS,
::  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
::  See the License for the specific language governing permissions and
:: limitations under the License.
::###############################################################################
 
@echo off
setlocal EnableDelayedExpansion
 
SET bin=%~dp0
SET FLINK_HOME=%bin%..
SET FLINK_LIB_DIR=%FLINK_HOME%\lib
SET FLINK_PLUGINS_DIR=%FLINK_HOME%\plugins
SET FLINK_CONF_DIR=%FLINK_HOME%\conf
SET FLINK_LOG_DIR=%FLINK_HOME%\log
 
SET JVM_ARGS=-Xms1024m -Xmx1024m
 
SET FLINK_CLASSPATH=%FLINK_LIB_DIR%\*
 
SET logname_jm=flink-%username%-jobmanager.log
SET logname_tm=flink-%username%-taskmanager.log
SET log_jm=%FLINK_LOG_DIR%\%logname_jm%
SET log_tm=%FLINK_LOG_DIR%\%logname_tm%
SET outname_jm=flink-%username%-jobmanager.out
SET outname_tm=flink-%username%-taskmanager.out
SET out_jm=%FLINK_LOG_DIR%\%outname_jm%
SET out_tm=%FLINK_LOG_DIR%\%outname_tm%
 
SET log_setting_jm=-Dlog.file="%log_jm%" -Dlogback.configurationFile=file:"%FLINK_CONF_DIR%/logback.xml" -Dlog4j.configuration=file:"%FLINK_CONF_DIR%/log4j.properties"
SET log_setting_tm=-Dlog.file="%log_tm%" -Dlogback.configurationFile=file:"%FLINK_CONF_DIR%/logback.xml" -Dlog4j.configuration=file:"%FLINK_CONF_DIR%/log4j.properties"
 
:: Log rotation (quick and dirty)
CD "%FLINK_LOG_DIR%"
for /l %%x in (5, -1, 1) do ( 
SET /A y = %%x+1 
RENAME "%logname_jm%.%%x" "%logname_jm%.!y!" 2> nul
RENAME "%logname_tm%.%%x" "%logname_tm%.!y!" 2> nul
RENAME "%outname_jm%.%%x" "%outname_jm%.!y!"  2> nul
RENAME "%outname_tm%.%%x" "%outname_tm%.!y!"  2> nul
)
RENAME "%logname_jm%" "%logname_jm%.0"  2> nul
RENAME "%logname_tm%" "%logname_tm%.0"  2> nul
RENAME "%outname_jm%" "%outname_jm%.0"  2> nul
RENAME "%outname_tm%" "%outname_tm%.0"  2> nul
DEL "%logname_jm%.6"  2> nul
DEL "%logname_tm%.6"  2> nul
DEL "%outname_jm%.6"  2> nul
DEL "%outname_tm%.6"  2> nul
 
for %%X in (java.exe) do (set FOUND=%%~$PATH:X)
if not defined FOUND (
    echo java.exe was not found in PATH variable
    goto :eof
)
 
echo Starting a local cluster with one JobManager process and one TaskManager process.
 
echo You can terminate the processes via CTRL-C in the spawned shell windows.
 
echo Web interface by default on http://localhost:8081/.
 
start /b java %JVM_ARGS% %log_setting_jm% -cp "%FLINK_CLASSPATH%"; org.apache.flink.runtime.entrypoint.StandaloneSessionClusterEntrypoint --configDir "%FLINK_CONF_DIR%" > "%out_jm%" 2>&1
start /b java %JVM_ARGS% %log_setting_tm% -cp "%FLINK_CLASSPATH%"; org.apache.flink.runtime.taskexecutor.TaskManagerRunner --configDir "%FLINK_CONF_DIR%" > "%out_tm%" 2>&1
 
endlocal
 
::###############################################################################
::  Licensed to the Apache Software Foundation (ASF) under one
::  or more contributor license agreements.  See the NOTICE file
::  distributed with this work for additional information
::  regarding copyright ownership.  The ASF licenses this file
::  to you under the Apache License, Version 2.0 (the
::  "License"); you may not use this file except in compliance
::  with the License.  You may obtain a copy of the License at
::
::      http://www.apache.org/licenses/LICENSE-2.0
::
::  Unless required by applicable law or agreed to in writing, software
::  distributed under the License is distributed on an "AS IS" BASIS,
::  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
::  See the License for the specific language governing permissions and
:: limitations under the License.
::###############################################################################
 
@echo off
setlocal
 
SET bin=%~dp0
SET FLINK_HOME=%bin%..
SET FLINK_LIB_DIR=%FLINK_HOME%\lib
SET FLINK_PLUGINS_DIR=%FLINK_HOME%\plugins
 
SET JVM_ARGS=-Xmx512m
 
SET FLINK_JM_CLASSPATH=%FLINK_LIB_DIR%\*
 
java %JVM_ARGS% -cp "%FLINK_JM_CLASSPATH%"; org.apache.flink.client.cli.CliFrontend %*
 
endlocal
 

将这两份文件添加到 Flink 安装目录下的“bin”目录即可,我的配置参考如下:
image.png

“start-cluster.bat”关键语法解析,该文件可以自动获取路径信息,不需要设置环境变量也可执行。(当然,配置环境变量是使得可以在任意位置调用上面这两个文件,开启服务和跑 Flink 代码。)
set bin=%~dp0:将当前批处理文件所在目录的完整路径(不包含文件名)赋值给了 bin 环境变量。

  • set:这是用于设置或修改环境变量的命令。
  • bin=:这里是在定义一个名为 bin 的环境变量,并准备给它赋值。
  • %~dp0:这是批处理中的特殊语法,用于获取调用脚本的路径。具体来说:
    • %0 表示当前批处理文件的完整路径和文件名。
    • ~d 表示从 %0 中提取驱动器盘符(例如:d:)。
    • ~p 表示从 %0 中提取路径(例如:\flink-1.13.1\bin\)。
    • dp 结合起来使用时,就表示获取 %0 的驱动器盘符和路径,但不包括文件名。

四、测试

4.1 查看 Flink 版本

配置好之后,打开 CMD,输入flink -v,可以看到显示了 Flink 的版本信息,可以开始跑代码了。
image.png

PS:这里有一个报错,说找不到 Log4j 2 的配置文件。【具体查看问题:找不到 Log4j 2】

4.2 启动 Flink 服务

打开 CMD,输入以下命令,启动服务

start-cluster
# 或者
start-cluster.bat

然后输入jps可以查看 java 进程,出现“TaskManagerRunner”和“StandaloneSessionClusterEntrypoint”则是开启 Flink 服务成功,可以打开“http://localhost:8081/”查看 UI 界面。
注意点1:**可能“TaskManagerRunner”会无法开启,参考【问题:TaskManagerRunner 无法启动】。**如果输入start-cluster之后,马上输入jps可以看到“TaskManagerRunner”,但是过一会再输入jps就会发现没了,这就是启动不成功。
image.png

注意点2:如果打开的是 PowerShell 终端,可能会无法执行,可参考【问题:无法在 PowerShell 执行 bat 脚本】。

4.3 执行 Flink 代码

安装包中自带了一些测试 jar 包,以WordCount.jar为例来测试下。
直接执行以下命令即可,官方有默认给了一个

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1949660.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++内存管理(候捷)第五讲 笔记

GNU C对allocators的描述 new_allocator 和malloc_allocator,它们都没有特别的动作,无非底部调用operator new和malloc。它们没有用内存池 区别:::operator new是可重载的 智能型的allocator,使用内存池,分一大块然后…

lua 游戏架构 之 游戏 AI (四)ai_autofight_find_target

定义一个名为 ai_autofight_find_target 的类,继承自 ai_base 类。 lua 游戏架构 之 游戏 AI (一)ai_base-CSDN博客文章浏览阅读237次。定义了一套接口和属性,可以基于这个基础类派生出具有特定行为的AI组件。例如,可…

【Python系列】isin用法

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

简单使用nginx

打开下载的nginx文件夹下的。。具体地址 打开并编辑nginx.conf文件 server {listen 8089;//访问端口号server_name localhost;//访问地址#charset koi8-r;#access_log logs/host.access.log main;location / {root D:/development/dist/;//dist包地址index index.h…

无人机之降落操作及紧急情况处理

一、无人机降落操作 1、选择降落地点 a.提前选择一个平坦且没有障碍物的降落点; b.确认降落点周围没有行人或障碍物,保证降落的安全性。 2、降低飞行高度 a.缓慢降低飞行高度,尽量保持匀速下降,防止因下降过快导致无人机受损…

用户管理与高级SQL语句(数据库管理与高可用)

1.表(Table ) 数据库中的表与我们日常生活中使用的表格类似,它也是由行(Row) 和列(Column)组成的。列由同类的信息组成,每列又称为一个字段,每列的标题称为字段名。行包…

NeRF:从二维图像到三维重建【初识!原理通俗讲解】

NeRF:从二维图像到三维重建 反渲染(Inverse Rendering)可以理解为成像渲染的反过程,是指从一组二维图像重建三维场景的过程,这在计算机视觉和图形学中具有重要意义。NeRF(Neural Radiance Fields&#xff…

Profinet转ModbusTCP网关模块的配置与应用详解

Profinet转ModbusTCP网关模块(XD-ETHPN20)是一种常见的工业通信设备,广泛应用于现代工业自动化系统中。通过使用Profinet转Modbus TCP网关模块(XD-ETHPN20)将Profinet协议转换成Modbus TCP协议,实现了不同网…

【Web】LitCTF 2024 题解(全)

目录 浏览器也能套娃? 一个....池子? 高亮主题(划掉)背景查看器 百万美元的诱惑 SAS - Serializing Authentication exx 浏览器也能套娃? 随便试一试,一眼ssrf file:///flag直接读本地文件 一个....池子? {…

昇思25天学习打卡营第23天|LSTM+CRF序列标注

Mindspore框架CRF条件随机场概率图模型实现文本序列命名实体标注|(一)序列标注与条件随机场的关系 Mindspore框架CRF条件随机场概率图模型实现文本序列命名实体标注|(二)CRF模型构建 Mindspore框架CRF条件随机场概率图模型实现文本…

IEC104转MQTT网关快速实现了IEC104到MQTT的转换和数据交互

随着智能电网技术的不断进步,IEC 104(IEC 60870-5-104)协议作为电力系统中重要的远动通信标准,正逐步融入更广泛的物联网生态系统中。亚马逊AWS(Amazon Web Services),作为全球领先的云计算服务…

神经网络与注意力机制的权重学习对比:公式探索

神经网络与注意力机制的权重学习对比:公式探索 注意力机制与神经网络权重学习的核心差异 在探讨神经网络与注意力机制的权重学习时,一个核心差异在于它们如何处理输入数据的权重。神经网络通常通过反向传播算法学习权重,而注意力机制则通过学…

python通过omniORBpy调用CORBA

omniORB参考地址: omniORB omniORB - Browse Files at SourceForge.net omniORB - Browse /omniORBpy/omniORBpy-4.3.0 at SourceForge.net Windows 普通使用好像不需要安装omniorb。就对接北向接口业务需要使用python3.10的windows包,但目前好像没有…

vue接入google map自定义marker教程

需求背景 由于客户需求,原来系统接入的高德地图,他们不接受,需要换成google地图。然后就各种百度,各种Google,却不能实现。----无语,就连google地图官方的api也是一坨S-H-I。所以才出现这篇文章。 google地…

SpringBoot整合elasticsearch-java

一、依赖 系统使用的是ElasticSearch8.2.0 <dependency><groupId>co.elastic.clients</groupId><artifactId>elasticsearch-java</artifactId><version>8.1.0</version> </dependency> 二、配置 1、yml文件配置 elastics…

移动式气象站:便携科技的天气守望者

在科技日新月异的今天&#xff0c;我们身边的许多设备都在向着更加智能化、便携化的方向发展。而在气象观测领域&#xff0c;移动式气象站的出现&#xff0c;不仅改变了传统气象观测的固有模式&#xff0c;更以其灵活性和实时性&#xff0c;在气象监测、灾害预警等领域发挥着越…

苹果电脑暂存盘已满怎么清理 Mac系统如何清理磁盘空间 清理MacBook

Mac电脑用户在长时间使用电脑之后&#xff0c;时常会看到“暂存盘已满”的提示&#xff0c;这无疑会给后续的电脑使用带来烦恼&#xff0c;那么苹果电脑暂存盘已满怎么清理呢&#xff0c;下面将给大家带来一些干货帮你更好地解决这个问题。 首先我们要搞明白为什么暂存盘会满&…

IEC104转MQTT网关支持MQTT对接Ignition、阿里云、华为云、亚马逊AWS、ThingsBoard、Zabbix平台助力远程管理

钡铼推出了一款专为电力系统设计的数据采集网关——IEC104转MQTT网关BE113&#xff0c;感兴趣的朋友接着往下看&#xff1a; 一、网关概述 IEC104转MQTT(Ignition)网关BE113是一款专为电力系统设计的数据采集网关&#xff0c;支持DL/T645和IEC104等协议的设备。上行支持MQTT协…

The Sandbox:虚拟游戏世界生态系统详解

元宇宙由区块链、软件基础、移动应用、控制台等组成&#xff0c;是一个虚拟空间&#xff0c;结合了增强现实&#xff08;AR&#xff09;、虚拟现实&#xff08;VR&#xff09;和在线游戏等元素。它强调互操作性&#xff0c;允许用户在不同的虚拟平台之间自由切换。与传统的现实…

Tensorflow2.0全套学习(持续更新中)

0 简介 1.学习目标 两大核心模块&#xff1a;深度学习经典算法与Tensorflow项目实战 从零开始&#xff0c;详细的网络模型架构与框架实现方法 2.tensorflow&#xff1a;核心开源库&#xff0c;深度学习框架&#xff0c;帮助开发和训练机器学习模型 3.版本2比1有哪些优势 …