Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/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
Apache spark Spark Structured Streaming-此查询不支持从检查点位置恢复_Apache Spark_Apache Spark Sql_Spark Structured Streaming - Fatal编程技术网

Apache spark Spark Structured Streaming-此查询不支持从检查点位置恢复

Apache spark Spark Structured Streaming-此查询不支持从检查点位置恢复,apache-spark,apache-spark-sql,spark-structured-streaming,Apache Spark,Apache Spark Sql,Spark Structured Streaming,我试图在检查点上做一些实验/测试,以便于学习 但我得到有限的选项来查看内部工作。我正在尝试从套接字读取数据 val行:DataFrame=spark.readStream .格式(“套接字”) .选项(“主机”、“本地主机”) .选项(“端口”,12345) .load() 并用它执行一些状态操作,我需要检查点 问题1。使用检查点位置作为我的本地系统,它无法读回检查点,并给出一个错误 This query does not support recovering from checkpoint

我试图在检查点上做一些实验/测试,以便于学习

但我得到有限的选项来查看内部工作。我正在尝试从套接字读取数据

val行:DataFrame=spark.readStream
.格式(“套接字”)
.选项(“主机”、“本地主机”)
.选项(“端口”,12345)
.load()
并用它执行一些状态操作,我需要检查点

问题1。使用检查点位置作为我的本地系统,它无法读回检查点,并给出一个错误

This query does not support recovering from checkpoint location. Delete src/testC/offsets to start over.;
它每次都会创建一个新的检查点来运行查询。如何使用本地系统作为检查点进行测试/实验

(所以我选择了hdfs)

问题2。当hdfs作为检查点时,它在本地系统中创建检查点而不是hdfs,如何使其成为hdfs的检查点?(通过hdfs配置btw)

df.writeStream
.选项(“检查点位置”,“/mycheckLoc”)
.选项(“hdfs_url”->”hdfs://localhost:9000/hdoop"),
.option(“web\u hdfs\u url”->”webhdfs://localhost:9870/hdoop")

第三季度。我们是否需要在每个
df.writeStream
选项中提供检查点,即我们还可以传入
spark.sparkContext.setCheckpointDir(checkpointLocation)
对吗?

您收到此错误“此查询不支持从检查点位置恢复”因为
socket
readStream不是可重新播放的源代码,因此不允许使用任何检查点。您需要确保在writeStream中根本不使用选项
checkpointLocation

通常,通过使用
file:///path/to/dir
hdfs:///path/to/dir

确保您的应用程序用户具有写入和读取这些位置的所有权限。此外,您可能更改了代码库,在这种情况下,应用程序无法从检查点文件恢复。您可以在上的结构化流编程Guid中阅读结构化流作业中允许和不允许的更改

为了让Spark了解您的HDF,您需要在Spark的类路径上包含两个Hadoop配置文件:

  • hdfs-site.xml,为hdfs客户端提供默认行为;及
  • core-site.xml,用于设置默认文件系统名称
通常,它们存储在“/etc/hadoop/conf”中。要使这些文件对Spark可见,需要将
$Spark\u HOME/Spark env.sh
中的
HADOOP\u CONF\u DIR
设置为包含配置文件的位置

[来源于《火花-权威指南》一书]

“我们是否需要在每个
df.writeStream
选项中提供检查点,即我们还可以传入
spark.sparkContext.setCheckpointDir(检查点位置)
对吗?”

实际上,您可以为SQLContext中的所有查询集中设置检查点位置,但强烈建议为每个流设置唯一的检查点位置。上的Databricks博客说:

此检查点位置保留唯一标识查询的所有基本信息。因此,每个查询必须具有不同的检查点位置,并且多个查询不应具有相同的位置

“作为最佳做法,我们建议您始终指定checkpointLocation选项。”


您好@mike,谢谢您的回答,但是有一个问题仍然存在,即使使用本地文件系统或hdfs。它在“线程”main中给出了一个错误
异常“org.apache.spark.sql.AnalysisException:此查询不支持从检查点位置恢复。删除hdfs://127.0.0.1:9000/c1/offsets 重新开始。我在这里遗漏了什么?对不起,忘记我之前的评论。您只能对“可重新播放”源使用检查点。“socket”源代码不可重新播放,所以你根本不能在这里使用checkpoining。是的,你是对的。socket将无法工作。我认为卡夫卡会很好的是的,对卡夫卡来说它会很好的工作!只要确保每个输出流都有一个检查点位置,以防在同一个应用程序中有多个查询。您好@mike,请您也来看看: