Если вы заботитесь о хранилище и запросах, оптимальные типы хранилища на порядок
- ORC
- Паркет
- Avro
- JSON
- CSV / TSV (простой структурированный текст)
- неструктурированный текст
Если вы ограничены в дисковом пространстве и хотели бы пожертвовать извлечением, лучше всего подойдет Snappy или Bzip2, а Bzip2 будет более сжатым.
Как правило, я вижу, как люди пишут данные JSON непосредственно в Hadoop, а затем пакетируют задание, чтобы ежедневно преобразовывать его, например, в более необязательный формат (например, Hadoop предпочитает очень большие файлы, а не множество крошечных)
Если вы заботитесь о скорости поиска, используйте HBase или какую-либо другую базу данных (Hive не является базой данных), но, по крайней мере, вам нужно будет сжимать потоковые данные в более крупные куски времени в соответствии с потребностями вашего бизнеса.
Avro изначально поддерживает эволюцию схемы, и если вы можете установить реестр схем Confluent вместе со своим существующим кластером Kafka, то вы можете просто использовать Kafka HDFS Connect, чтобы написать Parquet немедленно из Avro (или, думаю, JSON, если вы иметь поле схемы в сообщении) в HDFS вместе с таблицей Hive.
Другие опции включают Apache Nifi или Streamsets. Другими словами, не изобретайте колесо, пишущее код Spark, чтобы вытянуть Kafka в HDFS