Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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结构化流媒体中的偏移量?(与_spark_元数据有关的问题)_Apache Spark_Spark Streaming_Spark Structured Streaming - Fatal编程技术网

Apache spark 我们如何管理Spark结构化流媒体中的偏移量?(与_spark_元数据有关的问题)

Apache spark 我们如何管理Spark结构化流媒体中的偏移量?(与_spark_元数据有关的问题),apache-spark,spark-streaming,spark-structured-streaming,Apache Spark,Spark Streaming,Spark Structured Streaming,背景: 我已经编写了一个简单的spark结构化蒸汽应用程序,将数据从Kafka移动到S3。我们发现,为了支持“一次到位保证”,spark创建了_spark_元数据文件夹,当流媒体应用程序长时间运行时,元数据文件夹会变得太大,以至于我们开始出现OOM错误。我想摆脱Spark结构化流媒体的元数据和检查点文件夹,自己管理偏移量 我们如何管理Spark流媒体中的偏移: 我已经使用val offsetRanges=rdd.asInstanceOf[HasOffsetRanges].offsetRanges

背景: 我已经编写了一个简单的spark结构化蒸汽应用程序,将数据从Kafka移动到S3。我们发现,为了支持“一次到位保证”,spark创建了_spark_元数据文件夹,当流媒体应用程序长时间运行时,元数据文件夹会变得太大,以至于我们开始出现OOM错误。我想摆脱Spark结构化流媒体的元数据和检查点文件夹,自己管理偏移量

我们如何管理Spark流媒体中的偏移: 我已经使用val offsetRanges=rdd.asInstanceOf[HasOffsetRanges].offsetRanges在Spark结构化流媒体中获取偏移量。但我想知道如何获得偏移量和其他元数据,以便使用Spark结构化流来管理我们自己的检查点。您有实现检查点的示例程序吗

我们如何管理Spark结构化流媒体中的偏移量??? 看看这个吉拉。看起来没有提供偏移。我们该怎么办

问题是在6小时内,元数据的大小增加到45MB,并一直增长到接近13GB。分配的驱动程序内存为5GB。当时,系统因OOM而崩溃。想知道如何避免这些元数据变得如此庞大?如何使元数据不记录那么多信息

代码:

1. Reading records from Kafka topic
  Dataset<Row> inputDf = spark \
  .readStream \
  .format("kafka") \
  .option("kafka.bootstrap.servers", "host1:port1,host2:port2") \
  .option("subscribe", "topic1") \
  .option("startingOffsets", "earliest") \
  .load()
2. Use from_json API from Spark to extract your data for further transformation in a dataset.
   Dataset<Row> dataDf = inputDf.select(from_json(col("value").cast("string"), EVENT_SCHEMA).alias("event"))
       ....withColumn("oem_id", col("metadata.oem_id"));
3. Construct a temp table of above dataset using SQLContext
   SQLContext sqlContext = new SQLContext(sparkSession);
   dataDf.createOrReplaceTempView("event");
4. Flatten events since Parquet does not support hierarchical data.
5. Store output in parquet format on S3
   StreamingQuery query = flatDf.writeStream().format("parquet")
1。阅读卡夫卡主题的记录
数据集inputDf=spark\
.readStream\
.格式(“卡夫卡”)\
.option(“kafka.bootstrap.servers”,“主机1:port1,主机2:port2”)\
.期权(“认购”、“主题1”)\
.选项(“起始偏移量”、“最早”)\
.load()
2.使用Spark的from_json API提取数据,以便在数据集中进行进一步转换。
数据集dataDf=inputDf.select(来自json(col(“value”).cast(“字符串”)、事件\模式)。别名(“事件”))
..带有列(“oem_id”,列(“metadata.oem_id”);
3.使用SQLContext构建上述数据集的临时表
SQLContext SQLContext=新的SQLContext(sparkSession);
dataDf.createOrReplaceTempView(“事件”);
4.展平事件,因为拼花不支持分层数据。
5.在S3上以拼花格式存储输出
StreamingQuery query=flatDf.writeStream().format(“拼花地板”)

数据集dataDf=inputDf.select(来自json(col(“value”).cast(“字符串”)、事件\模式)。别名(“事件”)) .选择(“事件.元数据”,“事件.数据”,“事件.连接”,“事件.注册\事件”,“事件.版本\事件” ); SQLContext SQLContext=新的SQLContext(sparkSession); dataDf.createOrReplaceTempView(“事件”); 数据集flatDf=sqlContext .sql(“选择“+”日期、时间、id,“+flattschema(EVENT_SCHEMA,“EVENT”)+”from EVENT”); StreamingQuery=flatDf .writeStream() .outputMode(“追加”) .选项(“压缩”、“快速”) .格式(“拼花地板”) .选项(“检查点位置”,检查点位置) .选项(“路径”,outputPath) .分割人(“日期”、“时间”、“id”) .trigger(trigger.ProcessingTime(triggerProcessingTime)) .start();
query.waittermination()

对于非批量Spark结构化流式KAFKA集成:

引述:

结构化流忽略Apache Kafka中的偏移量提交

相反,它依赖于驾驶员侧自身的补偿管理,驾驶员侧负责将补偿分配给执行者和执行者 用于在处理轮结束时对其进行检查(历元或 微型批次)

如果您遵循Spark KAFKA集成指南,则无需担心

优秀参考:

对于批处理,情况不同,您需要自己管理并存储偏移量

更新
根据我的评论,我建议这个问题稍微不同,建议你看看。除了您更新的评论和没有错误的事实之外,我建议您在Spark Structured Streaming的元数据上使用此选项。查看代码,与我的风格不同,但看不到任何明显的错误。

批处理还是非批处理?添加注释供您考虑添加您的代码pls45mb没有什么不确定的相关内容,请显示错误谢谢您的回复。我已经编写了一个简单的spark结构化蒸汽应用程序,将数据从Kafka移动到S3。发现为了支持“一次保证”,spark创建了_spark_metadata文件夹,该文件夹最终变得太大,因为流媒体应用程序应该永远运行。但是,当流媒体应用程序运行很长一段时间时,元数据文件夹会变得非常大,以至于我们开始出现OOM错误。解决OOM的唯一方法是删除检查点和元数据文件夹,并释放有价值的客户数据。火花打开JIRAs Spark-24295和Spark-29995、Spark-30462和Spark-24295)这是目前情况的不利方面。有很多关于人们试图缓解这种情况的帖子,但是有了检查点就没有问题了。它将以非批量方式重新启动。困惑的是,我刚刚重新阅读了关于SSS认证的Databricks指南,但他们没有提到这一点。使用WriteHead日志等和检查点,应该没有问题。不过,我注意到他们课程中的各种错误。主要问题是太多了,请停止模式更改等。您可能需要修改您的问题和标题。非常感谢@thebluphantom。。考虑回到SPARK STREAMING(批处理版本)。看起来必须指定检查点。我已尝试移除检查点。。。我现在无法启动应用程序。2020-06-17 20:00:04222错误[Driver]org.apache.spark.deploy.warn.ApplicationMaster:用户类引发异常:org.apache.spark.sql.AnalysisException:必须通过选项(“checkpointLocation”,…)指定checkpointLocation,或者如何消除因_spark_元数据大小增长过大而导致的OOM。。。