小编Ray*_*y J的帖子

如何从 vscode 远程容器查看 docker 日志?

我目前正在使用 vscode 的远程容器扩展和.devcontainer.json指向我的docker-compose.yml文件的文件。

一切正常,我的 docker-compose start 命令开始运行(启动 Web 服务器),但我还没有找到一种方法来快速查看来自 Web 服务器的日志。有没有人找到一种方法来在 vscode 连接到远程容器后自动查看 docker 日志输出?

我知道作为替代方案,我可以删除容器的启动命令,并且在 vscode 连接后,手动打开终端并启动 Web 服务器,但我希望有更简单的方法。

提前致谢!

logging docker docker-compose visual-studio-code

13
推荐指数
3
解决办法
2914
查看次数

使用带水印的附加输出模式时的结构化流异常

尽管我正在使用withWatermark(),但是当我运行我的spark工作时,我收到以下错误消息:

线程"main"中的异常org.apache.spark.sql.AnalysisException:当没有水印的流式DataFrames/DataSets上有流式聚合时,不支持追加输出模式;;

从我在编程指南中看到的内容,这与预期用法(和示例代码)完全匹配.有谁知道什么可能是错的?

提前致谢!

相关代码(Java 8,Spark 2.2.0):

StructType logSchema = new StructType()
        .add("timestamp", TimestampType)
        .add("key", IntegerType)
        .add("val", IntegerType);

Dataset<Row> kafka = spark
        .readStream()
        .format("kafka")
        .option("kafka.bootstrap.servers", brokers)
        .option("subscribe", topics)
        .load();

Dataset<Row> parsed = kafka
        .select(from_json(col("value").cast("string"), logSchema).alias("parsed_value"))
        .select("parsed_value.*");

Dataset<Row> tenSecondCounts = parsed
        .withWatermark("timestamp", "10 minutes")
        .groupBy(
            parsed.col("key"),
            window(parsed.col("timestamp"), "1 day"))
        .count();

StreamingQuery query = tenSecondCounts
        .writeStream()
        .trigger(Trigger.ProcessingTime("10 seconds"))
        .outputMode("append")
        .format("console")
        .option("truncate", false)
        .start();
Run Code Online (Sandbox Code Playgroud)

java apache-spark spark-structured-streaming

8
推荐指数
1
解决办法
5557
查看次数

结构化流媒体:水印与精确一次的语义

编程指南说结构化流媒体使用适当的源/接收器确保端到端的语义.

但是,当作业崩溃并且我们应用了水印时,我不理解它是如何工作的.

下面是我目前想象它如何工作的一个例子,请纠正我在任何我误解的点.提前致谢!

例:

Spark Job:每1小时窗口计数#个事件,1个小时的水印.

消息:

  • A - 时间戳上午10点
  • B - 时间戳上午10:10
  • C - 时间戳上午10:20
  • X - 时间戳下午12点
  • Y - 时间戳下午12:50
  • Z - 时间戳晚上8点

我们开始工作,从源头读取A,B,C,并在我们将它们写入我们的接收器之前的上午10:30崩溃.

下午6点,作业恢复正常,并且知道使用保存的检查点/ WAL重新处理A,B,C.10-11am窗口的最终计数为3.

接下来,它并行读取来自Kafka,X,Y,Z的新消息,因为它们属于不同的分区.首先处理Z,因此最大事件时间戳设置为晚上8点.当作业读取X和Y时,它们现在位于水印之后(晚上8点 - 1小时=晚上7点),因此它们将作为旧数据丢弃.最终计数是1到8-9pm,并且该作业没有报告12-1pm窗口的任何内容.我们丢失了X和Y的数据.

---结束例子---

这种情况准确吗?如果是这样,1小时水印可能足以处理从Kafka-Sspark正常流动时的延迟/无序数据,但是当火花作业停止/ Kafka连接长时间丢失时则不会.避免数据丢失的唯一选择是使用比您预期的工作更长的水印吗?

apache-kafka apache-spark spark-structured-streaming

7
推荐指数
1
解决办法
2401
查看次数

Elixir - 为什么@callback定义中需要类型规范?

似乎在定义行为时,您必须在@callback定义中包含类型规范.然后,当您采用该行为时,编译器要求function_name/arity已定义,但如果您不遵循类型规范,则非常高兴.

我的问题是:

  1. 这些观察是否正确?
  2. 如果是的话,为什么@callback一对类型规格与检查function_name/arity定义的实际功能类型?这使得很难理解什么是文档以及什么是核心功能.Elixir的其余部分似乎清楚地将两者分开,保持类型规格作为可选添加.

例如:

如果省略类型规范,则会出现编译错误

defmodule Greeting do
  @callback hello(person)
end
# (CompileError) iex:82: type specification missing return type: hello(person)
Run Code Online (Sandbox Code Playgroud)

为了使编译器满意,我们必须包含类型规范:

defmodule Greeting do
  @callback hello(%Person{}) :: {:ok, String.t} | {:error, String.t}
end
Run Code Online (Sandbox Code Playgroud)

现在,当我们采用该行为时,编译器会检查function_name/arity已定义的内容:

defmodule WesternGreeting do
  @behaviour Greeting
  def hello(), do: "Howdy"
end
# warning: undefined behaviour function hello/1 (for behaviour Greeting)
Run Code Online (Sandbox Code Playgroud)

但是编译器会忽略@callback中的所有类型规范:

defmodule WesternGreeting2 do
  @behaviour Greeting
  def hello([a, b, c]), do: a <> b <> c …
Run Code Online (Sandbox Code Playgroud)

types module behavior elixir

5
推荐指数
1
解决办法
419
查看次数