У меня много данных (строка JSON) в день (около 150-200Б).
Я хочу вставить JSON в Hadoop, как лучше всего это сделать (мне нужна быстрая вставка и быстрый запрос по полям JSON)?
Нужно ли мне использовать куст и создавать схему Avro для моего JSON? Или мне нужно вставить JSON в виде строки в определенный столбец?
Мы пока не пробовали, мы ищем лучший способ сделать это перед тем, как начать

Если вы хотите, чтобы данные были доступны в Hive для выполнения в основном агрегатов поверх них, я бы предложил один из следующих методов с использованием Spark.
Если у вас есть многострочные файлы json
var df = spark.read.json(sc.wholeTextFiles("hdfs://ypur/hdfs/path/*.json").values)
df.write.format("parquet").mode("overwrite").saveAsTable("yourhivedb.tablename")
Если у вас есть однострочные файлы json
val df = spark.read.json("hdfs://ypur/hdfs/path/*.json")
df.write.format("parquet").mode("overwrite").saveAsTable("yourhivedb.tablename")
Spark автоматически выведет схему таблицы за вас. Если вы используете дистрибутив cloudera, вы сможете читать данные с помощью impala (в зависимости от вашей версии cloudera он может не поддерживать сложные структуры)
Спасибо, а если у меня JSON в виде строки (от kafka), что мне нужно изменить?
это зависит от того, чего вы пытаетесь достичь ... если вы хотите получать данные в реальном времени, сложнее поддерживать синхронизацию со структурами Hive. Я бы предложил установить макет исправления для его загрузки ... но это во многом зависит от вашего варианта использования и того, что вам нужно, получение данных в реальном времени намного сложнее, если вы хотите сделать их доступными для аналитики эффективным способом
Да, мне нужно вводить данные в реальном времени
I want to insert the JSON to Hadoop
Вы просто помещаете его в HDFS ... Поскольку у вас есть данные за определенный период времени, вам нужно создать разделы для чтения Hive
jsondata/dt=20180619/foo.json
jsondata/dt=20180620/bar.json
Do I need to use hive and create Avro scheme to my JSON?
Неа. Не уверен, где вы перепутали Avro и JSON. Теперь, если бы вы могли преобразовать JSON в определенный Avro со схемой, это помогло бы улучшить запросы Hive, поскольку запрос структурированного двоичного файла лучше, чем анализ текста JSON.
do I need to insert the JSON as a string to a specific column?
Не рекомендуется. Вы могли бы, но тогда вы не можете запросить его через Поддержка JSON Serde Hive
Не забывайте, что с приведенной выше структурой вам понадобится PARTITIONED BY (dt STRING). А чтобы в таблице были созданы разделы для существующих файлов, вам нужно вручную (и ежедневно) запускать команду MSCK REPAIR TABLE
i have JSON as string (from kafka)
Не используйте для этого Spark (по крайней мере, не изобретайте велосипед). Я предлагаю использовать Confluent HDFS Kafka Connect с поддержкой создания таблиц Hive.
что ты уже испробовал?