我正在尝试编写一个非常简单的avro架构(很简单因为我只是指出我当前的问题)来编写基于json格式存储的数据的avro数据文件.诀窍是一个字段是可选的,其中一个avrotools或我做得不对.
我的目标不是编写自己的序列化器,最终将会有这个,我处于早期阶段.
数据(工作),在名为so.log的文件中:
{
"valid": {"boolean":true}
, "source": {"bytes":"live"}
}
Run Code Online (Sandbox Code Playgroud)
该架构位于名为so.avsc的文件中:
{
"type":"record",
"name":"Event",
"fields":[
{"name":"valid", "type": ["null", "boolean"],"default":null}
, {"name":"source","type": ["null", "bytes"],"default":null}
]
}
Run Code Online (Sandbox Code Playgroud)
我可以使用以下命令轻松生成avro文件:
java -jar avro-tools-1.7.6.jar fromjson --schema-file so.avsc so.log
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.问题是"源"是可选的,所以我希望以下数据也是有效的:
{
"valid": {"boolean":true}
}
Run Code Online (Sandbox Code Playgroud)
但是运行相同的命令会给我错误:
Exception in thread "main" org.apache.avro.AvroTypeException: Expected start-union. Got END_OBJECT
at org.apache.avro.io.JsonDecoder.error(JsonDecoder.java:697)
at org.apache.avro.io.JsonDecoder.readIndex(JsonDecoder.java:441)
at org.apache.avro.io.ResolvingDecoder.doAction(ResolvingDecoder.java:229)
at org.apache.avro.io.parsing.Parser.advance(Parser.java:88)
at org.apache.avro.io.ResolvingDecoder.readIndex(ResolvingDecoder.java:206)
at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:155)
at org.apache.avro.generic.GenericDatumReader.readField(GenericDatumReader.java:193)
at org.apache.avro.generic.GenericDatumReader.readRecord(GenericDatumReader.java:183)
at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:151)
at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:142)
at org.apache.avro.tool.DataFileWriteTool.run(DataFileWriteTool.java:99)
at org.apache.avro.tool.Main.run(Main.java:84)
at org.apache.avro.tool.Main.main(Main.java:73)
Run Code Online (Sandbox Code Playgroud)
我确实在架构中尝试了很多变化,甚至是那些不符合avro规范的东西.据我所知,我在这里展示的架构是规范应该是什么.
有人会知道我做错了什么,以及如何在不编写自己的序列化器的情况下实际拥有可选元素?
谢谢,
我有一个 Oozie 工作流,其中一个步骤是 java 步骤,运行存储在本地文件系统上的 jar(该 jar 存在于所有节点上)。
最初,jar 是通过 RPM 安装的,因此它们都具有相同的时间戳。
在试验时,我在这个 jar 上手动复制了一个新版本,现在我收到了消息:
org.apache.oozie.action.ActionExecutorException: JA009: org.apache.hadoop.yarn.exceptions.YarnException: Failed to submit application_1516602562532_15451 to YARN : Application application_1516602562532_15451 failed 2 times due to AM Container for appattempt_1516602562532_15451_000002 exited with exitCode: -1000
For more detailed output, check the application tracking page: http://ip-10-0-0-239.eu-west-1.compute.internal:8088/cluster/app/application_1516602562532_15451 Then click on links to logs of each attempt.
Diagnostics: java.io.IOException: Resource file:/opt/tst/tst.jar changed on src filesystem (expected 1516886392000, was 1516891496000
Failing this attempt. Failing the application.
Run Code Online (Sandbox Code Playgroud)
主线是:
资源文件:/opt/tst/tst.jar 在 …
长话短说:
如何手动ACTIONS_RUNTIME_TOKEN和 ACTIONS_CACHE_URL在 GitHub 中查找操作?
语境
我正在尝试在 GitHub 操作中的 buildkit 构建过程中缓存 docker 层。
理论上,使用docker/setup-buildx-action、docker/build-push-action和crazy-max/ghaction-github-runtime操作很容易。问题是,我不能使用它们(组织政策)。
我的工作流程的相关部分现在是:
$repo_url= "<ECR repo in aws>"
docker buildx create --use --driver=docker-container
docker buildx build --tag "${repo_url}:latest" --file docker/Dockerfile . --cache-to "type=gha,mode=max" --cache-from type=gha
Run Code Online (Sandbox Code Playgroud)
缓存需要 2 个变量/配置:ACTIONS_RUNTIME_TOKEN和
ACTIONS_CACHE_URL。它们将由 来设置ghaction-github-runtime,因此我无法使用。查看代码,似乎从环境中导出了2个变量,但我找不到它们。
我如何在没有其他操作帮助的情况下手动找到它们?
caching docker github-actions docker-buildkit github-actions-artifacts