一百六十八、Kettle——用海豚调度器定时调度从Kafka到HDFS的kettle任务脚本(持续更新追踪、持续完善)

news/2024/5/20 2:57:56 标签: 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 

(二)定时任务设置

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

(三)最后工作流情况

三、启动工作流

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

相应的任务实例也在跑!

四、启动工作流每天HDFS情况

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

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

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

1、2023/08/31早上更新

(1)04_Kafka_to_HDFS_turnratio任务

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

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

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

2、2023/08/31晚上更新

(1)04_Kafka_to_HDFS_turnratio任务

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

已生成的8月31日文件

(2)01_Kafka_to_HDFS_queue任务

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

已生成的8月31日文件

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

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

1、2023/09/01早上更新

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

今日再尝试其他的方式

2、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.sh

06-07 17 * * * /bin/sh  /opt/install/kettle9.2/kettle_job_sh/01_Kafka_to_HDFS_queue.sh
设置每天的17点的6分到7分中执行

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

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

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

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

1、2023/09/04早上更新

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

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

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

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

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

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

2、2023/09/04晚上更新 

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

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

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

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

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

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

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

1、2023/09/05早上更新

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

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

2、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)

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

(3)结果

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

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

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

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

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

所以只要一直运行这个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日

1、2023/09/06早上更新

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

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

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

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

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

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

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


http://www.niftyadmin.cn/n/5003032.html

相关文章

nginx实现负载均衡load balance

目录 nginx实现负载均衡load balance相关算法负载均衡https的访问后端的real server是否知道真正访问的用户的IP地址健康检查提升负载均衡的并发数量七层负载均衡和四层负载均衡七层负载均衡四层负载均衡四层和七层的区别502错误 nginx实现负载均衡load balance 准备&#xff…

Springboot - 13.spring-boot-starter-security集成

👀Spring Boot Starter Security 中文文档 Spring Security中文文档 👀Spring Boot Starter Security 运行流程 当然可以。首先,我们会将用户存储和认证的流程融入整个Spring Boot Starter Security的使用流程中。以下是当你使用Spring Bo…

uniapp 解决跨域的问题

uniapp 解决跨域的问题 我真的是个 沙雕 找对了解决办法 写错了地方 "h5" : {"devServer" : {"disableHostCheck" : true,"https": false,"proxy" : {"/app" : {"target" : "https://192.16…

php常用加密算法大全aes、3des、rsa等

目录 一、可解密加解密算法 1、aes 加解密算法 2、旧3des加解密方法 3、新3des加解密方法 4、rsa公私钥加解密、签名验签方法 5、自定义加密算法1 6、自定义加密算法2 7、自定义加密算法3 二、不可解密加密算法 1、md5算法 2、crypt算法 3、sha1算法 5、hash 算…

Git—版本控制系统

git版本控制系统 1、什么是版本控制2、常见的版本控制工具3、版本控制分类3.1、本地版本控制3.2、集中版本控制 SVN3.3、分布式版本控制 Git 4、Git与SVN的主要区别5、Git环境配置6、启动Git7、常用的Linux命令8、Git配置9、设置用户名与邮箱(用户标识,必…

Mendix如何实现导出文件

刚刚接触Mendix低代码两周,花了一周在b站看初级视频然后考完初级,第二周开始做个列表查询感觉照葫芦画瓢没啥难度。但最近要求写个导出列表数据,在mendix社区翻了翻,这个功能算是常见的。找了mendix官方提供的Docs磕磕盼盼才实现了…

简单便捷的行为验证码,让登录更轻松

前言 在当今数字化的世界里,登录账户已成为我们日常生活中不可或缺的一部分。然而,传统的输入验证码方式却常常给用户带来不必要的繁琐和麻烦。为了解决这一问题,简单便捷的行为验证码应运而生,让登录变得更加轻松。 行为验证码…

Linux命令200例:xargs标准输入的数据作为参数传递使用

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌。CSDN专家博主,阿里云社区专家博主,2023年6月csdn上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师&#xff0…