用海豚调度器定时调度从Kafka到HDFS的kettle任务脚本

在实际项目中,从Kafka到HDFS的数据是每天自动生成一个文件,按日期区分。而且Kafka在不断生产数据,因此看看kettle是不是需要时刻运行?能不能按照每日自动生成数据文件?

为了测试实际项目中的海豚定时调度从Kafka到HDFS的Kettle任务情况,特地提前跑一下海豚定时调度这个任务,看看到底什么情况,也给大家提供一个参考!

海豚调度任务配置

(一)SHELL脚本配置

#!/bin/bash
source /etc/profile

/opt/install/kettle9.2/data-integration/pan.sh -rep=hurys_linux_kettle_repository -user=admin -pass=admin -dir=/kafka_to_hdfs/ -trans=04_Kafka_to_HDFS_turnratio level=Basic >>/home/log/kettle/04_Kafka_to_HDFS_turnratio_`date +%Y%m%d`.log 

file

(二)定时任务设置

定时任务设置为每天的零点,零点一到开始执行任务

file

(三)最后工作流情况

file

启动工作流

file

工作流启动,成功!工作流一直在跑

file

相应的任务实例也在跑!

启动工作流每天HDFS情况

(一)第一天为2023/8/30日

由于第一天开始执行任务,因此自动生成2023/08/30的HDFS文件

(二)第二天为2023/8/31日

2023/08/31早上更新

(1)04_Kafka_to_HDFS_turnratio任务

file

第二天的海豚任务自动调度,自动生成2023/08/31的HDFS文件

但问题是,除了再跑31日的任务外,30日的任务还在跑,可能是定时配置有问题,需要优化

而且这样搞容易把kettle搞出问题!

file

2023/08/31晚上更新

(1)04_Kafka_to_HDFS_turnratio任务

不设置定时任务,kettle任务一直运行,已经生成8月31日的文件,观察明天会不会自动生成9月1日的数据文件

file

已生成的8月31日文件

file

(2)01_Kafka_to_HDFS_queue任务

不设置定时任务,kettle任务一直运行,已经生成8月31日的文件,观察明天会不会自动生成9月1日的数据文件

file

已生成的8月31日文件

file

如果明早不能自动生成9月1日的文件,那就要设置海豚定时为每天的执行时间为0时0分0秒到23时59分59秒  或者在脚本里设置时间  或者在kettle里设置时间?我们试试看!

(三)第三天为2023/9/1日

2023/09/01早上更新

昨晚海豚调度的两个kettle任务以失败告终,没有自动生成9月1日的数据文件

file

今日再尝试其他的方式

2023/09/01下午更新

下午尝试用Crontab定时任务调度Kettle脚本

\[root@hurys22 kettle\_job\_sh\]# crontab -l  
SHELL=/bin/bash\#  */1 * * * * /bin/sh  /opt/install/kettle9.2/kettle\_job\_sh/test2.sh06-07 17 * * * /bin/sh  /opt/install/kettle9.2/kettle\_job\_sh/01\_Kafka\_to\_HDFS\_queue.sh  

设置每天的17点的6分到7分中执行

file

但是日志文件显示kettle任务却一直再跑

file

当然,HDFS中确实生成了9月1日今日的文件,而且任务运行时间是我设置的17点7分

file

这个方法不行,后面再试试其他方法?怎么就不会设置任务停止呢

(四)第四天为2023/9/4日

2023/09/04早上更新

由于Kafka里有时间戳字段,因此在kettle任务里获取当前系统时间戳的日期字段、然后文件名直接从这个日期字段获取

(1)当前系统时间戳的日期字段

file

(2)HDFS输出中文件名直接获取这个日期字段,这样kettle任务运行时,是不是能自动生成每天的数据文件?

file

(3)测试结果,任务可以跑通,但是HDFS生成的文件不知却在哪?

file

终于查到了,原来这样导出的文件不在HDFS,而在kettle的安装文件里,即在本地

file

而且这么直接以日期命名也有问题,因为有多个Kafka,不可能仅仅以日期命名区分

2023/09/04晚上更新 

因为上午的思路有问题,导出的文件没有在HDFS中,反而在本地,于是下午又换了种思路。

file

还是从系统获得时间day,但是文件路径直接写成HDFS的文件路径+day,这样的url字段才是HDFS输出控件中的文件名字段

file

(1)用海豚调度对比,定时调度01_Kafka_to_HDFS_queue任务

file

目前已生成生成9月4日的文件

(2)用海豚调度对比,不加定时调度04_Kafka_to_HDFS_turnratio任务

file

目前已生成生成9月4日的文件

file

(五)第五天为2023/9/5日

2023/09/05早上更新

虽然自动生成了9月5日的文件,但是由于数据量过大、加上把hadoop.tmp.dir放在了/opt/soft/hadoop313/hadooptmp,导致opt文件夹磁盘溢出,使得namenode处于安全模式。

花了一上午时间终于解决NameNode的安全模式问题,发现应该把HADOOP 运行时存储路径放在home目录下,因为home的磁盘空间最大

file

2023/09/05晚上更新

惊喜!!!

可能已经找到了解决方法,直接对Kafka里的时间戳字段进行截取,然后拼接文件路径,从而形成一个可以根据时间戳字段的日期变动的HDFS文件,即每天自动生成一个数据文件

(1)通过Java自定义文件名  字段url(HDFS路径+截取的可变的时间戳字段)

var url="hdfs://root:***@hurys22:8020/rtp/queue\_dynamic/queue\_dynamic"+substr(create_time,0,10)

file

(2)在HDFS输出控件的文件就选择url字段

file

(3)结果

已经生成了9月5日的数据文件,不需要海豚定时调度,只需要海豚一直跑kettle任务即可!

虽然还是生成了9月5日的数据文件,不过我今天下午按照生成每小时维度的数据文件测试过

file

下午16时运行任务,生成了16时的数据文件,然后到17时,又生成了17时的数据文件,这两个数据文件都在跑,而且HDFS里大小显示都为0。

不过区别是,16时的数据是完整的,17时的数据文件是不断增加的。因为Kafka是实时的,17时只会发送17时的数据,不会发送16时数据。下面是16时的文件数据

file

16时的数据文件是有固定的数据,17点后就没有再写入数据。之所以看不到这个这个block的大小,是因为写入数据的规模太小了,等到这个写入的数据规模达到128MB,即一个块大小后才会看到这个block的数据。

file

所以只要一直运行这个kettle任务、不断写入数据即可,只要写入的数据规模达到128MB,第一个block就会被看到。

已用海豚调度一个kettle任务,没有定时,就一直跑。目前HDFS已生成了9月5日的数据文件,明天就可以观察几点

1、有没有自动生成明天9月6日的数据文件

2、今天9月5日的数据文件里面的数据是不是固定的、完整的,晚上12点之后不再写入

3、等到写入数据规模达到128MB看第一个block的数据大小可不可看到?

明天9月6日除了看这几点外,还用flume去做Kafka到HDFS的采集工作,以防万一,这两天被这个问题搞得头疼,kettle真是一个易入门难精通的工具!

(六)第六天为2023/9/6日

2023/09/06早上更新

由于昨晚Kafka突然有问题,导致kettle没能导入数据到HDFS的文件,今早已重新启动Kafka服务

file

(1)目前已重新启动海豚调度的kettle服务

file

(2)目前已自动生成9月6日的数据文件

file

(3)只能明天9月7日看一下昨晚的3个问题

1、有没有自动生成明天9月7日的数据文件

2、今天9月6日的数据文件里面的数据是不是固定的、完整的,晚上12点之后不再写入

3、等到写入数据规模达到128MB看第一个block的数据大小可不可看到?

2023/09/06下午更新

(1)为了以防万一,加了个对比测试。看看如果一天的数据放不满一个block或者部分多余数据放不满一个block,可不可以正常显示?即使它总的写入数据量大于128MB

不仅多加了几台模拟设备推送数据,还对动态排队数据和静态排队数据两个kettle任务进行对比

(2)动态排队数据有自动日期分区,可以自动分成不同日期的文件,就是昨晚跑的kettle任务

file

(3)而静态排队数据没有日期分区,就往第一个日期文件里写入数据

目前静态排队数据也已经生成了9月6日的数据文件,后面会一直写入这个文件

file

明早对比这两个kettle任务的数据文件看看情况

(七)第七天为2023/9/7日

2023/09/07早上更新

A、HDFS文件有日期分区的动态排队数据kettle任务状况

(1)首先是自动生成9月7日的文件

file

(2)然后是6日的数据文件固定,没有7日的数据

file

(3)6日的数据这一块由于只有62.8MB,因此HDFS的块没有显示大小

file

B、HDFS文件没有日期分区的静态排队数据kettle任务状况

由于写入的HDFS文件没有日期分区,而且数据量写入超过了128MB,所以这一块的数据虽然在不断写入,但是这一块的文件显示大小为128MB

file

疑问:现在任务依然运行,我想看看这个块已经有128MB后,会不会在其他block写入数据?

2023/09/07晚上更新

A、HDFS文件有日期分区的动态排队数据kettle任务状况

(1)今日9月7日写入的数据量超过128MB,因此HDFS已显示文件大小

file

总结一下:用kettle采集Kafka数据写入HDFS这条路是可行的,只要设置变动的文件名、生成每日的数据文件,然后一直跑任务就好!!!

file

本文由 白鲸开源科技 提供发布支持!

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

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

相关文章

【计算机网络】常用编码方式+例题(曼彻斯特编码、差分曼彻斯特编码...)

常用编码方式例题 常用编码方式练习画出四种编码20221题342015题342013题34 常用编码方式 练习 画出四种编码 20221题34 这个题目的考察是差分曼彻斯特编码。 差分曼彻斯特编码在每个码元的中间时刻电平都会发生跳变。与曼彻斯特编码不同的是:电平的跳变仅代表时钟…

C++ ─── 操作符重载和赋值重载

目录 赋值运算符重载 运算符重载 赋值运算符重载(赋值重载operator) 前置和后置重载 赋值运算符重载 运算符重载 C为了增强代码的可读性引入了运算符重载 , 运算符重载是具有特殊函数名的函数 ,也具有其返回值类型&#xff0c…

SQL Server 存储函数(funGetId):唯一ID

系统测试时批量生成模拟数据,通过存储函数生成唯一ID。 根据当前时间生成唯一ID(17位) --自定义函数:根据当前时间组合成一个唯一ID字符串:yearmonthdayhourminutesecondmillisecond drop function funGetId;go--自定义函数&…

PHP Storm 2024.1使用

本文讲的是phpstorm 2024.1最新版本激活使用教程,本教程适用于windows操作系统。 1.先去idea官网下载phpstorm包,我这里以2023.2最新版本为例 官网地址:https://www.jetbrains.com/zh-cn/phpstorm/ 2.下载下来后安装,点下一步 …

RAG 如何消除大模型幻觉

什么是大模型幻觉 假设我们有一个基于大型生成模型(如GPT-3)的问答系统,该系统用于回答药企内部知识库中的问题。我们向其提出一个问题:“阿司匹林的主要药理作用是什么?” 正确的答案应该是:“阿司匹林主…

记录一次汇川PLC通信的问题(06,16功能码相关)

先看下图,使用的06功能码,但其实在汇川的功能码选项内选择的是16,汇川的软件内根本没有06功能码,它会在你使用16功能码的时候去判断如果写寄存器的个数是1个就默认切换到06功能码,这就非常难受了,因为对接设…

【数据可视化包Matplotlib】Matplotlib基本绘图方法

目录 一、Matplotlib绘图的基本流程(一)最简单的绘图(仅指定y的值)(二)更一般的绘图(同时指定x和y的值)(三)增加更多的绘图元素 二、布局相关的对象——Figur…

SAP 技巧篇:Script脚本模拟人工操作批量录入数据

“ 现在大环境都讲人工智能、自动化办公等场景的应用,这里我们介绍一下SAP本身自带的自动化工具” 文章最后附最终脚本 01 — 背景需求 SAP:批量录入工具:LSMW/BDC/Script 三大工具 LSMW:应用场景多,实现方法多&am…

测出Bug就完了?从4个方面教你Bug根因分析

01 现状及场景 🎯 1.缺失bug根因分析环节 工作10年,虽然不是一线城市,也经历过几家公司,规模大的、规模小的都有,针对于测试行业很少有Bug根因环节,主流程基本上都是测试提交bug-开发修改-测试验证-发送报…

Docker部署MongoDB数据库

文章目录 官网地址docker 网络部署 MongoDB部署 mongo-expressdocker-compose.ymlMongoDB shell 官网地址 https://www.mongodb.com/zh-cn docker 网络 # 创建 mongo_network 网络 docker network create mongo_network # 查看网络 docker network list # 容器连接到 mongo_…

CANoe中LIN工程主节点的配置(如何切换调度表)

1:前置条件 1)工程已经建立,simulation窗口已经配置好(包括且不限于通道mappin好,数据库文件已经添加) 2)我已系统自带sampleCfg工程,作为例子。如下图 2 :主节点的配置…

ChatGPT深度科研应用、数据分析及机器学习、AI绘图与高效论文撰写教程

原文链接:ChatGPT深度科研应用、数据分析及机器学习、AI绘图与高效论文撰写教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247601506&idx2&sn5dae3fdc3e188e81b8a6142c5ab8c994&chksmfa820c85cdf58593356482880998fc6eb98e6889b261bf62…

element日期时间选择器,禁止选择当前时间以后的时间

效果如下&#xff1a; 源码附上&#xff1a; pickerOptions 对象包含一个disabledDate函数&#xff0c;该函数会对超出当前日期一年后的日期进行禁用。Date.now() - 8.64e7计算当前日期减去一年的毫秒数&#xff0c;从而禁用当年之后的所有年份。 <xx-date-picker v-model…

课堂行为动作识别数据集

一共8884张图片 xml .txt格式都有 Yolo可直接训练 已跑通 动作类别一共8类。 全部为教室监控真实照片&#xff0c;没有网络爬虫滥竽充数的图片&#xff0c;可直接用来训练。以上图片均一一手工标注&#xff0c;标签格式为VOC格式。适用于YOLO算法、SSD算法等各种目标检测算法…

vue3中单框双时间选择模式

在单框双时间选择下&#xff0c;给当前时间框赋值&#xff0c;可以使用vue中的v-model双向绑定方式 如前端元素代码&#xff1a; <el-form-item label"创建时间" style"width: 308px;"><el-date-pickerv-model"dateRange"value-forma…

公钥基础设施 (PKI) 助力物联网安全

物联网&#xff08;InternetofThings&#xff0c;缩写IoT&#xff09;在制造业、农业、家居、交通和车联网、医疗健康等多个领域广泛应用&#xff0c;让我们进入万物互联时代&#xff0c;实现智能生产、智慧生活。然而&#xff0c;随着物联网的发展&#xff0c;网络威胁日益增加…

高风险IP的来源及其影响

随着互联网的发展&#xff0c;网络安全问题越来越引人关注。其中&#xff0c;高风险IP的来源成为了研究和讨论的焦点之一。高风险IP指的是那些经常涉及到网络攻击、恶意软件传播以及其他不良行为的IP地址。它们的存在不仅对个人和组织的网络安全构成威胁&#xff0c;还可能给整…

MYSQL5.7详细安装步骤

MYSQL5.7详细安装步骤&#xff1a; 0、更换yum源 1、打开 mirrors.aliyun.com&#xff0c;选择centos的系统&#xff0c;点击帮助 2、执行命令&#xff1a;yum install wget -y 3、改变某些文件的名称 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base…

第四百六十二回

文章目录 1. 概念介绍2. 实现方法3. 示例代码4. 内容总结 我们在上一章回中介绍了"关于MediaQuery的优化"相关的内容&#xff0c;本章回中将介绍readMore这个三方包.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章回中介绍的readMore是一个…

一文读懂Javascript中var、let和const的区别,包括提升hoisting(文章非常简短易懂,适合小白)

一张表格整理var、let和const的区别 关键词 范围 提升 可以重新分配 可以重新声明 var 函数作用域 是 是 是 let 块作用域 否 是 否 const 块作用域 否 否 否 相信在上面的表格中&#xff0c;大家有疑问的应该是提升&#xff0c;那么下面就给大家来讲讲js…