在数字化时代,每天产生成千上万的TB级数据。存储和处理这些数据成为了一项挑战。这些数据来自不同的源头,包括社交媒体、网络应用、手机、传感器、银行交易等。数据的结构也各不相同,有的结构化,有的非结构化或半结构化。因此,需要一个巨大的存储空间来处理各种类型的数据,并且需要合适的文件格式来存储这些数据,以便从中获取有用的洞察。
存储大数据的成本在某些技术中更高。例如,Hadoop为了实现容错会创建文件副本。访问文件需要CPU和其他资源,这本质上是昂贵的。随着数据量的增加,存储和访问成本也随之增加。使用合适的文件格式的好处包括:
每种文件格式都是根据特定的数据特性和优化技术设计的。例如,文本文件格式易于使用,但不能用于存储大量数据。
AVRO是一个开源项目,它为Apache Hadoop提供了数据序列化和交换服务。它是一种基于行的存储格式,用于Hadoop系统,并用作数据序列化平台。AVRO以JSON格式存储模式,使其易于阅读和解释。在AVRO中,数据以二进制格式存储,因此它是紧凑且高效的。AVRO文件具有标记,有助于将较大的数据集分割成较小的子集,以实现并行处理。AVRO的关键特性是它可以有效地处理随时间变化的数据模式。它处理模式变化,如缺失字段、添加字段和更改字段。它还为不同的编程语言提供API支持,如C、C++、Java、Python、Ruby等。
Parquet是一个开源文件格式。它以列式格式存储数据,提供出色的数据压缩和编码方案,以增强处理复杂数据批量的性能。Parquet是一个二进制文件,包含有关其内容的元数据。列的元数据存储在文件的末尾。它针对写入一次读取多次(WORM)的范式进行了优化。它支持文件分割,有助于并行数据处理。按列组织,可以更好地压缩数据,因为数据更加同质。它还支持模式演变。它仅限于批量处理。它为OLAP工作负载提供高效率。例如,BI(商业智能)中的数据分析工作。借助Spark处理引擎,它可以在更短的时间内读取数据。它通常与Spark、Impala、Arrow和Drill一起使用。
在日常使用案例中,看到的数据大多是行格式而不是列格式,因为当数据量较小时,搜索和更新记录更容易。但是,当数据量巨大时,与搜索、修改或删除记录相关的成本就变得相当耗时。为了解决这个问题,使用列式存储格式。假设有200列的大量数据,只想更新一列,那么列式存储格式在这种情况下将更加高效。在行格式中,它将加载所有数据,然后尝试找到需要修改的列和记录。而在列式存储格式中,它只读取所需的列,并根据需要更新该特定列中的数据。因此,列格式提高了查询性能。与搜索、修改和删除记录相关的成本和时间将减少。