我需要考虑如何将数据写入hadoop。
我正在使用spark,我从kafka主题中得到一条消息,每条消息都在json记录中。
我每天有大约200亿条记录。
数据字段可能会更改(不是很多,但将来可能会更改),
我需要快速写入和快速读取,在磁盘大小低。
我应该选择什么?avro还是Parquet地板?
我也读了以下内容https://community.hitachivantara.com/community/products-and-solutions/pentaho/blog/2017/11/07/hadoop-file-formats-its-not-just-csv-anymore 和avro v/sParquet地板
但还是不知道该选什么,
有什么建议吗?
1条答案
按热度按时间798qvoo81#
如果您关心存储和查询,最佳的存储类型是
兽人
parquet
阿夫罗
json文件
csv/tsv(纯结构化文本)
无结构文本
如果您的磁盘空间有限,并且希望牺牲检索,那么snappy或bzip2将是最好的,bzip2将更加压缩。
通常,我会看到人们直接将json数据写入hadoop,然后每天对作业进行批处理以将其转换为更可选的格式(例如,hadoop更喜欢非常大的文件,而不是许多小的文件)
如果您关心检索速度,可以使用hbase或其他数据库(hive不是数据库),但至少,您需要根据业务需要将流式数据压缩成更大的时间块。
avro本机支持模式演化,如果您能够在现有kafka集群旁边安装合流模式注册表,那么您可以使用kafka hdfs connect将parquet立即从avro(或者json,我认为,假设您在消息中有一个schema字段)和一个hive表一起写入hdfs。
其他选项包括apachenifi或streamset。换句话说,不要重新发明轮子写Spark代码拉Kafka到hdfs