Hadoop文件格式

时间:2018-07-01 15:16:06

标签: apache-spark hadoop hive avro parquet

我需要考虑如何将数据写入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-anymoreAvro v/s Parquet

但仍然不知道该选择什么,

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

如果您关心存储和查询,则最佳存储类型顺序为

  • ORC
  • 实木复合地板
  • Avro
  • JSON
  • CSV / TSV(纯文本)
  • 非结构化文本

如果磁盘空间有限,并且想牺牲检索量,那么Snappy或Bzip2将是最好的选择,而Bzip2的压缩程度更高。

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

如果您关心检索速度,请使用HBase或其他数据库(Hive不是数据库),但是至少,您将需要根据业务需要将流数据压缩为更大的时间块。

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

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