问题标签 [avro]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
7656 浏览

java - 在 Java 中,如何创建等效的 Apache Avro 容器文件,而不必强制使用文件作为媒介?

如果任何精通 Apache Avro 的 Java 实现的人正在阅读这篇文章,这在某种程度上是在黑暗中拍摄。

我的高级目标是有某种方式通过网络传输一些系列的 avro 数据(例如,我们只说 HTTP,但特定的协议对于这个目的并不那么重要)。在我的上下文中,我有一个 HttpServletResponse 我需要以某种方式将此数据写入。

我最初尝试将数据写入相当于 avro 容器文件的虚拟版本(假设“响应”的类型为 HttpServletResponse):

这一切都很好,很花哨,但事实证明 Avro 并没有真正提供一种方法来读取除了实际文件之外的容器文件:DataFileReader 只有两个构造函数:

其中 SeekableInput 是一些特定于 avro 的自定义表单,其创建最终也会从文件中读取。现在考虑到这一点,除非有某种方法可以将 InputStream 强制转换为文件(http://stackoverflow.com/questions/578305/create-a-java-file-object-or-equivalent-using-a-byte- array-in-memory-without-a 表示没有,我也尝试过查看 Java 文档),如果 OutputStream 另一端的阅读器接收到该 avro 容器文件(我不确定为什么他们允许将 avro 二进制容器文件输出到任意 OutputStream 而不提供从另一端的相应 InputStream 读取它们的方法,但这不是重点)。看来容器文件阅读器的实现需要“可搜索”

好的,所以看起来这种方法不会做我想要的。创建一个模仿 avro 容器文件的 JSON 响应怎么样?

鉴于上述限制,我不确定这是否是解决此问题的最佳方法,但看起来这可能会奏效。我将把模式(例如,上面的“Schema someSchema”)作为字符串放在“模式”字段中,然后放入适合该模式的记录的 avro-binary-serialized 形式(即“GenericRecord someRecord") 在“数据”字段中。

我实际上想知道下面描述的具体细节,但我认为提供更大的背景也是值得的,这样如果有更好的高级方法我可以采取(这种方法有效但只是感觉不太理想)请告诉我。

我的问题是,假设我采用这种基于 JSON 的方法,如何将我的 Record 的 avro 二进制表示写入 AvroContainer 模式的“数据”字段?例如,我到了这里:

我最初尝试省略 ByteBuffer.wrap 子句,但随后该行

抛出了一个异常,我无法将字节数组转换为 ByteBuffer。很公平,看起来当调用 Encoder 类(其中 JsonEncoder 是一个子类)来编写一个 avro Bytes 对象时,它需要一个 ByteBuffer 作为参数。因此,我尝试用 java.nio.ByteBuffer.wrap 封装 byte[],但是当数据被打印出来时,它被打印为一系列字节,而不是通过 avro 十六进制表示:

这似乎不对。根据 avro 文档,他们给出的示例字节对象说我需要放入一个 json 对象,其示例看起来像“\u00FF”,而我放入的内容显然不是那种格式。我现在想知道的是:

  • 什么是 avro 字节格式的示例?它看起来像“\uDEADBEEFDEADBEEF...”吗?
  • 如何将我的二进制 avro 数据(由 BinaryEncoder 输出到 byte[] 数组中)强制转换为可以粘贴到 GenericRecord 对象中并在 JSON 中正确打印的格式?例如,我想要一个对象数据,我可以为其调用一些 GenericRecord "someRecord.put("data", DATA);" 里面有我的 avro 序列化数据?
  • 当给定文本 JSON 表示并想要重新创建由 AvroContainer 格式 JSON 表示的 GenericRecord 时,我如何将该数据读回另一端(消费者)端的字节数组?
  • (重申之前的问题)有没有更好的方法可以做这一切?
0 投票
0 回答
315 浏览

c++ - 编译文件如何在 C++ 中包含 apache avro

我用 C++ 编写了两个程序“发送者”和“接收者”。我想将一个对象从发送者发送到接收者。我想使用 Avro apache。我阅读了 apache 站点上的文档。我从中复制了一个示例。但我无法编译它。我将 Avro 的所有 .cpp 和 .hh 文件移动到我的项目中并包含所有这些文件,但我不工作。我该怎么办?

0 投票
2 回答
274 浏览

hadoop - Hadoop Streaming 的向后兼容性

AFAK,Hadoop Streaming 只支持文本输入,这意味着数据是按行组织的。但是如果我们想要向后兼容,映射器代码会变得混乱,支持在用 c++ 编写的同一个映射器程序中的不同版本的日志行。

我曾经考虑过avro或protobuf,但似乎在流模式下不​​支持它们,是真的吗?

还有其他解决方案吗?

0 投票
5 回答
55674 浏览

java - 如何使用 Avro 二进制编码器对 Kafka 消息进行编码/解码?

我正在尝试使用 Avro 来读取/写入 Kafka 的消息。有没有人有使用 Avro 二进制编码器对将放入消息队列的数据进行编码/解码的示例?

我需要 Avro 部分而不是 Kafka 部分。或者,也许我应该看一个不同的解决方案?基本上,我正在尝试为 JSON 找到一种更有效的空间解决方案。刚刚提到了 Avro,因为它可以比 JSON 更紧凑。

0 投票
1 回答
1406 浏览

hadoop - Hadoop 中使用 DBInputFormat 的多输入

在我的数据库中,我有多个表,每个表都是不同的实体类型。我有一个在 hadoop 中使用的 Avro 模式,它是这些不同实体类型的所有字段的联合,加上它有一个实体类型字段。

我想做的是为每个实体类型设置一个带有 DBWritable 的 DBInputFormat,将实体类型映射到组合的 Avro 类型。然后将每个 DBInputFormat 赋予 MultipleInputs 之类的东西,以便我可以创建复合输入格式。然后可以将复合输入格式提供给我的 map reduce 作业,以便所有表中的所有数据都可以由同一个映射器类一次处理。

数据会不断地添加到这些数据库表中,因此我需要能够为每个实体类型/dbtable 配置 DBInputFormat 以仅获取新数据并正确进行拆分。

基本上,我需要 DBInputFormat 或 DataDrivenDBInputFormat 的功能,但也需要能够将它们组合起来,类似于使用路径和 MultipleInputs 可以做的事情。

0 投票
1 回答
1558 浏览

java - Avro json 解码器:忽略命名空间

我尝试在项目中使用 Apache Avro ......我遇到了一些困难 avro 序列化/反序列化工作就像一个魅力......但我得到了解码器异常......就像未知的联合分支等等等等......以防万一传入的 json 不包含命名空间记录...例如

我不能将对象放在默认命名空间中......但是解析传入的 json 很重要,无论它是否包含命名空间节点,你能帮我修复它吗

0 投票
2 回答
1879 浏览

cat - Apache 的 avro 是否有 cat 实用程序?

我想知道 Apache 的二进制 avro 文件格式是否有“cat”实用程序?

类似于 zcat 或 bzcat 的东西,分别用于 gzip 和 bzip2。

谢谢你的帮助!

0 投票
1 回答
1046 浏览

java - 使用 avro-maven-plugin 版本 1.6.1 时不推荐使用的代码

我正在使用 Apache Avro 运行 Java 代码。一些代码在 java 文件中被弃用,我不知道为什么。我正在使用 Maven 运行我的 Java 程序。这是java文件

}

问题是什么?块中的代码已被弃用。

这是 .avsc 文件

}

该程序运行良好。只是有些代码已被弃用。当我使用 1.5.1 版时,不推荐使用相同的代码

0 投票
2 回答
6837 浏览

avro - 您可以将数据附加到现有的 Avro 数据文件吗?

似乎没有任何方法可以将数据附加到现有的 Avro 序列化文件。我想让多个进程写入单个 avro 文件,但看起来每次打开它时,我都从头开始。我不想读入所有数据然后再写回。

使用 ruby​​ 示例代码,我尝试了“ab”和“ab+”作为各种设置,但没有任何乐趣。

0 投票
1 回答
651 浏览

hadoop - Pig 中带有 AvroStorage 的逗号分隔列表

我尝试使用逗号分隔列表在 Pig 中使用 AvroStorage 加载多个文件。我使用的语句是:

Pig 声明作业中没有指定输入路径。请参阅下面的堆栈跟踪。我试过猪版本0.8.1-cdh3u2和0.9.1。

有没有人观察到相同的行为?它是错误还是功能?

堆栈跟踪: