并发批处理作业将日志写入数据库

时间:2016-03-23 03:31:51

标签: shell amazon-web-services cron batch-processing amazon-sqs

我的生产系统每天都有近170个Ctrl-M作业(基本上是cron作业)。这些作业被编织在一起(通过创建依赖关系)来执行ETL操作。例如:Ctrl-M(像CRON一样的调度程序)几乎总是以shell脚本开头,然后以特定的顺序执行一堆python,hive脚本或map-reduce作业。

我正在尝试在每个进程中实现日志记录,以便能够更好地监视整个任务和管道。日志将用于构建监视仪表板。

目前,我已使用中央包装器实现了日志记录,每个进程都会调用该包装器来记录信息。这个包装器反过来打开一个teradata连接,并调用teradata存储过程写入teradata表。

现在这个工作正常。但就我而言,多个并发进程(产生更多并行子进程)同时运行,并且在进行负载测试时我已经开始遇到连接断开。以下是我一直在考虑的方法:

  • 使进程写入某种消息队列(例如:AWS sqs)。侦听器将异步从这些消息队列中选择数据,然后批量写入teradata。
  • 使用文件或某些结构执行批量写入teradata db。

我非常希望听到您对此或其他更好方法的看法。最终,日志记录的终点将转移到红移,从而考虑AWS SQS队列。

提前致谢。

1 个答案:

答案 0 :(得分:3)

我认为Kinesis firehose是完美的解决方案。设置firehose流非常快速且易于配置,非常便宜,并且可以将数据流式传输到您选择的s3存储桶,并可选择直接将日志流式传输到红移。

如果红移是你的最终目标(甚至只是s3),那么kinesis firehose就不会让它更容易。

https://aws.amazon.com/kinesis/firehose/

  

Amazon Kinesis Firehose是将流数据加载到的最简单方法   AWS。它可以捕获并自动将流数据加载到亚马逊   S3和Amazon Redshift,支持近乎实时的分析   您已经拥有的现有商业智能工具和仪表板   今天使用。它是一个完全托管的服务,可以自动扩展   匹配数据的吞吐量,不需要持续   管理。它还可以批量,压缩和加密数据   在加载之前,最大限度地减少使用的存储量   目的地和增加安全性。您可以轻松创建Firehose   来自AWS管理控制台的传输流,使用a进行配置   几次点击,并开始从数百个流向数据流发送数据   数千个数据源将连续加载到AWS - 全部在   只需几分钟。