Я предпочитаю хранить метаданные вместе с данными, а затем проектировать ваше приложение на основе метаданных, а не встраивать метаданные в проект или реализацию вашего приложения, что означает, что обновления метаданных требуют обновления вашего приложения.Конечно, существуют пределы того, насколько далеко вы можете взять приложение, управляемое метаданными.
Вы можете встраивать метаданные с данными, например, используя схему кодирования, такую как JSON, или вы можете располагать метаданные рядом с данными.например, наличие записей в SeqFile специально для описания метаданных, возможно, с использованием зарезервированных тегов для ключей, чтобы дать метаданным свое собственное пространство имен, отдельное от пространства имен, используемого ключами для фактических данных.
Что касается рекомендациио том, следует ли это упаковывать в отдельные файлы Hadoop, помня о том, что Hadoop можно поручить разделить файл на разделение (вход для фазы карты) с помощью параметров конфигурации.Таким образом, даже один большой SeqFile может обрабатываться параллельно несколькими задачами карты.Преимущество наличия одного файла hdfs состоит в том, что он больше напоминает единицу содержания ваших исходных данных.
Что касается рекомендации о типах ключей (т. Е. Использовать ли текст или двоичный файл), учтите, чтоКлюч будет сравниваться с другими значениями.Чем компактнее ключ, тем быстрее сравнение.Таким образом, если вы можете хранить плотную версию ключа, это было бы предпочтительным.Аналогично, если вы можете структурировать раскладку клавиш так, чтобы первые байты, как правило, НЕ были одинаковыми, это также будет способствовать повышению производительности.Так, например, сериализация Java-класса в качестве ключа не рекомендуется, потому что текстовый поток начинается с имени пакета вашего класса, которое, вероятно, будет таким же, как и у любого другого класса, и, следовательно, является ключом в файле.