采集日志到hdfs的替代方案

Logstash应用-同步ES(elasticsearch)到HDFS 数据采集存在时间漂移问题,数据保存时使用的是采集时间而不是数据生成时间,采用webhdfs无法对文件大小进行设置,解决@timestamp时区问题 阅读详情

系列文章目录

本文衔接采集日志通过logstash写入到hdfs,因前几天发现集群中毒,同运维人员对集群的访问权限做了限制,导致通过logstash写入hfds延迟严重,所以有了本文的替代方案
采集日志通过logstash写入hdfs_logstash output hdfs_冰帆<的博客-优快云博客


前言

大数据的采集日志到hdfs,然后通过mr写入hive ods表,一般都是企业数据采集的必经之路。详见:大数据技术架构图_冰帆<的博客-优快云博客

 


 原本是同logstash消费kafka的数据实时写入到hdfs,因logstash写入到hdfs突然延迟严重,导致启动临时方案如下:通过logstash写入到本地文件(一小时一个文件),然后通过dolphinscheduler调度,将本地文件上传到hdfs相应的目录。

本文使用到的工具如下:

消息队列:kafka,采集日志通过filebeat将实时的日志推到kafka

logstash:消费kafka写入到本地文件,每小时一个文件

dolphinscheduler:调度任务,每小时将文件上传到hdfs目录。

一、流程图

数据流程图:

因本文主要是替换方案,以最小改动,最快上线的方案 。

二、logstash写入本地文件

1.logstash配置文件

input {
    kafka {
        bootstrap_servers => "hd.n132:9092,hd.n133:9092,hd.n134:9092"
        topics => ["filebeat_records","filebeat_hearts"]
       # codec => "json"
        consumer_threads => 6
        decorate_events => true
        codec => "json"
        auto_offset_reset => "latest"
        group_id => "logstash-to-file"  ##logstash 集群需相同

    }
}

filter {
    grok {
               match => {
                        "message" => "\[%{DATA:uploadtimestamp}\] \[%{DATA:log}\] \[%{DATA:clientid}\] \[%{DATA:level}\]-%{GREEDYDATA:msgdata}"
              }
     }

    date {
        match => ["uploadtimestamp","yyyy-MM-dd HH:mm:ss"]
        target => "time_local"
    }

    ruby {
        code => "event.set('index.date', event.get('time_local').time.localtime.strftime('%Y-%m-%d'))"
    }

    ruby {
        code => "event.set('index.hour', event.get('time_local').time.localtime.strftime('%H'))"
    }

}
filter {
        if "_grokparsefailure" in [tags] {
  #       drop {}
         }
}

output {
     if "_grokparsefailure" in [tags] {
     file {
            path => "/home/hadoop/logstash/logs/logstash-records-log-%{index.date}-%{index.hour}"
         #   codec => line {
         #       format => "%{message}"
         #   }
     }

      }
     else if [fields][filetype] == "heart" {
      #webhdfs {
      #  host => "hd.m1"
      #  port => 50070
      #  user => "hadoop"
      #  flush_size => 5000
      #  idle_flush_time => 5
      #  retry_interval => 3
      #  path => "/input/heartData/%{index.date}/%{index.date}-%{index.hour}"
      #  codec => line {
      #      format => "%{message}"
      #      }
      # }
         file {
            path => "/home/hadoop/logstash/logs/heartData/%{index.date}/%{index.date}-%{index.hour}"
            codec => line {
               format => "%{message}"
            }
         }
     }
    else if [fields][filetype] == "records" {
      #webhdfs {
      #  host => "hd.m1"
      #  port => 50070
      #  user => "hadoop"
      #  flush_size => 5000
      #  idle_flush_time => 5
      #  retry_interval => 3
      #  path => "/input/machine_log/%{index.date}/%{index.date}-%{index.hour}"
      #  codec => line {
      #      format => "%{message}"
      #      }
      # }
        file {
            path => "/home/hadoop/logstash/logs/machine_log/%{index.date}/%{index.date}-%{index.hour}"
            codec => line {
               format => "%{message}"
            }
         }

    }
    #stdout { codec => rubydebug }

   # file {
   #         path => "/home/hadoop/logstash/logs/logstash-records-log-%{index.date}-%{index.hour}"
#            codec => line {
#                format => "%{message}"
#            }
   #  }

}
 

配置代码解读:消费kafka两个topic:"filebeat_records","filebeat_hearts"

每小时分别写入到:

logstash/logs/machine_log

logstash/logs/heartData

每天一个目录,每小时一个文件。

2.启动logstash

代码如下(示例):
nohup ./bin/logstash -f config/filebeat-logstash-file.conf &

三、调度上传到hdfs脚本

脚本如下:

echo "file to hdfs"

DATE_HOUR=$(date -d last-hour +%Y-%m-%d-%H)
DATE=$(date -d last-hour +%Y-%m-%d)
if [ -z "$1" ]; then
    DATE=$DATE
else
    DATE=$1
    DATE_HOUR=$2
fi


RECORDS_SRC=/input/machine_log/$DATE/

HEARTS_SRC=/input/heartData/$DATE/


RECORDS_PATH=/home/hadoop/logstash/logs/machine_log/$DATE

HEARTS_PATH=/home/hadoop/logstash/logs/heartData/$DATE

RECORDS_DST=/home/hadoop/logstash/logs/machine_log/$DATE/$DATE_HOUR

HEARTS_DST=/home/hadoop/logstash/logs/heartData/$DATE/$DATE_HOUR


hadoop fs -test -e $RECORDS_SRC

if [ $? -eq 0 ]; then
   echo "File is exist!"
else
   echo "File is not exist!"
   hdfs dfs -mkdir -p $RECORDS_SRC
fi


hadoop fs -test -e $HEARTS_SRC

if [ $? -eq 0 ]; then
   echo "File is exist!"
else
   echo "File is not exist!"
   hdfs dfs -mkdir -p $HEARTS_SRC
fi

if [ ! -d "${RECORDS_PATH}" ]; then
    mkdir ${RECORDS_PATH}
fi

if [ ! -d "${HEARTS_PATH}" ]; then
    mkdir ${HEARTS_PATH}
fi



scp -r -P 40 hd-es-1:$RECORDS_DST $RECORDS_DST
scp -r -P 40 hd-es-1:$HEARTS_DST $HEARTS_DST

hdfs dfs -put -f $RECORDS_DST $RECORDS_SRC
hdfs dfs -put -f $HEARTS_DST $HEARTS_SRC

rm $RECORDS_DST
rm $HEARTS_DST

ssh -n -p 40 hd-es-1 "rm $RECORDS_DST"
ssh -n -p 40 hd-es-1 "rm $HEARTS_DST"

各个节点服务器 


脚本流程介绍:

 1)设定自动的日期与小时值,

2)在hdfs上判断日期目录是否存在,不存在则创建。

3)在hd.n106 判断日期目录是否存在,不存在创建

4)从hd-es-1 scp 文件到hd.n106 同名目录

5)上传hd.n106 本地文件到hdfs 相应目录

6)删除本地hd.n106 相应文件

7)删除hd-es-1 相应文件

四、dolphinscheduler调度

在dolphinscheduler 上创建shell工作流

 

shell 脚本如下: 

ssh -n -p 40 hd.n106 'sh /home/hadoop/job/file-to-hdfs.sh'

远程执行hd.n106 上的/home/hadoop/job/file-to-hdfs.sh 文件。

设置定时管理:

看看最终的结果运行效果:

 

 与之前logstash直接写入hdfs基本一致。

放一张之前logstash 写入hdfs 的图:

 

总结

遇到问题,如果原有路径解决需要很长的时间,需要尽快有替代方案,解决眼前的问题,不能影响后面数仓的任务调度。解决问题后,再去查原logstash写入hdfs慢的问题。

Flume的Exec Source + Memory Channel + HDFS Sink流程 在Apache Flume中,数据收集流程由三个核心组件构成:Source(源)、Channel(通道)和Sink(汇)。您询问的“Exec + Memory + HDFS”流程指的是使用Exec Source作为数据输入源、Memory Channel作为中间缓冲区、HDFS Sink作为数据输出目标。这种组合常用于实时日志收集场景,优点是简单高效,但需注意Memory Channel的可靠性风险(如代理崩溃可能导致数据丢失)。下面我将逐步解释整个流程,并提供配置示例。tail -f tomcat.lo 阅读详情

相关推荐

flume采集日志到HDFS中再导入到hive表中

flume介绍 Flume is a distributed, reliable, and available service for efficiently collecting, aggregating, and moving large amounts of log data. It has a simple and flexible architecture based on st...

slmpl的博客 4449

替代HDFS的8个方案

http://os.51cto.com/art/201207/347711.htm HDFS(Hadoop Distributed File System)是Hadoop项目的核心子项目,是分布式计算中数据存储管理的基础,坦白说HDFS是一个不错的分布式文件系统,它有很多的优点,但也存在有一些缺点,包括:不适合低延迟数据访问、无法高效存储大量小文件、不支持多用户写入及任意

youngstonep的专栏 1426

Flume采集nginx日志到HDFS

1.环境准备 jdk+hadoop:搭建伪分布式 nginx安装参考:https://blog.youkuaiyun.com/qq_34651991/article/details/100726599 flume安装很简单,下载解压即可 2.Nginx 修改nginx配置 nginx.conf [root@hadoop000 conf]# vi nginx.conf ...... # 将该部分注释放...

cllblogs 1312

php对象存储hadoop存储,三个理由告诉你对象存储替换HDFS还不错

Hadoop使企业能够对庞大的非结构化数据集进行大规模分析处理。这个数据集可以包含数以百万计,甚至数十亿个需要读取的文件。为了降低成本并提高数据处理性能,数据和应用程序应该存在于相同的物理硬件上。这样做使数据无需移动,就地处理,并允许使用不算昂贵的服务器级存储。Hadoop分布式文件系统(HDFS)是为了管理这些分散在各个节点上的数据而应运而生的。然而现代存储架构提供了一个可以替代HDFS的引人注...

weixin_33349121的博客 657

Linux系统日志采集

本实验任务主要完成基于ubuntu环境使用flume对linux系统进行数据采集工作。通过完成本实验任务,要求学生了解并掌握基本的flume采集数据方法以及配置格式,为后续进一步学习flume其它知识点做基础,也为从事大数据平台运维工程师、大数据技术支持工程师等岗位工作奠定夯实的技能基础。掌握flume的应用原理   掌握flume对日志信息的采集过程本次环境是:Ubuntu16.04+flume-ng-1.5.0-cdh5.3.6Flume是Cloudera提供的日志收集系统,Flume支持在日志系统中定

需要远程指导仿真实验、代码有问题的,请后台私信或者关注公众号 5584

数据中台国产化替代方案:从Hadoop到华为高斯,组件选型指南

Hive查询“设备故障分析”需2小时,无法满足“实时维修”需求;HBase的“设备状态查询”需用Java API开发,开发成本高;运维团队需维护50台Hadoop服务器,人力成本高。我是李阳,资深数据架构师,拥有10年数据中台建设经验,参与过5个大型国产化迁移项目(金融、制造、政府)。专注于“数据中台架构设计、国产化替代、云原生转型”领域,曾在《程序员》杂志发表多篇技术文章。如果你有数据中台相关的问题,欢迎通过“知乎专栏”或“微信公众号”与我联系。注。

软件工程实践的博客 1293

docker安装filebeat

一、概述 filebeat和beats的关系 首先filebeat是Beats中的一员。  Beats在是一个轻量级日志采集器,其实Beats家族有6个成员,早期的ELK架构中使用Logstash收集、解析日志,但是Logstash对内存、cpu、io等资源消耗比较高。相比Logstash,Beats所占系统的CPU和内存几乎可以忽略不计。目前Beats包含六种工具: Packetb...

shykevin的博客 5764

flume采集日志信息到hdfs

如上问题有的来自我自身项目开发,有的收集网站,有的来自读者…如有侵权,立马删除。再者,针对此专栏中部分问题及其问题的解答思路或步骤等,存在少部分搜集于全网社区及人工智能问答等渠道,若最后实在是没能帮助到你,还望见谅!并非所有的解答都能解决每个人的问题,在此希望屏幕前的你能够给予宝贵的理解,而不是立刻指责或者抱怨!如果你有更优解,那建议你出教程写方案,一同学习!共同进步。ok,以上就是我这期的Bug修复内容啦,如果还想查找更多解决方案,你可以看看我专门收集Bug及提供解决方案的专栏。

**My Coding Family** 1662

【Hadoop生态圈】2.使用Flume采集日志数据到HDFS中

使用Flume采集日志数据到HDFS中

皓亮君的博客 9631

将日志采集到HDFS

在Hadoop1、Hadoop2、Hadoop3的/export/servers/hadoop-3.3.0/share/hadoop/common/lib目录下,将该目录下的jar包guava-27.0-jre.jar复制到Flume安装目录的lib目录下,然后进入该目录,将guava-11.0.2.jar删除,具体运行结果如下图所示。2.将avro-hdfs.conf文件拖到Hadoop1的/export/servers/flume-1.9.0/conf/目录下,配置日志采集方案,运行结果如下图所示。

代码欢乐豆 747

用户视角下的vfsglobal预约困境:从注册到登录的全流程避坑指南

本文详细解析了vfsglobal签证预约系统从注册到登录的全流程操作,帮助用户避开常见技术陷阱。针对IP限制、DNS解析、浏览器缓存等登录障碍提供实用解决方案,并揭示账号管理的隐藏规则与支付环节的延时处理技巧,助力用户高效完成签证预约。

ol78901234的博客 871

利用Flume采集日志数据到HDFS

123

paul250670的博客 3426

自建邮局服务器| 批量邮件群发系统PowerMTA+oem(mumara,mailwizz, interspire)

世界顶级自建邮局服务器PowerMTA+oem(mumara,mailwizz, interspire) PowerMTA4.5(最好用的 群发邮件软件)是用于大批量多ip开发的邮件传递邮寄。可按每小时发送数近百万条电子邮件,发送IP地址和域可以详细配置,加上目前流行前端oem,mumara,mailwizz, interspire等,可定时发送,定时重复发送,实现全自动化 邮件群发 方案。 官网(powermta4.5下载) https://www.sparkpost.com/powermta/ 使用Po

ytrsexpo的博客 6503

Flume日志采集

目录 一 前言 二 概述 2.1 什么是Flume 2.2 Flume特性 三 Flume原理 3.1 Flume组件详解 3.2 Flume采集结构图 3.2.1 简单结构 3.2.2 复杂结构 4 Flume实战案例 4.1 Flume的安装部署 4.2 采集案例 4.2.1 采集目录到HDFS 4.2.2 采集文件到HDFS 4.3 更多source和si...

我的祖传代码 1万+

MS2107 CVBS转USB2.0 音视频采集芯片,支持1080P@30HZ输出

MS2107 是一款视频和音频采集芯片,支持CVBS转USB2.0 ;可以将 CVBS、S-Video 和音频信号通过 USB接口传送到 PC、智能手机和平板电脑上预览或采集。

TEL18967112838的博客 2075

DaVinci Developer和DaVinci Configurator:AutoSAR开发与配置工具

a. 组件创建:DaVinci Developer允许开发人员创建不同类型的AutoSAR软件组件,如应用软件组件(Application Software Component,SWC)、基础软件组件(Basic Software Component,BSWC)等。除了以上功能,DaVinci Developer和DaVinci Configurator还提供了丰富的文档和代码生成功能,以支持开发人员和配置人员进行文档编写、代码生成和文档浏览等任务。用户可以根据具体需求对软件组件进行灵活的配置。

HmoaAmp的博客 2262

Flume采集日志信息到HDFS中

1.Hadoop集群搭建的配置 1.1搭建步骤如下链接: https://blog.youkuaiyun.com/qq_31987649/article/details/85037833 1.2 启动hadoop    只需要启动Master 主节点上的hadoop    hadoop安装路径: / hadoop-2.6.5 /sbin       ./start-all.sh  启动     ...

qq_31987649的博客 5587

假新闻检测论文分享(30)MMDFND: Multi-modal Multi-Domain Fake News Detection

现有的假新闻检测方法通常集中在单一领域的新闻上,如健康或政治。然而,社交媒体上的新闻往往来自多个领域,这给单一领域的假新闻检测方法带来了两个主要挑战:数据稀缺性:处理较小、单一领域的新闻数据集时,由于训练数据的稀缺,模型的有效性显著下降。跨领域检测的准确性下降:单一领域的假新闻检测方法在跨领域新闻数据集上的准确性大幅降低。缓解领域间模态语义偏差:通过DPLE网络提取跨领域和领域特定的知识,缓解了不同领域间文本和图像的语义差异。

weixin_41964296的博客 671

Flume采集日志写到Hdfs(数仓项目)

目录Flume版本选择项目流程Flume核心配置启动flume agent采集数据思考问题 hdfs路径是否正确flume自定义拦截器 Flume版本选择 Flume 1.6 无论是Spooling Directory Source和Exec Source均不能满足动态实时收集的需求 Flume 1.7+ 提供了一个非常好用的TaildirSource 使用这个source,可以监控一个目录,并且使用正则表达式匹配该目录中的文件名进行实时收集 Taildir Source可实时监控一批文件,并记录每个文

Knight 8630

Qt C++ 电子海图与作战叠加(Overlay)系统

lab_pos->setText(QString("坐标: X%1 Y%2").arg(p.x(),0,'f',0).arg(p.y(),0,'f',0));lab_distance->setText(QString("距离: %1 海里").arg(dist,0,'f',1));lab_bearing->setText(QString("方位: %1°").arg(bear,0,'f',1));// 绘制S-57海图基底。scene->addText("封锁线").setPos(450,180);

寒寒豆豆软件公司的博客 496

uniapp - 使用 <video> 播放视频黑屏,浏览器控制台报错: DOMException: The element has on supported sources.(详细完美解决方案)

uniapp video 视频播放黑屏,uniapp 报错DOMException: The element has on supported sources.,uniapp如何解决DOMException: The element has on supported sources.,uniapp使用video标签无法播放视频出现黑屏问题处理,uniapp解决video视频黑屏显示0秒,并且浏览器报错DOMException: The element has on supported sources.,un

✅ 精选推荐文章 7055

Flume之——采集Nginx日志到HDFS

今天,就给大家带来一篇Flume采集Nginx日志到HDFS的文章,好了,不多说了,直接进入主题。 一、下载 大家可以到Apache官网下载:http://flume.apache.org/ 比如我下载的是apache-flume-1.7.0-bin.tar.gz 二、配置 1、解压 输入如下命令进行解压 tar -zxvf apache-flume-1.7.0-bin.

冰河的专栏 4510

【Claude】Invalid API key 无效密钥报错已解决

API 拒绝了你提供的 key。最高频的根因是老的/被撤销的 key 藏在某处自动加载的配置文件里,而你对此不知情。→ 检查所有可能注入 key 的来源(.env.envrc、shell 配置、IDE 设置、)→ 清除无效来源 → 用/status验证。参考:Claude Code 官方《错误参考》"身份验证"章节、社区 Invalid API key 排查记录。

博客 7923

flume-将日志采集到hdfs

那么我们挑选一个hadoop02和hadoop03的窗口输入下面的命令查看一下日志的写入情况,那么接下来,让我们切换到hadoop01.选择成功之后,我们再次切换到熟悉的conf目录。在虚拟机hadoop02和hadoop03上的conf目录下配置相同的日志采集方案,‘上面的操作完成之后,我们各自克隆3个hadoop02和hadoop03窗口。复制完成之后我们切换到flume的lib目录下,把之前的guava删除掉。,没有启动的回到文章的第一行,启动集群,再回来。那么好,上面的弄完了,我们接下来切换到。

qianwanfuweng的博客 1838

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

flume采集日志文件到hdfs

flume采集日志文件到hdfs配置文件启动命令运行结果 flume可以从正在输出的日志文件中采集数据存到hdfs中 配置文件 agent1.sources = source1 agent1.sinks = sink1 agent1.channels = channel1 # Describe/configure tail -F source1 agent1.sources.source1....

jjkang的博客 3325

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Flume + kafka + HDFS构建日志采集系统

    Flume是一个非常优秀日志采集组件,类似于logstash,我们通常将Flume作为agent部署在application server上,用于收集本地的日志文件,并将日志转存到HDFS、kafka等数据平台中;关于Flume的原理和特性,我们稍后详解,本文只简述如何构建使用Flume + kafka + HDFS构建一套日志采集系统。     1)Flume:作为agent部署在...

深入一点 4674

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

上一篇: 继续深挖挖矿病毒solr中毒途径
下一篇: 家庭网络结构图
冰帆<
博客等级 码龄21年 3577粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰帆<

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值