Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.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
Hadoop 卡夫卡结构化流式检查点_Hadoop_Pyspark_Spark Structured Streaming - Fatal编程技术网

Hadoop 卡夫卡结构化流式检查点

Hadoop 卡夫卡结构化流式检查点,hadoop,pyspark,spark-structured-streaming,Hadoop,Pyspark,Spark Structured Streaming,我正在尝试从卡夫卡做结构化流媒体。我计划在HDFS中存储检查点。我读过一篇Cloudera博客,建议不要在Spark流媒体的HDFS中存储检查点。对于结构流式检查点来说也是同样的问题。 在结构化流媒体中,如果我的spark程序关闭了一段时间,我如何从检查点目录获取最新的偏移量,并在该偏移量之后加载数据。 我将检查点存储在一个目录中,如下所示 df.writeStream\ .格式文本\ .optionpath,“\files”\ .option检查点位置“检查点\chkpt”\ 开始 更新:

我正在尝试从卡夫卡做结构化流媒体。我计划在HDFS中存储检查点。我读过一篇Cloudera博客,建议不要在Spark流媒体的HDFS中存储检查点。对于结构流式检查点来说也是同样的问题。

在结构化流媒体中,如果我的spark程序关闭了一段时间,我如何从检查点目录获取最新的偏移量,并在该偏移量之后加载数据。 我将检查点存储在一个目录中,如下所示

df.writeStream\ .格式文本\ .optionpath,“\files”\ .option检查点位置“检查点\chkpt”\ 开始 更新:

这是我的结构化流媒体程序,读取卡夫卡消息,解压缩并写入HDFS

df=火花\ .readStream\ 卡夫卡先生\ .optionkafka.bootstrap.servers,KafkaServer\ .期权认购,卡夫卡托皮克\ .选项FailOnDataloss,false\ 负载 事务_DF=DF。选择ExprcastValue作为字符串 事务_DF.printSchema decomp=Transaction\u DF.selectzip\u extractvalue.aliasdecompress zip_extract是解压流的UDF query=decomp.writeStream\ .格式文本\ .optionpath\Data\u目录\u在DFS中\ .option检查点位置,\pathinDHFS\\ 开始 查询.等待终止
在查询中,尝试应用检查点,同时将结果以某种格式(如拼花)写入一些持久性存储(如HDF)。这对我有好处

最好在长期存储上存储检查点HDFS、AWS S3等。我想在这里补充一点,属性failOnDataLoss不应该设置为false,因为这不是最佳实践。数据丢失是没有人愿意承担的。Rest您走的是正确的道路。

据我所知,它建议在Hbase、Kafka、HDFS或Zookeeper中维护偏移量管理

值得一提的是,您还可以在存储器中存储偏移 像HDFS这样的系统。在HDFS中存储偏移量是一种不太流行的方法 与上述选项相比,HDFS的延迟比 其他系统,如ZooKeeper和HBase

在Spark文档中,您可以在以下位置找到如何从现有检查点重新启动查询:

在结构化流媒体中,如果我的spark程序关闭了一段时间, 如何从检查点目录获取最新偏移量并加载数据 在那个偏移量之后

在checkpointdir文件夹下,您将找到一个文件夹名“offsets”。文件夹“偏移量”维护从kafka请求的下一个偏移量。打开“偏移量”文件夹下的最新文件最新批处理文件,下一个预期偏移量将采用以下格式

{"kafkatopicname":{"2":16810618,"1":16810853,"0":91332989}}
要加载该偏移量之后的数据,请将下面的属性设置为spark读取流

 .option("startingOffsets", "{\""+topic+"\":{\"0\":91332989,\"1\":16810853,\"2\":16810618}}")

0,1,2是主题中的分区。

您确定博客建议您不要在HDF上存储检查点吗?这太奇怪了。你有链接吗?对于结构化流问题,只需使用相同的检查点目录运行相同的代码,结构化流媒体将拾取最后一个故障偏移量并从中重新启动。@zsxwing这是cloudera博客链接我手动终止了流媒体程序一分钟,然后再次启动它,它仅在启动后才开始处理收到的消息。它在关闭时忽略了丢失的消息,并且没有再次处理它们。您可以查看驱动程序日志并查找由logInfosGetBatch调用的start=$start,end=$end输出的日志吗?它应该告诉你查询处理了什么。我在问题中添加了完整的代码作为更新。如何从检查点文件获取最新偏移量。在执行此操作时,如何防止HDFS中的检查点随着时间的推移使用越来越多的存储?您是否可以使用任何清理配置来管理它?在执行此操作时,如何防止HDFS中的检查点随着时间的推移使用越来越多的存储?有什么清理配置可以用来管理吗?据我所知,检查点不存储太多数据,它像Kafka一样存储偏移量,所以您不必担心存储问题,如果您想清除检查点,可以在维护期间进行,也可以为此设置一个计划程序。我正在使用spark.cleaner.referenceTracking.cleanCheckpoints,在SparkConf上为true,请为我清除检查点。