Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Logging 如果无法到达水槽,则向水槽源发送停止信号_Logging_Apache Spark_Flume_Log Shipping - Fatal编程技术网

Logging 如果无法到达水槽,则向水槽源发送停止信号

Logging 如果无法到达水槽,则向水槽源发送停止信号,logging,apache-spark,flume,log-shipping,Logging,Apache Spark,Flume,Log Shipping,我正在尝试使用Flume将访问日志发送到Spark群集。但是有很多限制迫使我编写一个自定义应用程序(或Flume源代码)来读取日志文件 我要做的是让Flume客户端向该源发送信号,以防它无法将数据写入接收器。因为我们经常有长时间的网络中断,并且在网络备份之前,没有足够的磁盘空间来排队等待磁盘上的失败日志。相反,我希望“告诉”源停止读取日志,直到网络启动,然后“告诉”它重新启动。但到目前为止,我还没有看到任何关于文档中错误的回调 我是否可以在不改变方向盘的情况下实现这样的场景?好的,现在我们已经澄

我正在尝试使用Flume将访问日志发送到Spark群集。但是有很多限制迫使我编写一个自定义应用程序(或Flume源代码)来读取日志文件

我要做的是让Flume客户端向该源发送信号,以防它无法将数据写入接收器。因为我们经常有长时间的网络中断,并且在网络备份之前,没有足够的磁盘空间来排队等待磁盘上的失败日志。相反,我希望“告诉”源停止读取日志,直到网络启动,然后“告诉”它重新启动。但到目前为止,我还没有看到任何关于文档中错误的回调


我是否可以在不改变方向盘的情况下实现这样的场景?

好的,现在我们已经澄清了几个问题,下面是实际发生的情况:

Flume Source - SpoolDir or similar -> Channel -> AvroSink (SparkStreaming)
Flume解析一个文件并将该文件的行转换为FlumeEvents,然后将其假脱机到通道。这会尽快发生,至少在通道已满之前是如此。如果通道已满,源将退出,直到通道再次接受记录。您可以通过指定通道可容纳的内存和记录量来控制通道的容量

AvroSink将读取该频道。如果AvroSink由于网络中断而无法提交事件,它将停止从通道中消费,从而导致通道已满


此时,您将在Flume的日志文件中看到消息,指示接收器无法跟上源,这是预期的行为,因为您的通道充当(不可靠)接收器的后缓冲区。您不会遇到重复的事件处理,但是如果您选择MemoryChannel等非持久通道类型,可能会导致某些事件中断。

好的,现在我们已经澄清了几个问题,下面是实际发生的情况:

Flume Source - SpoolDir or similar -> Channel -> AvroSink (SparkStreaming)
Flume解析一个文件并将该文件的行转换为FlumeEvents,然后将其假脱机到通道。这会尽快发生,至少在通道已满之前是如此。如果通道已满,源将退出,直到通道再次接受记录。您可以通过指定通道可容纳的内存和记录量来控制通道的容量

AvroSink将读取该频道。如果AvroSink由于网络中断而无法提交事件,它将停止从通道中消费,从而导致通道已满


此时,您将在Flume的日志文件中看到消息,指示接收器无法跟上源,这是预期的行为,因为您的通道充当(不可靠)接收器的后缓冲区。您不会遇到重复的事件处理,但是如果选择非持久通道类型(如MemoryChannel),可能会导致某些事件中断。

您使用的是哪种源类型?您是将日志文件复制到HDFS,还是将输出流式传输到SparkStreaming与AvroSink?您的场景实际上是Flume设计用来处理的,但是您应该对您的配置提供更多的了解,以便我们为您提供一些指导。也许一份你的flume.conf就可以了。啊,对不起,忘了提到我正在使用SparkStreaming。所以,我把原木推到Spark上的Avro水槽。我只需要保证流在网络中断后会自动继续,而不会在中断期间复制磁盘上的日志(正常访问日志文件+Flume磁盘缓冲)。您使用哪种源类型?您是将日志文件复制到HDFS,还是将输出流式传输到SparkStreaming与AvroSink?您的场景实际上是Flume设计用来处理的,但是您应该对您的配置提供更多的了解,以便我们为您提供一些指导。也许一份你的flume.conf就可以了。啊,对不起,忘了提到我正在使用SparkStreaming。所以,我把原木推到Spark上的Avro水槽。我只需要保证流在网络中断后会自动继续,而不会在中断期间复制磁盘上的日志(正常访问日志文件+Flume磁盘缓冲)。我不担心Flume重复处理我的事件。为了进一步澄清,我的问题是如何向自定义源发送信号以退出或停止生成更多事件。因为就我所见,自定义源和接收器是完全分离的,flume的任务是将未处理的事件排队,直到接收器重新联机。正如我所写的,退避机制是由通道容量触发的。如果通道已满,震源将后退。没有明确做到这一点的功能。这种退避机制实际上相当可靠,我不担心Flume会重复处理我的事件。为了进一步澄清,我的问题是如何向自定义源发送信号以退出或停止生成更多事件。因为就我所见,自定义源和接收器是完全分离的,flume的任务是将未处理的事件排队,直到接收器重新联机。正如我所写的,退避机制是由通道容量触发的。如果通道已满,震源将后退。没有明确做到这一点的功能。这种退避机制实际上相当可靠