从0到1搭建flink程序-WordCount(图文/详细/mac)

目录

一、目标以及前置资料

1.1 目标

1.2 前置资料

二、实现

2.1 搭建流程

2.2 调试

 

参考


一、目标以及前置资料

1.1 目标

初步感受flink任务,从0到1快速搭建一个flink程序

1.2 前置资料

1、下载jdk:Mac 安装jdk_mac 安装jdk 1.8-CSDN博客

2、下载homebrew:打开terminal执行下面指令

/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"

如图:

3、下载maven:Mac 安装Maven的几种方法和操作步骤__ddz的技术博客_51CTO博客

4、下载flink:打开terminal执行下面安装指令

brew install apache-flink

查看安装位置,记下安装目录(后面用)

brew info apache-flink

二、实现

2.1 搭建流程

1、进入安装目录,输入下面指令,启动 flink 集群, 集群启动以后,进入 web 页面:http://localhost:8081/

cd 到你下载的目录
./libexec/bin/start-cluster.sh

2、在你的目录下(自己选在哪个目录)构建项目,再进入项目下

curl https://flink.apache.org/q/quickstart.sh | bash -s 1.18.0
cd quickstart

查看目录结构,输入tree, 如果电脑里没有tree,就brew install tree,下载一个

再次进入,修改目录/quickstart/src/main/java/org/myorg/quickstart下文件DataStreamJob.java

cd src/main/java/org/myorg/quickstart/

3、修改DataStreamJob.java,可以用idea,可以用vi,随便,文件内容复制粘贴如下

package org.myorg.quickstart;import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.util.Collector;
import org.apache.flink.api.common.RuntimeExecutionMode;public class DataStreamJob {public static void main(String[] args) throws Exception {StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();env.setRuntimeMode(RuntimeExecutionMode.STREAMING);env.socketTextStream("127.0.0.1", 9888).flatMap(new LineSplitter()).keyBy(0).sum(1).print();env.execute("WordCount");}public static final class LineSplitter implements FlatMapFunction<String, Tuple2<String, Integer>> {@Overridepublic void flatMap(String s, Collector<Tuple2<String, Integer>> collector) {String[] tokens = s.toLowerCase().split("\\W+");for (String token : tokens) {if (token.length() > 0) {collector.collect(new Tuple2<>(token, 1));}}}}
}

上述代码使用 DataStream API 构建了一个 Flink 应用,数据源(source)为本地的 socket  端口(端口可以自己改代码,我这里是9888),经过 flatMap、keyBy、sum 三个转换操作之后,最后打印到标准输出流。整体流程如下图:

4、运行

启动 socket 连接,监听 9888 端口:

nc -lk 9888

打包,点右侧m,再clean,再package

生成文件会在/quickstart/target下,打开terminal,在最一开始quickstart目录下执行,运行flink任务

flink run target/quickstart-0.1.jar 

回到http://localhost:8081

运行正常,在终端输入一些字符

flink任务会显示输出

2.2 调试

Q1:电脑当时用9000端口始终连不上,可能是被占用了/被禁用,如何明确端口是否可用

打开两个终端,一个指令telnet 127.0.0.1 10000,另外一个nc -lk 10000 (telnet指令没有还是可以brew install telnet)

发送一些信息,上图显示收发正常,表示连接没问题

参考

Mac系统下一键安装Homebrew方法(本人亲测有效)_homebrew 一键安装-CSDN博客

从零开始快速构建自己的Flink应用-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ctfshow——web(总结持续更新)

文章目录 1、基础知识部分2、php伪协议2.1 php://input协议2.2 data://text/plain协议 3、webshell连接工具3.1 蚁剑连接一句话木马 4、各个web中间件重要文件路径4.1 Nginx 5、sqlmap使用6、php特性6.1 md5加密漏洞 7、TOP 10漏洞7.1 SQL注入 1、基础知识部分 识别base64编码…

FineReport 倒计时特效

1、代码准备 将下面的代码生成对应文件 1.1、zzsc.js 这段代码是一个JavaScript计时器脚本&#xff0c;用于计算从当前时间到第二天午夜&#xff08;即0点&#xff09;之间的时间差&#xff0c;并将这个时间差显示在网页上的特定元素中。具体来说&#xff0c;它会实时更新页…

【Linux】编辑器vim 与 编译器gcc/g++

目录 一、编辑器vim&#xff1a; 1、对vim初步理解&#xff1a; 2、vim的模式&#xff1a; 3、进入与退出&#xff1a; 4、vim命令模式下的指令集&#xff1a; 移动光标&#xff1a; 删除&#xff1a; cv&#xff1a; 撤销&#xff1a; 其他&#xff1a; 5、vim底行模…

虚拟机 Ubuntu 扩容

文章目录 一、Vmware 重新分配 Ubuntu 空间二、Ubuntu 扩容分区 一、Vmware 重新分配 Ubuntu 空间 先打开 Vmware &#xff0c;选择要重新分配空间的虚拟机 点击 编辑虚拟机设置 &#xff0c;再点击 硬盘 &#xff0c;再点击 扩展 选择预计扩展的空间&#xff0c;然后点击 扩展…

【搜索引擎】俄罗斯搜索引擎yandex

俄罗斯搜索引擎yandex 1997年&#xff0c;俄罗斯搜索引擎Yandex&#xff08;俄语意为&#xff1a;语言目录&#xff09;首次上线&#xff0c;已发展成为全球第四大搜索引擎和第二大非英语搜索引擎 https://yandex.com/

【深度学习】CrossEntropyLoss需要手动softmax吗?

【深度学习】CrossEntropyLoss需要手动softmax吗&#xff1f; 问题&#xff1a;CrossEntropyLoss需要手动softmax吗&#xff1f;答案&#xff1a;不需要官方文档代码解释 问题&#xff1a;CrossEntropyLoss需要手动softmax吗&#xff1f; 之前用 pytorch 实现自己的网络时&…

Uniapp的H5以及App不支持后端传FormData类型参数的解决方案

在uniapp中不支持FormData的传参&#xff0c;这就很恶心&#xff1b;如果强行传的话会提示&#xff0c;请求失败的报错信息。 因为后端必须要FormData类型的传参&#xff0c;所以在查阅一系列方案后&#xff0c;有一种解决办法可以完美解决。 代码&#xff1a; init() {const…

img 标签的 object-fit 属性

设置图片固定尺寸后&#xff0c;可以通过 object-fit 属性调整图片展示的形式 object-fit: contain; 图片的长宽比不变&#xff0c;相应调整大小。 object-fit: cover; 当图片的长宽比与容器的长宽比不一致时&#xff0c;会被裁切。 object-fit: fill; 图片不再锁定长宽…

机器人领域中的scaling law:通过复现斯坦福机器人UMI——探讨数据规模化定律(含UMI的复现关键)

前言 在24年10.26/10.27两天&#xff0c;我司七月在线举办的七月大模型机器人线下营时&#xff0c;我们带着大家一步步复现UMI「关于什么是UMI&#xff0c;详见此文&#xff1a;UMI——斯坦福刷盘机器人&#xff1a;从手持夹持器到动作预测Diffusion Policy(含代码解读)」&…

scala---10.30

val、var package com_1030class Person {var name:String"rose"def sum(n1:Int,n2:Int):Int{n1n2} } object Person{def main(args: Array[String]): Unit {//创建person对象var personnew Person()println(person.sum(10,20))//30println(person.name)person.nam…

Oracle与SQL Server的语法区别

1&#xff09;日期和日期转换函数。 SQL: SELECT A.*, CASE WHEN NVL(PAA009,) OR PAA009 >Convert(Varchar(10), SYSDATE,120) THEN Y ELSE N END AS ActiveUser FROM POWPAA A WHERE PAA001admin or PAA002admin Oracle: SELECT A.*, CASE WHEN NVL(PAA009,) or PAA009&…

让Chrome⽀持⼩于12px 的⽂字⽅式有哪些?区别?

让Chrome⽀持⼩于12px 的⽂字⽅式有哪些&#xff1f;区别&#xff1f; 1、背景 Chrome 中⽂版浏览器会默认设定⻚⾯的最⼩字号是12px&#xff0c;英⽂版没有限制 原由 Chrome 团队认为汉字⼩于12px就会增加识别难度 • 中⽂版浏览器 与⽹⻚语⾔⽆关&#xff0c;取决于⽤户在C…

慢即是快,少即是多

慢即是快 “慢即是快”是一种强调质量而非速度的哲学或策略。以下是它的一些应用和解释&#xff1a; 1. 精准与质量&#xff1a; - 通过慢工出细活&#xff0c;确保任务或项目的每个步骤都高质量完成&#xff0c;避免因匆忙带来的错误和返工。最终&#xff0c;虽然过程看似…

Hadoop期末复习(完整版)

前言&#xff08;全部为语雀导出&#xff0c;个人所写&#xff0c;仅用于学习&#xff01;&#xff01;&#xff01;&#xff01;&#xff09; 复习之前我们要有目的性&#xff0c;明确考什么&#xff0c;不考什么。 对于hadoop来说&#xff0c;首先理论方面是跑不掉的&#x…

微信小程序中,点击视频,没有跳转播放,可能是因为没有在app.json中正确注册视频播放页面的路径

const customMethodMap {handlePreview(e) {const { item: { url } } e?.currentTarget?.datasetconsole.log(Clicked item URL:, url); // 输出URLconst type url.split(.)[url.split(.)?.length - 1]console.log(File type:, type); // 输出文件类型console.log(isDoc(…

Effective C++ 学习笔记二

Effective C 学习笔记二 文章目录 Effective C 学习笔记二别让异常逃离析构函数绝不在构造和析构的过程中调用virtual函数令operator 返回一个reference to *this在operator中处理"自我赋值"C四种转换 别让异常逃离析构函数 C 并不禁止析构函数吐出异常&#xff0c;…

python如何安装扩展包

1、扩展包 Python安装额外的扩展包&#xff0c;一般使用anconda进行管理。 1、1安装命令 一般我们在anconda中通过pip install 包名 的方式进行安装&#xff0c;不过由于这些包在国外下载&#xff0c;因此需要配置合适的镜像促使其下载更快。 1、2 镜像源配置 1、2、1 一次…

Manus在虚拟现实仿真模拟中的应用案例分享

Manus虚拟现实手套作为一种高精度的人机交互设备&#xff0c;在仿真模拟领域展现出了巨大的应用潜力。通过提供实时、准确的手指动作捕捉数据&#xff0c;Manus手套为多个行业带来了前所未有的仿真体验&#xff0c;推动了技术发展和应用创新。 技术特点 1. 高精度手指跟踪 Ma…

查缺补漏----关于指令执行的题型

建议写完2009年&#xff0c;以及2015年对应题再看&#xff1a; 对于指令的执行要注意下面两点&#xff0c;理解了之后&#xff0c;题目都是非常套路化的&#xff1a; &#xff08;1&#xff09;读/写主存的指令与其他指令的书写不太一样&#xff1a; 读主存: 地址--->MAR M…

【Android】Java开发语言规范

Java语言规范 命名风格 **类名&#xff1a;**使用 UpperCamelCase 风格&#xff0c;必须遵从驼峰形式&#xff0c;但以下情形例外&#xff1a;DO / BO / DTO / VO / AO&#xff0c;所有单词的首字母大写**方法名、参数名、成员变量、局部变量&#xff1a;**统一使用 lowerCam…