Вставьте JSON в Hadoop

У меня много данных (строка JSON) в день (около 150-200Б).

Я хочу вставить JSON в Hadoop, как лучше всего это сделать (мне нужна быстрая вставка и быстрый запрос по полям JSON)?

Нужно ли мне использовать куст и создавать схему Avro для моего JSON? Или мне нужно вставить JSON в виде строки в определенный столбец?

что ты уже испробовал?

d219 19.06.2018 10:21

Мы пока не пробовали, мы ищем лучший способ сделать это перед тем, как начать

Evyatar Elmaliah 19.06.2018 10:32
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
1
2
3 240
2

Ответы 2

Если вы хотите, чтобы данные были доступны в 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), что мне нужно изменить?

Evyatar Elmaliah 19.06.2018 14:56

это зависит от того, чего вы пытаетесь достичь ... если вы хотите получать данные в реальном времени, сложнее поддерживать синхронизацию со структурами Hive. Я бы предложил установить макет исправления для его загрузки ... но это во многом зависит от вашего варианта использования и того, что вам нужно, получение данных в реальном времени намного сложнее, если вы хотите сделать их доступными для аналитики эффективным способом

hlagos 19.06.2018 15:00

Да, мне нужно вводить данные в реальном времени

Evyatar Elmaliah 19.06.2018 15:30

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.

Другие вопросы по теме