使用Flink集群环境进行数据处理

前言

上篇文章记录了搭建分布式Flink集群环境的过程 搭建Flink集群环境

这篇文章咱们聊一聊Flink客户端如何对接Flink集群环境的过程

示例:Flink读取Hadoop中的文件 然后通过集群环境进行数据处理的过程

Hadoop

Hadoop集群环境搭建

搭建大数据运行环境之一

搭建大数据运行环境之二

Hadoop集群端口说明

Hadoop集群搭建过程异常情况

不能格式化存储目录

详细异常信息

org.apache.hadoop.hdfs.qjournal.client.QuorumException: Could not format one or more JournalNodes. 1 exceptions thrown:
192.168.84.132:8485: Directory /usr/local/hadoop/jn/data/nameservices001 is in an inconsistent state: Can't format the storage directory because the current directory is not empty

journalnode的端口是8485

处理方式

每一个hadoop journalnode节点上将指定目录删除即可

rm -rf /usr/local/hadoop/jn/data/nameservices001

上传文件到hdfs

cd /usr/local/hadoop/sbin
# 创建文件夹
hdfs dfs -mkdir /hdfsdata
# 文件
sudo vi /home/aaa.txt
# 上传文件到指定文件夹
hdfs dfs -put /home/aaa.txt  /hdfsdata

上传文件异常

Hadoop DataNode 节点启不来

详细异常信息

File /hdfsdata/aaa.txt._COPYING_ could only be replicated to 0 nodes instead of minReplication (=1). 
There are 0 datanode(s) running and no node(s) are excluded in this operation

查看WebUI DataNode情况

http://192.168.84.128:50070/dfshealth.html#tab-datanode
解决方法一
停止集群
cd /usr/local/hadoop/sbin
./stop-all.sh
删除在hdfs中配置的data目录
  • 查看data目录
在core-site.xml中配置的hadoop.tmp.dir对应文件件

cat /usr/local/hadoop/etc/hadoop/core-site.xml 
  • 删除
rm -rf /usr/local/hadoop/tmp/*
重新格式化
./hadoop namenode -format
重新启动集群
./start-all.sh
解决方法二
如果上面的方法还是不能启动DataNode那么使用这个方法

当执行文件系统格式化时
会在namenode数据文件夹
(即配置文件中dfs.name.dir在本地系统的路径)
中保存一个current/VERSION文件
记录namespaceID
标志了所有格式化的namenode版本
如果我们频繁的格式化namenode
那么datanode中保存(即dfs.data.dir在本地系统的路径)的current/VERSION文件只是你地第一次格式化时保存的namenode的ID
因此就会造成namenode和datanode之间的ID不一致
  • 解决方法A:(推荐)
删除DataNode的所有资料及将集群中每个datanode节点的/dfs/data/current中的VERSION删除
然后重新执行hadoop namenode -format进行格式化
重启集群,错误消失
  • 解决方法B:
将name/current下的VERSION中的clusterID复制到data/current下的VERSION中,覆盖掉原来的clusterID
查看DataNode情况

DataNode已经起来了

查看上传文件

http://192.168.84.128:50070

该文件路径

hdfs://192.168.84.128:8020/hdfsdata/aaa.txt

Flink读取数据源并处理数据

DEMO源码

https://gitee.com/pingfanrenbiji/flink-examples-streaming

Flink读取hdfs文件并处理数据

创建flink执行环境
  • 第一个参数:远程flink集群 jobmanager ip地址
  • 第二个参数:8081是jobmanager webui端口
  • 第三个参数:是当前文件夹所在的jar包
数据源
读取hdfs文件数据
各种算子简介

以单词计数为例

先要将字符串数据解析成单词和次数 使用tuple2表示
第一个字段是单词 第二个字段是次数
次数初始值设置成1

flatmap

flatmap来做解析的工作
一行数据可能有多个单词

keyBy


将数据流按照单词字段即0号索引字段做分组
keyBy(int index) 得到一个以单词为key的tuple2数据流

timeWindow


在流上指定想要的窗口
并根据窗口中的数据计算结果
每5秒聚合一次单词数
每个窗口都是从零开始统计的

timeWindow 指定想要5秒的翻滚窗口(Tumble)

sum


第三个调用为每个key每个窗口指定了sum聚合函数
按照次数字段(即1号索引字段想家)
得到结果数据流
将每5秒输出一次 这5秒内每个单词出现的次数

将数据打印到控制台

所有算子操作(创建源、聚合、打印)只是构建了内部算子操作的图形

只有在execute被调用时才会在提交到集群或本地计算机上执行
执行报错 找不到代码异常

具体异常信息

Caused by: org.apache.flink.runtime.operators.util.CorruptConfigurationException: Could not read the user code wrapper: org.apache.flink.streaming.scala.examples.remotejob.RemoteJobTest$$anon$2

解决方法

  • 将当前目录文件夹打包成jar包

使用maven插件maven-jar-plugin

  • 第三个参数指向该jar包
在FLink Web UI查看该任务的执行过程

编译异常

无效的标记
--add-exports=java.base/sun.net.util=ALL-UNNAMED
不支持hdfs文件系统

具体异常信息

org.apache.flink.core.fs.UnsupportedFileSystemSchemeException: Could not find a file system implementation for scheme 'hdfs'. The scheme is not directly supported by Flink and no Hadoop file system to support this scheme could be loaded

处理方式

  • 下载 flink hadoop资源jar包
https://repo.maven.apache.org/maven2/org/apache/flink/flink-shaded-hadoop-2-uber/2.7.5-7.0/flink-shaded-hadoop-2-uber-2.7.5-7.0.jar
  • 放入flink 安装包 lib目录下

每个节点都需要放上该jar包 然后重启flink集群环境

当前操作节点hadoop namenode节点为standby状态

具体详细信息

org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.ipc.StandbyException): Operation category READ is not supported in state standby

解决方法

重新格式化2个namenode节点即可

具体详见

搭建大数据运行环境之二

遗留问题

flink数据源来自于socket数据

启动socket服务并输入数据

问题是

Flink并没有监听到该socket数据
暂时还没有找到原因 
了解的朋友们请联系我 
指导我一下哦

如果本地环境是可以监听到的

后记

为了解决这个问题
我请教了下 “Apache Flink China社区”钉钉群里面的谢波老师
他告诉我:

通过java或scala一般创建本地执行环境 即

'final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();'

很少有

'final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(ip,port,jarfiles);'

这样用的

若使用flink分布式环境 那么通过web ui界面 上传jar包的方式来完成
这也就解释了为什么我没有找到相关资料
只能靠自己'摸着石头过河'

结语

在了解一件新事物的时候 
按照自己的想法 一番努力和挣扎之后
也许方向是错误的 
但也会对它更进一步的了解了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
上百节课视频详细讲解,需要的小伙伴自行百度网盘下载,链接见附件,永久有效。 课程亮点: 1.知识体系完备,从小白到大神各阶段读者均能学有所获。 2.生动形象,化繁为简,讲解通俗易懂。 3.结合工作实践及分析应用,培养解决实际问题的能力。 4.每一块知识点, 都有配套案例, 学习不再迷茫。 课程内容: 1.Flink框架简介 2.Flink集群搭建运维 3.Flink Dataset开发 4.Flink 广播变量,分布式缓存,累加器 5.Flink Datastream开发 6.Flink Window操作 7.Flink watermark与侧道输出 8.Flink状态计算 9.Flink容错checkpoint与一致性语义 10.Flink进阶 异步IO,背压,内存管理 11.Flink Table API与SQL 课程目录介绍 第一章 Flink简介 01.Flink的引入 02.什么是Flink 03.Flink流处理特性 04.Flink基石 05.批处理与流处理 第二章 Flink架构体系 01.Flink中重要角色 02.无界数据流与有界数据流 03.Flink数据流编程模型 04.Libraries支持 第三章 Flink集群搭建 01.环境准备工作 02.local模式 03.Standalone集群模式 04.Standalone-HA集群模式 05.Flink On Yarn模式-介绍 06.Flink On Yarn模式-准备工作 07.Flink On Yarn模式-提交方式-Session会话模式 08.Flink On Yarn模式-提交方式-Job分离模式 09. Flink运行架构-Flink程序结构 10. Flink运行架构-Flink并行数据流 11. Flink运行架构-Task和Operator chain 12. Flink运行架构-任务调度与执行 13. Flink运行架构-任务槽与槽共享 第四章 Dataset开发 01.入门案例 02.入门案例-构建工程、log4j.properties 03.入门案例-代码运行yarn模式运行 04.DataSource-基于集合 05.DataSource-基于文件 06.Transformation开发 07.Datasink-基于集合 08.Datasink-基于文件 09.执行模式-本地执行 10.执行模式-集群执行 11.广播变量 12.累加器 13.分布式缓存 14.扩展并行度的设置 第五章 DataStream开发 01.入门案例-流处理流程 02.入门案例-示例、参考代码 03.流处理常见Datasource 04.Datasource基于集合 05.Datasource基于文件 06.Datasource基于网络套接字 07.Datasource-自定义source-SourceFunction 08.Datasource-自定义source-ParallelSourceFunction 09.Datasource-自定义source-RichParallelSourceFunction 10.Datasource-自定义source-MysqlSource 11.Datasource-自定义source-KafkaSource 12.DataStream-transformations 13.DataSink-输出数据到本地文件 14.DataSink-输出数据到本地集合 15.DataSink-输出数据到HDFS 16.DataSink-输出数据到mysql,kafka,Redis 第六章 Flink中Window 01.为什么需要window 02.什么是window 03.Flink支持的窗口划分方式 04.Time-window之tumbling-time-window 05.Time-window之sliding-time-window 06.Time-window之session-window 07.Count-window之tumbling-count-window 08.Count-window之sliding-count-window 09.window-Apply函数 第七章 Eventime-watermark 01.时间分类 02.watermark之数据延迟产生 03.watermark之解决数据延迟到达 04.watermark综合案例 05.watermark之数据丢失 06.watermark+侧道输出保证数据不丢失 等等共十一章节
上百节课视频详细讲解,需要的小伙伴自行百度网盘下载,链接见附件,永久有效。 共课程包含9个章节:Flink安装部署与快速入门、Flink批处理API、Flink流处理API、Flink高级API、Flink-Table与SQL、Flink-Action综合练习、Flink-高级特性和新特性、Flink多语言开发、Flink性能调优 课程目录: Flink-day01 00-[了解]-课程介绍 01-[了解]-Flink概述 02-[掌握]-Flink安装部署-local本地模式 03-[掌握]-Flink安装部署-Standalone独立集群模式 04-[掌握]-Flink安装部署-Standalone-HA高可用集群模式 05-[重点]-Flink安装部署-On-Yarn-两种提交模式 06-[重点]-Flink安装部署-On-Yarn-两种提交模式-演示 07-[了解]-Flink入门案例-前置说明 08-[掌握]-Flink入门案例-环境准备 09-[掌握]-Flink入门案例-代码实现-1-DataSet 10-[掌握]-Flink入门案例-代码实现-2-DataStream流批一体-匿名内部类版 11-[掌握]-Flink入门案例-代码实现-2-DataStream流批一体-Lambda版 12-[掌握]-Flink入门案例-代码实现-2-DataStream流批一体-On-Yarn 13-[掌握]-Flink原理初探-角色分工-执行流程-DataFlow 14-[掌握]-Flink原理初探-TaskSlot和TaskSlotSharing 15-[掌握]-Flink原理初探-执行流程图生成 Flink-day02 01-[理解]-流处理核心概念说明 02-[掌握]-Source-基于集合 03-[掌握]-Source-基于文件 04-[掌握]-Source-基于Socket 05-[掌握]-Source-自定义Source-随机生成订单数据 06-[掌握]-Source-自定义Source-实时加载MySQL数据 07-[掌握]-Source-Transformation-基本操作 08-[掌握]-Source-Transformation-合并和连接 09-[掌握]-Source-Transformation-拆分和选择 10-[掌握]-Source-Transformation-重平衡分区 11-[掌握]-Source-Transformation-其他分区 12-[掌握]-Source-Sink-基于控制台和文件 13-[掌握]-Source-Sink-自定义Sink 14-[了解]-Connectors-JDBC 15-[重点]-Connectors-Flink整合Kafka-Source 16-[重点]-Connectors-Flink整合Kafka-Sink-实时ETL 17-[了解]-Connectors-Redis Flink-day03 01-[了解]-Flink高级API-四大基石介绍 02-[了解]-Flink高级API-Window-分类和API介绍 03-[掌握]-Flink高级API-Window-基于时间的滑动和滚动窗口 04-[了解]-Flink高级API-Window-基于数量的滑动和滚动窗口 05-[了解]-Flink高级API-Window-会话窗口 06-[理解]-Flink高级API-Time-时间分类和事件时间的重要性及Watermaker的引入 07-[理解]-Flink高级API-Time-Watermaker概念详解 08-[理解]-Flink高级API-Time-Watermaker图解 09-[掌握]-Flink高级API-Time-Watermaker-代码演示 10-[了解]-Flink高级API-Time-Watermaker-代码演示-理论验证 11-[掌握]-Flink高级API-Time-Watermaker-outputTag-allowedlateness解决数据丢失 12-[了解]-Flink高级API-State-Flink中状态的自动管理 13-[了解]-Flink高级API-State-有状态计算和无状态计算 14-[了解]-Flink高级API-State-状态分类 15-[了解]-Flink高级API-State-keyState代码演示 16-[了解]-Flink高级API-State-OperatorState代码演示 Flink-day04-07等等
Linux Flink集群是指基于Linux操作系统并使用Flink框架来构建的集群计算环境Flink是一种流式处理引擎,用于处理大规模的数据流。Linux作为操作系统,具有良好的稳定性和可靠性,能够提供高效的系统资源管理和任务调度能力。 在一个Linux Flink集群中,通常包含一个主节点和多个工作节点。主节点负责协调整个集群的工作,包括任务的调度、资源的分配和监控等。工作节点是真正执行计算任务的节点,它们从主节点接收任务,并按照任务的要求进行计算和处理。 Linux Flink集群的搭建需要注意以下几点。首先,需要保证所有节点上已经安装并配置好了Linux操作系统。其次,需要在集群中选择一台作为主节点,并在该节点上安装Flink框架,并通过配置文件指定其他工作节点的地址和角色。然后,需要在所有工作节点上安装并配置好Flink框架。最后,需要确保主节点和工作节点之间可以相互通信,以便进行任务的分发和结果的传递。 在Linux Flink集群中,可以通过Flink的API或者命令行工具提交和管理任务。Flink提供了丰富的功能和算子,可以支持各种数据处理需求,包括流式处理、批处理和机器学习等。此外,Flink还提供了容错机制和故障恢复能力,保证了系统的可靠性和稳定性。 总结来说,Linux Flink集群提供了一个高效、稳定和可靠的计算环境,可以用于处理大规模的数据流。它充分发挥了Linux操作系统的优势,同时利用了Flink框架的各种功能和算子,为用户提供了一个强大而灵活的数据处理平台。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值