将Avro数据转换为Parquet格式

简介:

本文主要测试将Avro数据转换为Parquet格式的过程并查看 Parquet 文件的 schema 和元数据。

准备

将文本数据转换为 Parquet 格式并读取内容,可以参考 Cloudera 的 MapReduce 例子:https://github.com/cloudera/parquet-examples

准备文本数据 a.txt 为 CSV 格式:

1,2
3,4
4,5

准备 Avro 测试数据,可以参考 将Avro数据加载到Spark 一文。

本文测试环境为:CDH 5.2,并且 Avro、Parquet 组件已经通过 YUM 源安装。

将 CSV 转换为 Parquet

在 Hive 中创建一个表并导入数据:

create table mycsvtable (x int, y int)
row format delimited
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;

LOAD DATA LOCAL INPATH 'a.txt' OVERWRITE INTO TABLE mycsvtable;

创建 Parquet 表并转换数据:

create table myparquettable (a INT, b INT)
STORED AS PARQUET
LOCATION '/tmp/data';

insert overwrite table myparquettable select * from mycsvtable;

查看 hdfs 上生成的 myparquettable 表的数据:

$ hadoop fs -ls /tmp/data
Found 1 items
-rwxrwxrwx   3 hive hadoop        331 2015-03-25 15:50 /tmp/data/000000_0

在 hive 中查看 myparquettable 表的数据:

hive (default)> select * from myparquettable;
OK
myparquettable.a  myparquettable.b
1 2
3 4
4 5
Time taken: 0.149 seconds, Fetched: 3 row(s)

查看 /tmp/data/000000_0 文件的 schema :

$ hadoop parquet.tools.Main schema /tmp/data/000000_0
message hive_schema {
  optional int32 a;
  optional int32 b;
}

查看 /tmp/data/000000_0 文件的元数据:

$ hadoop parquet.tools.Main meta /tmp/data/000000_0
creator:     parquet-mr version 1.5.0-cdh5.2.0 (build 8e266e052e423af5 [more]...

file schema: hive_schema
--------------------------------------------------------------------------------
a:           OPTIONAL INT32 R:0 D:1
b:           OPTIONAL INT32 R:0 D:1

row group 1: RC:3 TS:102
--------------------------------------------------------------------------------
a:            INT32 UNCOMPRESSED DO:0 FPO:4 SZ:51/51/1.00 VC:3 ENC:BIT [more]...
b:            INT32 UNCOMPRESSED DO:0 FPO:55 SZ:51/51/1.00 VC:3 ENC:BI [more]...

将 Avro 转换为 Parquet

使用 将Avro数据加载到Spark 中的 schema 和 json 数据,从 json 数据生成 avro 数据:

$ java -jar /usr/lib/avro/avro-tools.jar fromjson --schema-file twitter.avsc twitter.json > twitter.avro

将 twitter.avsc 和 twitter.avro 上传到 hdfs:

$ hadoop fs -put twitter.avsc
$ hadoop fs -put twitter.avro

使用 https://github.com/laserson/avro2parquet 将 avro 转换为 parquet 格式:

$ hadoop jar avro2parquet.jar twitter.avsc  twitter.avro /tmp/out

然后,在 hive 中创建表并导入数据:

create table tweets_parquet (username string, tweet string, timestamp bigint) 
STORED AS PARQUET;

load data inpath '/tmp/out/part-m-00000.snappy.parquet' overwrite into table tweets_parquet;

接下来,可以查询数据并查看 parquet 文件的 schema 和元数据,方法同上文。

目录
相关文章
|
3月前
|
存储 大数据 测试技术
用于大数据分析的数据存储格式:Parquet、Avro 和 ORC 的性能和成本影响
在大数据环境中,数据存储格式直接影响查询性能和成本。本文探讨了 Parquet、Avro 和 ORC 三种格式在 Google Cloud Platform (GCP) 上的表现。Parquet 和 ORC 作为列式存储格式,在压缩和读取效率方面表现优异,尤其适合分析工作负载;Avro 则适用于需要快速写入和架构演化的场景。通过对不同查询类型(如 SELECT、过滤、聚合和联接)的基准测试,本文提供了在各种使用案例中选择最优存储格式的建议。研究结果显示,Parquet 和 ORC 在读取密集型任务中更高效,而 Avro 更适合写入密集型任务。正确选择存储格式有助于显著降低成本并提升查询性能。
499 1
用于大数据分析的数据存储格式:Parquet、Avro 和 ORC 的性能和成本影响
|
分布式计算 Hadoop
Hadoop支持的文件格式之Avro(下)
Hadoop支持的文件格式之Avro(下)
212 0
Hadoop支持的文件格式之Avro(下)
|
分布式计算 Hadoop Java
Hadoop支持的文件格式之Avro(中)
Hadoop支持的文件格式之Avro(中)
229 0
Hadoop支持的文件格式之Avro(中)
|
存储 分布式计算 NoSQL
Hadoop支持的文件格式之Avro(上)
Hadoop支持的文件格式之Avro(上)
476 0
Hadoop支持的文件格式之Avro(上)
|
JSON 分布式计算 Hadoop
【Hadoop Summit Tokyo 2016】文件格式的基准——Avro, JSON, ORC & Parquet
本讲义出自Owen O’Malley在Hadoop Summit Tokyo 2016上的演讲,主要分享了Avro, JSON, ORC & Parquet这些文件基本格式的相关内容,介绍了文件格式如何发挥不同的作用以及他们如何才能更好地发挥作用以及这些文件数据格式的各自的优点,还分享了如何使用真实的、多样化的数据集,并介绍了过度依赖类似的数据导致的弱点以及开放和审查基准。
2908 0
|
SQL 存储 分布式计算
Avro数据序列化
序列化:把结构化的对象转换成字节流,使得能够在系统中或网络中通信 需要把数据存储到hadoop的hbase 常用序列化系统 thrift   (hive,hbase) Protocol Buffer (google) avro 本文出自 “点滴积累” 博客,请务必保留此出处http://tianxingzhe.blog.51cto.com/3390077
1454 0
|
消息中间件 Java Kafka
kafka 客户端使用Avro序列化
kafka 客户端使用Avro序列化
213 0
|
分布式计算 Java Hadoop
JAVA—其他—Avro序列化
Avro是hadoop的一个用于序列化的组件 理解特点: 1. 高效 2. 序列化后体积小 3. 动态 动态指的是数据的结构一旦定义,可以在多处语言生成实体类
296 0
|
存储 分布式计算 Java
深入对比Java与Hadoop大数据序列化机制Avro
Java有自己提供的序列化机制,而我们的Hadoop也提供了自己的序列化机制,二者究竟有什么差异呢?为什么Hadoop要重新设计自己的序列化体系?序列化大数据对象的过程,Writable接口底层源码实现。
2151 0