Concurrent batch jobs writing logs to database
我的生产系统每天都有近170个Ctrl-M作业(基本上是cron作业)。这些作业被编织在一起(通过创建依赖关系)来执行ETL操作。例如:Ctrl-M(像CRON一样的调度程序)几乎总是以shell脚本开始,然后以特定的顺序执行一堆python,hive脚本或map-reduce作业。
我正在尝试在每个进程中实现日志记录,以便能够更好地监视整个任务和管道。日志将用于构建监视仪表板。
目前,我已经使用中央包装器实现了日志记录,每个进程都会调用它来记录信息。这个包装器反过来打开一个teradata连接,并调用teradata存储过程写入teradata表。
这个现在工作正常。但就我而言,多个并发进程(产生更多并行子进程)同时运行,并且在进行负载测试时我已经开始遇到连接断开。以下是我一直在考虑的方法:
- 使进程写入某种消息队列(例如:AWS sqs)。侦听器将异步从这些消息队列中选择数据,然后批量写入teradata。
- 使用文件或某些结构来执行批量写入teradata db。
我非常希望听到你对这个或任何其他更好的方法的看法。最终,日志记录的终点将转移到红移,因此可以考虑使用AWS SQS队列。
提前致谢。
我认为Kinesis firehose是完美的解决方案。 设置firehose流非常快速且易于配置,非常便宜,并且可以将数据流式传输到您选择的s3存储桶,并可选择直接将日志流式传输到redshift。
如果红移是你的最终目标(甚至只是s3),那么kinesis firehose就无法让它变得更容易。
https://aws.amazon.com/kinesis/firehose/
Amazon Kinesis Firehose is the easiest way to load streaming data into
AWS. It can capture and automatically load streaming data into Amazon
S3 and Amazon Redshift, enabling near real-time analytics with
existing business intelligence tools and dashboards you’re already
using today. It is a fully managed service that automatically scales
to match the throughput of your data and requires no ongoing
administration. It can also batch, compress, and encrypt the data
before loading it, minimizing the amount of storage used at the
destination and increasing security. You can easily create a Firehose
delivery stream from the AWS Management Console, configure it with a
few clicks, and start sending data to the stream from hundreds of
thousands of data sources to be loaded continuously to AWS – all in
just a few minutes.