Hadoop 文件格式

Hadoop File Formats

我需要考虑如何将我的数据写入 Hadoop。

我正在使用 Spark,我收到了一条来自 Kafka 主题的消息,每条消息都在 JSON 记录中。

我每天大约有 200B 条记录。

数据字段可能会更改(不是很多,但将来可能会更改),

我需要快速写入和快速读取,磁盘空间小。

我应该选择什么? Avro 还是 Parquet?

我还看了下面的https://community.hitachivantara.com/community/products-and-solutions/pentaho/blog/2017/11/07/hadoop-file-formats-its-not-just-csv-anymore And Avro v/s Parquet

但是还是不知道选什么,

有什么建议吗?

如果您关心存储和查询,按顺序排列的最佳存储类型是

  • 兽人
  • 镶木地板
  • 阿芙罗
  • JSON
  • CSV/TSV(纯结构化文本)
  • 非结构化文本

如果您的磁盘容量有限 space 并且想牺牲检索,Snappy 或 Bzip2 最好,Bzip2 压缩得更多。

通常,我看到人们直接将 JSON 数据写入 Hadoop,然后批处理作业以每天将其转换为更可选的格式(例如,Hadoop 更喜欢非常大的文件而不是很多小文件个)

如果你很在意检索速度,可以使用HBase或者其他数据库(Hive不是数据库),但最起码​​你需要根据业务需要将流式数据压缩成更大的时间块。

A​​vro 原生支持模式演变,如果您能够在现有的 Kafka 集群旁边安装 Confluent Schema Registry,那么您可以使用 Kafka HDFS Connect 立即从 Avro 编写 Parquet(或 JSON ,我认为,假设您在消息中有一个架构字段)连同一个 Hive table.

其他选项包括 Apache Nifi 或 Streamsets。换句话说,不要重新发明轮子编写 Spark 代码将 Kafka 拉到 HDFS