首页 > Java > java教程 > 正文

阿夫罗文件

WBOY
发布: 2024-08-30 16:17:32
原创
981 人浏览过

Avro 是一个基于行的社交系统,可以使用 Apache Hadoop 开发的数据序列化框架。 Avro文件是一种可以承载数据序列化的数据文件,用于将数据序列化为紧凑的二进制格式。当我们使用 Apache MapReduce 尝试时,模式将采用 JSON 格式;然后,当我们有需要分配到子集的巨大数据集时,这些文件可以保留标记。它还具有一个容器文件,用于保留易于读写的谨慎数据;无需进行额外配置。

开始您的免费软件开发课程

网络开发、编程语言、软件测试及其他

Avro 文件概述

Avro 文件是一个数据序列化系统,可以提供大型数据结构和紧凑、快速的二进制数据格式。它还可以有容器文件,可以承载连续的数据并使用RPC过程。此外,由于它集成简单,可以与多种语言一起使用,因此不需要创建新的代码来读取或写入数据文件,并且不需要创建代码。它只能使用严格类型语言进行部署。

通常它有两个部分:第一个是可以自愿的模式,第二个是二进制数据。例如,假设我们想使用文本编辑器查看 avro 文件。在这种情况下,我们可以查看两个段,其中第一个段将包含以对象开头的数据,第二个段将包含可以读取的数据以及我们需要的文件类型确认哪个 Bhoomi 能够读写。

Avro 文件配置

让我们看看 Avro 文件的配置,在其中我们可以借助不同的结构化参数来转换 Avro 数据文件的操作。

当我们使用 Hadoop 时,

  • 如果我们想配置 avro 文件,我们不希望实现‘. Avro 的扩展在读取文件时允许使用“avro.mapred.ignore.inputs.without.extension”调整参数,默认值为 false。

阿夫罗文件

  • 对于上述内容,我们首先必须到达 Spark,然后是 Spark 内容,然后是 Hadoop 配置,然后我们必须设置(“avro.mapred.ignore.inputs.without.extension”, “true”)。

当我们尝试配置压缩时,我们必须设置以下属性,

  • 压缩编解码器——spark.sql.avro.compression.codec 有一个 snappy 和 deflates 编解码器,其中 snappy 是默认编解码器。
  • 如果我们想将压缩编解码器设置为 deflate,那么我们必须将压缩级别调整为“spark.sql.avro.deflate.level”,默认级别为“-1”。
  • 我们还可以调整spark簇中的东西,比如

spark.conf.set(“spark.sql.avro.compression.codec”, “deflate”)

spark.conf.set(“spark.sql.avro.deflate.level”, “4”).

阿夫罗文件

Avro 文件的类型

Avro 文件有两种类型,

1.原始类型

包括 null、Boolean、int、long、double、bytes 和 string。

Schema: {"type": "null"}
登录后复制

2.复杂类型

  • 数组:
{
"kind": "array"
"objects": "long"
}
登录后复制
  • map:键是字符串
{
"kind": "map"
"values": "long"
}
登录后复制
  • 记录:
{
"kind": "record",
"name": "---",
"doc": "---",
"area": [
{"name": "--", "type": "int"},
---
]
}
登录后复制
  • 枚举:
{
"kind": "enum",
"name": "---",
"doc": "---",
"symbols": ["--", "--"]
}
登录后复制
  • 已修复: 它有 8 位无符号字节
{
"kind": "fixed",
"name": "---",
"size": in bytes
}
登录后复制
  • 联合:数据将等于模式
[
"null",
"string",
--
]
登录后复制

Avro 文件示例

让我们看看带有架构和不带架构的 avro 文件的示例,

示例#1

使用架构的 Avro 文件:

import java.util.Properties
import java.io.InputStream
import com.boomi.execution.ExecutionUtil
import org.apache.avro.Schema;
import org.apache.avro.file.DataFileStream;
import org.apache.avro.generic.GenericDatumReader;
import org.apache.avro.generic.GenericRecord;
import org.apache.avro.io.DatumReader;
logger = ExecutionUtil.getBaseLogger();
for (int j = 0; j < dataContext.getDataCount(); j++) {
InputStream istm = dataContext.getStream(j)
Properties prop = dataContext.getProperties(j)
DatumReader<GenericRecord> datumReader = new GenericDatumReader<GenericRecord>();
DataFileStream<GenericRecord> dataFileStream = new DataFileStream<GenericRecord>(istm, datumReader);
Schema sche = dataFileStream.getSchema();
logger.info("Schema utilize for: " + sche);
GenericRecord rec = null;
while (dataFileStream.hasNext()) {
rec = dataFileStream.next(rec);
System.out.println(rec);
istm = new ByteArrayInputStream(rec.toString().getBytes('UTF-8'))
dataContext.storeStream(istm, prop)
}
}
登录后复制

在上面的例子中,schema 与 avro 文件一起使用,我们可以说这是一个可以读取 avro 文件的脚本,在这个例子中,我们生成了多个 JSON 文档。我们已经导入了相关的包,设置了模式,并通过创建对象并使用上面脚本中给出的代码将数据写入 JSON 来调用它。

示例#2

没有架构的 Avro 文件:

import java.util.Properties
import java.io.InputStream
import com.boomi.execution.ExecutionUtil
import org.apache.avro.Schema;
import org.apache.avro.file.DataFileStream;
import org.apache.avro.generic.GenericDatumReader;
import org.apache.avro.generic.GenericRecord;
import org.apache.avro.io.DatumReader;
logger = ExecutionUtil.getBaseLogger();
String schemaString = '{"type":"record","name":"college","namespace":"student.avro",' +
'"fields":[{"name":"title","type":"string","doc":"college title"},{"name":"exam_date","type":"string","sub":"start date"},{"name":"teacher","type":"int","sub":"main charactor is the teacher in college"}]}'
for (int k = 0; k < dataContext.getDataCount(); k++) {
InputStream istm = dataContext.getStream(k)
Properties prop = dataContext.getProperties(k)
DatumReader<GenericRecord> datumReader = new GenericDatumReader<GenericRecord>();
DataFileStream<GenericRecord> dataFileStre= new DataFileStream<GenericRecord>(istm, datumReader);
Schema sche = Schema.parse(scheString)
logger.info("Schema used: " + sche);
GenericRecord rec = null;
while (dataFileStre.hasNext()) {
rec = dataFileStre.next(rec);
System.out.println(rec);
is = new ByteArrayInputStream(rec.toString().getBytes('UTF-8'))
dataContext.storeStream(is, prop)
}
}
登录后复制

In the above example, we have written an example of reading files without schema in which we have to understand that if we have not included the schema under the avro file, then we have to perform some steps for informing the interpreter how to explain binary avro data, we also need to generate the schema which has been utilizing, in which this example can avro schema with a different name. We can also set it on another path.

Conclusion

In this article, we have concluded that the avro file is a data file that can work with the data serialized system utilized by Apache Hadoop. It has an open-source platform; we have also seen the configuration of the data files and examples, which helps to understand the concept.

以上是阿夫罗文件的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!