问题标签 [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.
file - Avro hadoop 随机访问文件
我想知道 Avro 是否支持随机访问或查询。例如,如果我创建一个名为 B.avro 的 Avro 文件,其中包含 2 个二进制文件 X.png 和 Y.png,是否可以直接访问 Y.png?无需遍历整个文件,如果有一种方法可以直接使用文件密钥访问文件内容,那就太好了。
如果没有,是否有任何其他数据结构可以让我在 hadoop 环境 sequenceFiles, HAR 中执行此操作?我基本上使用 Avro 作为处理 hadoop 中大量小文件的一种方式,但我也想查询这些文件,这使得将它们存储在更大的集合中时变得很困难。
谢谢。
data-structures - thrift、protobuf、avro 等是否支持直接查询编码数据?
thrift、protobuf、avro 等是否支持对生成的紧凑数据进行查询?或者像节俭服务器这样的东西首先必须在能够查询之前对紧凑数据进行解码?
背景:因为我没有看到我的用例可能有一个完全不同的答案。
我已经在纸上勾勒出一个自定义数据结构(类似于trie),它将包含数以千万计的键值对。整个东西都需要在 RAM 中,所以它需要是紧凑的。
出于这个原因,我可能会跳过普通的 kv 存储,因为编码的开销太大了。他们无法针对结构的特殊情况进行优化。(Redis 每个键 afaik 的开销最小,但这还不够:每个键 100+ 字节)
我研究了Thrift,Protobuf,Avro,Messagepack,它们都允许我将数据编码为一个很好的紧凑结构,所有这些都照顾我的数据结构的特定机会(将键编码为 1 或 2 个字节,位打包,值是固定长度等)
但是,我完全不清楚这些协议/技术中的任何一个是否允许我按原样查询压缩的数据结构,或者是否必须在查询之前对数据结构进行解码?如果是后者,那么整个练习对我来说并没有多大用处。
作为替代方案,我考虑过查看其他编程语言(可能是 c/c++,尽管我从未涉足过它),这可能会让我对结构进行非常严格的内存控制(与 Node/javascript 相反,它是非常糟糕)
任何人?
java - How to specify a default value for an enum using avro IDL?
I haven't found anything in the documentation about this, only generic bla about default values. My assumption was that it should work like this:
The GenericDatumReader in Java unfortunately complains that he is finding a String but expects a MyEnum.
Can anyone confirm that this is the correct way to use a enum with a default value using avro IDL? In that case I have a bug elsewhere. Can anyone confirm that this is not the way to do it and correct me? Any input is appreciated!
Update: In my real world version of this, it seems that a newly added enum to the record is causing the issue even though it has a default value. This means that my reader schema expects an enum, whereas the record does not contain one. Schema evolution should be able to resolve this, but seems to fail. More detail: I am working with Pig here, not direct Java.
scala - 构建倒排索引超过 Java 堆大小
这可能是一个非常特殊的情况,但在我头疼了一段时间后,我想从 Stackoverflow 社区获得帮助。
我正在为大型数据集(来自大型系统的一天的数据)构建倒排索引。倒排索引的构建在 Hadoop 上作为 map reduce 作业执行。倒排索引是在 scala 的帮助下构建的。倒排索引的结构如下:{key:"New", ProductID:[1,2,3,4,5,...]}
这些被写入 avro 文件。
在此过程中,我遇到了 Java 堆大小问题。我认为原因是我上面显示的“新”之类的术语包含大量产品 ID。我有一个粗略的想法,问题可能发生在我的 Scala 代码中:
这就是我使用这种方法的方式(它在许多地方使用,但使用相同的代码结构和登录名)
textPipeDump
正在烫伤MultipleTextLine
字段对象
我有一个案例类来拆分并从该文本行中获取我想要的字段,这就是对象ss
这是我的堆栈跟踪:
当我为小数据集执行 map reduce 作业时,我没有收到错误。这意味着随着数据的增加,我为 New 或 old 等词索引的项目/product_id 的数量会变大,这会导致堆大小溢出。
所以,问题是如何避免java堆大小溢出并完成这项任务。
serialization - Avro 模式存储
我们正在评估用于存储的 avro v/s thrift。在这一点上,Avro 似乎是我们的选择,但是文档指出模式在序列化时与数据一起存储,有没有办法避免这种情况,因为我们负责生产和消费数据,我们想看看是否我们可以避免序列化模式,而且序列化数据与模式的大小差异是否比没有模式的数据大得多?
java - 如何在 avro 模式中存储可选数值
我正在编写一些将 Java ResultSet 存储为 AVRO 数据/模式的代码。我对 AVRO 很陌生。
我这样做的方式是获取 ResultSet 并查询其 ColumnMetadata 以生成 AVRO 模式。在这里,我从 Oracle 类型转换为 AVRO 类型。例如,我将 VARCHAR 转换为 STRING,将 NUMBER 转换为 LONG。
然后,我从 ResultSet 中获取数据并将其写为 TSV 文件,这样我们就有了一个人类可读的输出版本,用于诊断目的。然后我遍历 TSV 文件中的内容,并使用 DatumWriter/DataFileWriter 将其写为 AVRO 文件。
我遇到的问题是我正在查询的一些(Oracle)表具有可为空的 NUMBER 列。在此列为空的情况下,当我从 TSV 文件中读取它时,它是“”。如果我尝试将 "" 写入 LONG 字段,DataFileWriter 会因以下异常而窒息:
由于此处的消息表明 DataFileWriter 正在使用 java.lang.Long(而不是原始 long),我假设我可以检测字段为 LONG 且值为“”的情况,并将值显式设置为 null .
当我尝试序列化它时,我得到以下异常:
现在这个异常是指原始 long 而不是 java.lang.Long。
我在这里想念什么?是否可以有一个可选 LONG 的 AVRO 字段?
我考虑过不编写 TSV 文件,而是直接从我在 ResultSet 中看到的内容编写 AVRO 文件,但我有预感我会遇到同样的问题,因为 DataFileWriter 似乎不喜欢“”或 LONG 字段的空值。我想我可以将所有内容都设为 STRING 字段,但我更愿意保留列类型,以便排序和下游正常工作。
solr - 使用 Avro 文件的 Solr 索引
我已经建立了大型倒排索引,并且我已经以 avro 格式存储了我的倒排索引,我不想将其公开为服务。我想知道有没有办法将 avro 文件加载到 solr,以便 solr 可以索引我建立的倒排索引。
这是我的倒排索引的样子:
java - Mapreduce Hadoop 作业异常输出目录已存在
我正在使用以下运行代码运行 mapreduce 作业,并且它不断给我以下异常。我确保在开始工作之前删除了该文件夹,但它不起作用。
编码:
例外:
java - 使用 Python 读取 AVRO 文件
我有一个 AVRO 文件(由 JAVA 创建),它似乎是 hadoop/mapreduce 的某种压缩文件,我想将它“解压缩”(反序列化)为一个平面文件。每行每条记录。
我了解到有一个用于 python 的AVRO 包,并且我正确安装了它。并运行示例以读取 AVRO 文件。但是,它出现了以下错误,我想知道阅读最简单的示例会发生什么?谁能帮我解释下面的错误。
顺便说一句,如果我做文件的“头”,并使用 VI 打开 AVRO 文件的前几行,我可以看到架构定义以及一些蹩脚的奇怪字符 - 可能是压缩内容。原始 AVRO 文件的起始位如下所示:
我不知道读取 AVRO 文件是否需要这些模式,如下所示:
提前致谢。
java - Avro-IDL 协议到编程 API 模式
我想声明一个使用 Avro 的客户端-服务器(目前在 Avro 网站上有两种提及方式NettyServer
或HTTPServer
)应用程序。为此,我想使用 IDL 文件定义协议。我在文件中输入的唯一内容是 IDL 协议 AVDL。
1. 现在我如何将 AVDL 读入程序化模型?
我找到了IDLProtocolMojo,但所有方法都受到保护,因此无法访问。我知道我可以使用SchemaBuilder
它来定义代码中的模式,并且我想Schema
从手写的 AVDL 定义中读取对象。
我真的不想使用Avro Tools
,因为我希望程序在没有外部命令的代码中完成所有操作。
2. AVPR 中以 JSON 显示的协议定义而不是 AVDL 中的 IDL 也可以做类似的事情吗?